ObjectSquare [1999 年 6 月号]

[オブジェクト指向は本当に「オブジェクト」指向か?]


3.2 なぜ多重分類、動的分類を実装できないのか?

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

まず静的な型チェックの問題があります。
C++やJAVAなどの強い型付け言語においては、あるオブジェクトの帰属するクラスが、時間の経過によって変化するとなると、コンパイル時にメソッドの名前や引数の型チェックを行うことは不可能になります。何しろあるクラスの型で宣言された変数にオブジェクトを格納しておいても、次の瞬間にそのオブジェクトはまったく別のクラスのオブジェクトに変化しているかもしれないのですから。
したがって、強い型付け言語では、宿命的に動的分類はサポートできないと言って良いでしょう。(事実、弱い型付け言語であるSmalltalkの一部の実装系では動的分類がサポートされています。)

またひとつのオブジェクトが複数のクラスに帰属する多重分類の実装も容易ではありません。多重継承を実装する上での名前の衝突問題はしばしば議論されますが、多重分類を実装しようとすれば、これと同じか、さらに難しい問題にぶつかることになるはずです。

ここでオブジェクトと分類についてもう一度考えてみましょう。
実世界に存在するオブジェクトは、どのような分類をされるかに関わらず存在しています。 オブジェクトを分類する基準や分類方法も、常に明確に決まっているわけではありません。むしろ分類基準などというものは、分類する側の都合で好き勝手に作られるものです。
(知らないうちにいつの間にか自分が「おじさん」や「おばさん」に分類されていたり、会社が突然「リストラ対象」という分類を作って自分を分類してしまったり、ということがありますよね?)

しかしオブジェクト指向言語では、オブジェクトより前に「クラス」が存在します。
この「クラス」は、たんにオブジェクトを分類する (classify) だけでなく、オブジェクトの性質を決定し、その生涯にわたって拘束し続けるのです。
このようにオブジェクト指向アプローチでは、「クラス」が非常に強い影響力を持っているため、このクラスの影響力を強く意識してモデリングをしなければなりません。


© 1999 OGIS-RI Co., Ltd.

Prev.

Index

Next