多重分類と動的分類

メモ.

実は現在主流となっているオブジェクト指向プログラミング言語にはある制約があります。それは「オブジェクトが帰属するクラスは唯一で、かつ帰属するクラスを変更することができない」というものです。
つまり会社員、学生をクラスとして定義した場合には、ある人が会社員になったり、学生になったりすることをオブジェクト指向プログラミング言語では直接表現できないのです。また人は会社員、大人、釣り愛好家などといった複数の分類に属することができますが、オブジェクト指向プログラミング言語ではオブジェクトを複数のクラスに帰属させることができません。会社員、大人、釣り愛好家から多重継承したクラスを用意すれば、これらすべての性質を備えたオブジェクトを作ることはできますが、それでさえも多重継承された単一の「会社員&大人&釣り愛好家」クラスに帰属させなければならないのです。
http://www.ogis-ri.co.jp/otc/hiroba/technical/Classification/C3_1.html

現在主流となっているほとんどのプログラミング言語では、多重分類、動的分類をサポートしていません。これはプログラミング言語の実装上の理由によるものです。

まず静的な型チェックの問題があります。
http://www.ogis-ri.co.jp/otc/hiroba/technical/Classification/C3_2.html

これだからモデラーは役立たずなんだよなー.
実装上の制約というわけではなく,効率を考えて設計した結果がこれなのだ.「表現できない」というより「表現する気がない」という方が正しい.ソフトウエアには物理的な制約がないのでいかなる文法でも(理論上は)実現できる.多重分類を直接サポートする言語だって理論上は可能だろう.
ただし,そのような言語には全く実用性がない.それはまるでプログラム自身によるプログラムの動的書き換えをサポートするようなものだ.それがもたらす危険性は多重継承やGOTO文の比ではあるまい.動的分類をサポートするメリットが皆無であるのに対し,デメリットはすさまじいものがある.動的分類をサポートする技術者が一人もいないのも当然だ.
「シンプルにするのは難しい.」「複雑にするならバカでもできる」がソフトウエアの鉄則なのだ.*1

*1:ところで,毎度のことだがモデラーは物事を複雑にするしか脳がないようにみるのだが?