=pod

=head1 名前

Class::Data::Inheritable - 継承可能な, オーバーライド可能な、クラスデータ

=head1 概要

  package Stuff;
  use base qw(Class::Data::Inheritable);

  # DataFileを、継承可能なクラスデータとしてセットアップする。
  Stuff->mk_classdata('DataFile');

  # このクラスためにデータファイルの場所を宣言する。
  Stuff->DataFile('/etc/stuff/data');
  

	Stuff->mk_classdata(DataFile => '/etc/stuff/data');

=head1 概要

Class::Data::Inheritable は、クラスデータのアクセサ/ミューテータを作るのに向いています。
つまり、(単一のオブジェクトとは違って、)クラス全体に何かを蓄えたい場合です。
このデータは、サブクラスで継承され得ますし、オーバーライドされ得ます。

例:

  Pere::Ubu->mk_classdata('Suitcase');

これは、Suitcate メソッドを、Pere::Ubu クラスに生成します。

新しいメソッドは、クラスデータの一つを得たり、セットするのに、使われ得ます。

  Pere::Ubu->Suitcase('Red');
  $suitcase = Pere::Ubu->Suitcase;

面白い部分が、クラスが Pere::Ubu から継承するときに起こります：

  package Raygun;
  use base qw(Pere::Ubu);
  
  # Raygunのスーツケースは Red.
  $suitcase = Raygun->Suitcase;

Raygun は、Pere::Ubuからスーツケースクラスデータ継承します。

クラスデータの継承は、メソッド継承にanalgousを動かします。
Raygunが、継承されたクラスデータを(Suitcase()を使って、新しい値をセットすることによって)"オーバーライド"しないかぎり、
Pere::Ubu で、セットされたものをなんでも使い続け、以前の変更を継承し続けます。

  # Raygun と Pere::Ubu の suitcases は、今は Blue です。
  Pere::Ubu->Suitcase('Blue');

しかし、Raygun が、自分自身のSuitcase() をセットするべきだと決めると、
Suitcase() は、 今や、Pare::Ubu を"オーバーライド"しており、Raygun 自身のものです。
オーバーライドされたメソッドにちょうど、似ています。

  # Raygun は orange のスーツケースを持つが、Pere::Ubu のスーツケースは、まだ Blue です.
  Raygun->Suitcase('Orange');

さて、Raygun は、Pare::Ubu をオーバーライドしたので、Pare::Ubu による、以前の変更は
まったく Raygun には、影響を与えません。

  # Raygun は、まだ、orange のスーツケースですが、 Pere::Ubu は、Samsonite を使います。
  Pere::Ubu->Suitcase('Samsonite');


=head1 メソッド

=head2 B<mk_classdata>

  Class->mk_classdata($data_accessor_name);
  Class->mk_classdata($data_accessor_name => $value);

これはクラスメソッドで、新しいクラスデータのアクセサを宣言するのに使われます。
$data_accessor_name を名前に使って、新しいアクセサがクラス内に作られます。

オーバーライドを容易にするために、mk_classdata は、アクセサへのエイリアス _field_accessor() を作ります。
それで、Suitcase() には、_Suitcase_accessor() というエイリアスがあり、
このエイリアスは、Suitcase() と、ちょうど同じことをします。
単一のアクセサの振る舞いを変えようとして、
まだ、継承可能なクラスデータの恩恵を得たいなら、有益です。次の例のように。

  sub Suitcase {
      my($self) = shift;
      warn "Fashion tragedy" if @_ and $_[0] eq 'Plaid';

      $self->_Suitcase_accessor(@_);
  }

=head1 著作権

(原文まま)

Copyright (c) 2000, Damian Conway and Michael G Schwern. All
Rights Reserved.  This module is free software. It may be used,
redistributed and/or modified under the terms of the Perl Artistic
License (see http://www.perl.com/perl/misc/Artistic.html)


=head1 著者

(原文まま)

Original code by Damian Conway.

Maintained by Michael G Schwern <schwern@pobox.com> until September
2005.

Now maintained by Tony Bowden.

=head1 BUGS and QUERIES

Please direct all correspondence regarding this module to:
bug-Class-Data-Inheritable@rt.cpan.org

=head1 SEE ALSO

L<perltootc> は、とても入念なPerlのクラスデータについての議論があります。

=head1 翻訳について

翻訳者：加藤敦 (atusi@pure.ne.jp)

Perlドキュメント日本語訳 Project にて、
Perlモジュール、ドキュメントの翻訳を行っております。

 http://sourceforge.jp/projects/perldocjp/
 http://freeml.com/ctrl/html/MLInfoForm/perldocjp@freeml.com
 http://www.perldoc.jp

