ObjectSquare [1999 年 6 月号]

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


3.3 分類によるモデリング

問題領域やユーザーの業務知識の理解を目的とする概念モデリングの段階においては、クラスはソフトウェアを実装する単位としてではなく、たんにオブジェクトを「分類」したものと考えることが有効です。
ソフトウェアの単位としてクラスを定義する際には、かなり微妙な設計判断が必要になる場合があります。オブジェクトの性質の違いを、属性の値の違いで表現するか、サブクラスを分けることで表現するか、などは典型的なケースでしょう。また継承構造を深くすればするほど、個々のクラスの役割もそれに応じて小さくなりますが、階層が深くなればかえって全体構造が理解しづらくなってしまいます。

しかし最初からこのような実装に関する決定をする必要はありません。むしろ概念モデリングの段階では、これらについての検討は後に回して、意味的な理解に集中するべきでしょう。実装時のクラス構造がどうなるかは別にして、分類することに意味がありそうだと感じたら、どんどん分類してクラスやサブクラスを導出してしまうのです。
このようなアプローチを「分類によるモデリング」と呼ぶことにしましょう。

このアプローチのメリットは、「分類する」ことによって物事をより簡単に考えられることです。適切に分類を行えば、その範囲だけで物事を考えることができます。しかし分類をしないと常に全体について考えなければなりません。オブジェクト指向アプローチは、本質的に「複雑な問題を1つ1つの簡単な問題に解きほぐすことである」と言えますが、この「分類」はまさに、複雑な問題を簡単な問題に解きほぐす重要な手段の1つと言えるでしょう。

この「分類によるモデリング」を進めていくと、知らず知らずのうちに多重分類や動的分類を使ってしまうことがあります。そして、その方が問題領域を適切に表現しているならばそのままにしておくべきでしょう。

このアプローチに従うと、しばしばより表現力の豊かなモデルを作ることができます。次のクラス図を見てください。

Image.5

図5:多重分類と動的分類を使ったモデル

このモデルでは、多重分類と動的分類を使っています。
会社組織において、従業員は一般社員から管理職、役員へと昇進していきますが、これらを別クラスとしたことで、結果的に動的分類を使いました。
また従業員の分類方法には一般社員、管理職といった職階によるものの他に、営業職、技術職、スタッフといった職種による分類もあります。実際にはある人は一般社員で営業職だったり、管理職でスタッフだったりするわけですが、ここではこのような組み合わせを、多重分類を使うことで暗黙的に表現しました。

これをもし多重分類と動的分類を使わずに、「従業員」だけをクラスとしてとらえた実装可能なモデルにすると、次のような非常に表現力の乏しいモデルになってしまいます。

Image.6

図6:分類を使わないモデル

あるいは別の方法として、最初の方で示したような、人と身分を分離するモデルも考えられます。
その場合、従業員だけをクラスととらえた上記のモデルに比べると、より構造を明確に表現することができますが、オブジェクト指向プログラミング言語で実装可能なモデルにするために人と身分を分離するのは不自然で恣意的と言えるでしょう。


© 1999 OGIS-RI Co., Ltd.

Prev.

Index

Next