Re: Perl のオブジェクト指向
Shinji KONO wrote:
> hash が見えるのを嫌う人も多いが、オブジェクトを呼び出す方で
> 任意の属性を付加出来るのは便利。普通のオブジェクト指向言語で
> は許されない。そのあたりがPerlっぽい。 呼出側で、オブジェク
> トをカスタマイズ出来る。
ラクダ本では、
> オブジェクトはリファレンスで指された「物」にすぎない
と書かれていますね。
僕は、Perl から OOP に入ったので、何となくリファレンスを憶えて応用して
いったら、それが OOP と呼ばれているものであった、という感じでした。他の
言語の OOP を知らないので、C++ などで OOP が「大袈裟」に喧伝されていたイ
メージから、OOP ってもっと恐ろしい大仰なものかというイメージを脹らませて
いたものでした。
で、Java など OOP で土台から言語仕様をガチガチに固め直してしまったから、
今度はアスペクト志向などという、本末転倒なことになるんじゃないかと。おっ
しゃる通り、Perl だと、OOP のオブジェクトとして扱うことを任意で放棄し
て、呼出し側で、リファレンスとしていじくることができます。
# アスペクト志向という言葉をよく知らないので、外している可能性もあり
# ます。Perl でもアスペクト志向の CPAN モジュールが作られてた気がしま
# す。
> Constructor や new がblessという演算子なので、どの関数呼び出
> しがConstructorかがわからない。自分でオブジェクトの作り方を
> 決める必要がある。new() か、factory pat tern を使うのが普通
> だろう。perldoc perlobj すると、initialize() をConstructorと
> 分けている。
>
> Interface とかabstract class もない。このあたりは、コンパイ
> ラのチェックの機能でしかないので、自分で「作っているつもり」
> になれば良い。document で明示しよう。
POD の中に各ルーチンを埋め込むような感じでコーディングしたりします。
=head1 METHODS
=over
=item new()
This is the constructor.
=cut
sub new () {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
=item hoge()
This is an object method.
=cut
sub hoge() {
(略)
}
=back
--
Masanori HATA
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735