ObjectSquare [1999 年 6 月号]

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


3.分類によるモデリング

3.1 多重分類と動的分類

実は現在主流となっているオブジェクト指向プログラミング言語にはある制約があります。それは「オブジェクトが帰属するクラスは唯一で、かつ帰属するクラスを変更することができない」というものです。あまり一般的な用語ではありませんが、前者を単一分類 (single classification) 、後者を静的分類 (static classification) と呼びます。

つまり会社員、学生をクラスとして定義した場合には、ある人が会社員になったり、学生になったりすることをオブジェクト指向プログラミング言語では直接表現できないのです。また人は会社員、大人、釣り愛好家などといった複数の分類に属することができますが、オブジェクト指向プログラミング言語ではオブジェクトを複数のクラスに帰属させることができません。会社員、大人、釣り愛好家から多重継承したクラスを用意すれば、これらすべての性質を備えたオブジェクトを作ることはできますが、それでさえも多重継承された単一の「会社員&大人&釣り愛好家」クラスに帰属させなければならないのです。

これに対してMartin-Odell法のJim Odellはオブジェクトとクラスの関係を、プログラミング言語による実装制約をいったん忘れて、概念的にとらえようという提案をしました。これが、多重分類 (multiple classification) と動的分類 (dynamic classification) です。
(Odellは、クラスという用語を、単一分類と静的分類の制約を受けるプログラミング言語を使って実装する際の概念とし、実世界のオブジェクトを分類する概念はこのような制約を受けないため、オブジェクト・タイプと呼んで区別をしました。しかしUMLでは、オブジェクト・タイプとクラスという用語を分けていませんので、以降でもそのままクラスという表現を使用します。)

多重分類とは、オブジェクトが複数のクラスに帰属できるという概念です。複数のクラスの性質を兼ね備えたオブジェクトを作るためには多重継承を使えばよいのですが、そうするとクラスの組み合わせの数が爆発してしまいます。このようなことを避けるために多重分類では単純にオブジェクトが(必ずしも継承関係を持たない)複数のクラスに帰属できるものとします。

動的分類は、オブジェクトが帰属するクラスを実行時に変更できるという概念です。

ここでの基本的な考え方は、「オブジェクトはそれ自身で自由に振る舞うことができるものであり、そのオブジェクトをたまたま何らかの基準で分類したものがクラスである」というものです。


© 1999 OGIS-RI Co., Ltd.

Prev.

Index

Next