#navi_header|Perl| PerlのOOPについてのメモ。 いろんなモジュールが公開されているが、2006 - 2007 の現状の潮流としては、Catalystが使用しているClass::Data::Inheritable, Class::Accessor など、というのと、Class::Std系列と、その他、の3種類くらいになっているようだ。 それぞれオブジェクト指向の要求に対する内部実装が違う為、相互共存できるのかは不安。 変数の内部隠蔽を徹底するのであればClass::Stdを用いることになるかも知れない。 内部隠蔽が徹底されなくとも良いので、Data::Dumperで普通にダンプできるクラスを、簡単に継承したいのであればCatalyst系の組み合わせになるのかも知れない。 いずれにしても、各モジュールは未実験。 - ''Class::Std'' -- http://search.cpan.org/~dconway/Class-Std-v0.0.8/lib/Class/Std.pm -- Damian Conway 直筆の、"Inside-Out"変数の作成用モジュール。 -- Perlはパッケージ変数に公開レベル(public, private, protectedなど)を指定できない。Class::Stdはlexical変数を活用して"blessed reference(オブジェクト)に紐付けて変数を隠蔽"してくれる。 -- 但し、以下のモジュールと相互共存可能かは不明。 -- また、内部的に変数やデータを特殊な方法で格納する為、Data::Dumperなどが使えなくなる、らしい。 - ''Class::Accessor'' -- http://search.cpan.org/~kasei/Class-Accessor-0.30/lib/Class/Accessor.pm -- Perl風味で setter/getter を簡単に作れる関数を提供してくれる。 -- 以下のような何種類かの亜種が生まれている。 -- ''Class::Accessor::Fast'' --- http://search.cpan.org/~kasei/Class-Accessor-0.30/lib/Class/Accessor/Fast.pm --- 若干の内部機能をそぎ落とし、スピード重視にしたバージョン -- ''Class::Accessor::Grouped'' --- http://search.cpan.org/~claco/Class-Accessor-Grouped-0.03/lib/Class/Accessor/Grouped.pm -- ''Class::Accessor::Lvalue'' --- http://search.cpan.org/~rclamp/Class-Accessor-Lvalue-0.11/lib/Class/Accessor/Lvalue.pm --- 左辺値代入をsetterでできるようにしてくれるらしい。 - ''Class::Data::Inheritable'' -- http://search.cpan.org/~tmtm/Class-Data-Inheritable-0.06/lib/Class/Data/Inheritable.pm -- クラスのメンバ変数の継承を簡単にしてくれるモジュール。Perlだとそこがちょっと弱点だったから。 -- 他に、Class::Data::Inheritable::Transulucentなど何種類か亜種が生まれている。 - ''Class::Data::Accessor'' -- http://search.cpan.org/~claco/Class-Data-Accessor-0.03/lib/Class/Data/Accessor.pm -- Class::Accessor と Class::Data::Inheritable の合わせ技。 - ''NEXT.pm'' -- http://search.cpan.org/~dconway/NEXT-0.60/lib/NEXT.pm -- 継承が行われているときの、メソッドディスパッチャ(?)。同じ名前のサブルーチンが継承関係にあるパッケージで重複して定義されている場合、これを使うと、親子関係を辿って順繰りに呼び出すことも可能・・・らしい。 - ''Class::C3'' -- http://search.cpan.org/~blblack/Class-C3-0.14/lib/Class/C3.pm -- NEXTの仲間で、探索ロジックが異なる・・・らしい。 - ''Class::Mixin'' -- http://search.cpan.org/~stathy/Class-Mixin-0.01/Mixin.pm -- その場で@ISAを操作してその場でMixinクラスを生成してくれるようである。 -- コンストラクタの探索はどうなるのか?や、そもそも使い道が上手く想像できない・・・が、作者が居る以上、需要はあったのだろう。 #navi_footer|Perl|