[PHP-users 1979] Re: XP, UML など

TAKAHASHI Masayoshi php-users@php.gr.jp
Tue, 11 Sep 2001 14:21:43 +0900


高橋征義です。

[PHP-users 1966]にて
Morikawa <i@encore-ann.com> wrote:
> あまり概念的なことになると僕はよく分からんのですが、
> Perl5だと継承したクラス自体が他のクラスをいくつか継承
> しているとそれらを継承していくという、
> 
> Super <-----> sub
> 
>     A---B---C---D
>         |   |
>     E---+   |
>             F
> 
> みたいな感じなので、継承という視点からして、逆かな?と。

なるほど、そういうことでしたか。

# 「親クラスの親クラス」の機能を子が継承するのは問題ないですよね?
# PHPでもそうですし。

複数の親クラスを継承すること、つまり多重継承(BとAとEの関係)は、
OO的にもそれなりに自然な考え方だと思います。
よくある例では、「哺乳類」+「空を飛ぶ」とか。PHPでありそうな
ものなら、何かの機能を継承しながら、ログをとるとかシリアライズ
するとかの機能も欲しい、ってなときですかね。こういったことを自然な
形で実現するには、多重継承的なことを行う必要があります。

ただ、多重継承が自由に使えると複雑になりがち、という話もあります。
それを回避するため、例えばJavaであれば多重継承できるのはInterface
だけで実装は継承できないとか、Rubyであれば「mix-in」という特殊な形
でしか継承できないとか、そういったような制限が与えられています。
Perlの場合、「多少複雑になってもやりたいことができることがいい」
というポリシーがある(ような気がする)ので、多重継承もばりばりできる
ような形になっているのでしょう、きっと。
# いや、Perl5の多重継承は詳しく知らないんですが(汗;;

また、最近では、継承自体があまり好まれないというか、多用することを
忌避する傾向がありますね。継承せずにcompositionを使え、とか。
だから、PHPでは多重継承が許されないようですが、多重継承がないから
PHPがOO言語として弱い、ということもないと思います。

高橋征義 (TAKAHASHI Masayoshi)       Email:maki@inac.co.jp