=encoding euc-jp =pod =head1 名前 Class::Data::Inheritable - 継承可能な, オーバーライド可能な、クラスデータ =head1 概要 package Stuff; use base qw(Class::Data::Inheritable); # DataFileを、継承可能なクラスデータとしてセットアップする。 Stuff->mk_classdata('DataFile'); # このクラスためにデータファイルの場所を宣言する。 Stuff->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 メソッド =over 4 =item B Class->mk_classdata($data_accessor_name); これはクラスメソッドで、新しいクラスデータのアクセサを宣言するのに使われます。 $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(@_); } =back =pod =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 =head1 SEE ALSO L は、とても入念なPerlのクラスデータについての議論があります。 =head1 翻訳について 翻訳者:加藤敦 (ktat.is@gmail.com) Perlドキュメント日本語訳 Project にて、 Perlモジュール、ドキュメントの翻訳を行っております。 http://sourceforge.jp/projects/perldocjp/ http://www.freeml.com/ctrl/html/MLInfoForm/perldocjp@freeml.com http://www.perldoc.jp