<?xml version='1.0' encoding='utf-8'?>
<pod xmlns="http://axkit.org/ns/2000/pod2xml">
<head>
	<title>名前</title>
</head>
<sect1>
<title>名前</title>
<para>
Class::Data::Inheritable - 継承可能な, オーバーライド可能な、クラスデータ
</para>
</sect1>
<sect1>
<title>概要</title>
<verbatim><![CDATA[
package Stuff;
use base qw(Class::Data::Inheritable);
]]></verbatim>
<verbatim><![CDATA[
# DataFileを、継承可能なクラスデータとしてセットアップする。
Stuff->mk_classdata('DataFile');
]]></verbatim>
<verbatim><![CDATA[
# このクラスためにデータファイルの場所を宣言する。
Stuff->DataFile('/etc/stuff/data');
]]></verbatim>
</sect1>
<sect1>
<title>概要</title>
<para>
Class::Data::Inheritable は、クラスデータのアクセサ/ミューテータを作るのに向いています。
つまり、(単一のオブジェクトとは違って、)クラス全体に何かを蓄えたい場合です。
このデータは、サブクラスで継承され得ますし、オーバーライドされ得ます。
</para>
<para>
例:
</para>
<verbatim><![CDATA[
Pere::Ubu->mk_classdata('Suitcase');
]]></verbatim>
<para>
これは、Suitcate メソッドを、Pere::Ubu クラスに生成します。
</para>
<para>
新しいメソッドは、クラスデータの一つを得たり、セットするのに、使われ得ます。
</para>
<verbatim><![CDATA[
Pere::Ubu->Suitcase('Red');
$suitcase = Pere::Ubu->Suitcase;
]]></verbatim>
<para>
面白い部分が、クラスが Pere::Ubu から継承するときに起こります：
</para>
<verbatim><![CDATA[
package Raygun;
use base qw(Pere::Ubu);
]]></verbatim>
<verbatim><![CDATA[
# Raygunのスーツケースは Red.
$suitcase = Raygun->Suitcase;
]]></verbatim>
<para>
Raygun は、Pere::Ubuからスーツケースクラスデータ継承します。
</para>
<para>
クラスデータの継承は、メソッド継承にanalgousを動かします。
Raygunが、継承されたクラスデータを(Suitcase()を使って、新しい値をセットすることによって)&quot;オーバーライド&quot;しないかぎり、
Pere::Ubu で、セットされたものをなんでも使い続け、以前の変更を継承し続けます。
</para>
<verbatim><![CDATA[
# Raygun と Pere::Ubu の suitcases は、今は Blue です。
Pere::Ubu->Suitcase('Blue');
]]></verbatim>
<para>
しかし、Raygun が、自分自身のSuitcase() をセットするべきだと決めると、
Suitcase() は、 今や、Pare::Ubu を&quot;オーバーライド&quot;しており、Raygun 自身のものです。
オーバーライドされたメソッドにちょうど、似ています。
</para>
<verbatim><![CDATA[
# Raygun は orange のスーツケースを持つが、Pere::Ubu のスーツケースは、まだ Blue です.
Raygun->Suitcase('Orange');
]]></verbatim>
<para>
さて、Raygun は、Pare::Ubu をオーバーライドしたので、Pare::Ubu による、以前の変更は
まったく Raygun には、影響を与えません。
</para>
<verbatim><![CDATA[
# Raygun は、まだ、orange のスーツケースですが、 Pere::Ubu は、Samsonite を使います。
Pere::Ubu->Suitcase('Samsonite');
]]></verbatim>
</sect1>
<sect1>
<title>メソッド</title>
<list>
<item><itemtext><strong>mk_classdata</strong></itemtext>
<verbatim><![CDATA[
Class->mk_classdata($data_accessor_name);
]]></verbatim>
<para>
これはクラスメソッドで、新しいクラスデータのアクセサを宣言するのに使われます。
$data_accessor_name を名前に使って、新しいアクセサがクラス内に作られます。
</para>
<para>
オーバーライドを容易にするために、mk_classdata は、アクセサへのエイリアス _field_accessor() を作ります。
それで、Suitcase() には、_Suitcase_accessor() というエイリアスがあり、
このエイリアスは、Suitcase() と、ちょうど同じことをします。
単一のアクセサの振る舞いを変えようとして、
まだ、継承可能なクラスデータの恩恵を得たいなら、有益です。次の例のように。
</para>
<verbatim><![CDATA[
sub Suitcase {
    my($self) = shift;
    warn "Fashion tragedy" if @_ and $_[0] eq 'Plaid';
]]></verbatim>
<verbatim><![CDATA[
$self->_Suitcase_accessor(@_);
  }
]]></verbatim>
</sect1>
<sect1>
<title>著作権</title>
<para>
(原文まま)
</para>
<para>
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 <xlink uri='http://www.perl.com/perl/misc/Artistic.html'>http://www.perl.com/perl/misc/Artistic.html</xlink>)
</para>
</sect1>
<sect1>
<title>著者</title>
<para>
(原文まま)
</para>
<para>
Original code by Damian Conway.
</para>
<para>
Maintained by Michael G Schwern &lt;schwern@pobox.com&gt;
</para>
</sect1>
<sect1>
<title>SEE ALSO</title>
<para>
<link xref='perltootc'>perltootc</link> は、とても入念なPerlのクラスデータについての議論があります。
</para>
</sect1>
<sect1>
<title>翻訳について</title>
<para>
翻訳者：加藤敦 (ktat.is@gmail.com)
</para>
<para>
Perlドキュメント日本語訳 Project にて、
Perlモジュール、ドキュメントの翻訳を行っております。
</para>
<verbatim><![CDATA[
http://sourceforge.jp/projects/perldocjp/
http://www.freeml.com/ctrl/html/MLInfoForm/perldocjp@freeml.com
http://www.perldoc.jp
]]></verbatim>
</sect1>
</pod>
