オブジェクトモデリングの三大要素

連載第1回の記事で悩んでいることが1つある。

最初なので、概念モデリングの目的と効果、UMLの使い方などを書く必要があるが、その中で「オブジェクトモデリングの三大要素」というコラムを書きたいと思っている。

この三大要素とは「クラス」「関連」「継承」である。
オブジェクト指向プログラミングの三大要素は「カプセル化(クラス)」「継承」「ポリモーフィズム」だが、概念モデリングではクラスの振る舞いには着目せず、データの構造だけを考えるため、「ポリモーフィズム」の代わりに「関連」が入るというわけである。実際には「継承」も、全体集合と部分集合の表現方法として使うため、OOPにおける継承とは「似て非なるもの」になる。

こうした考え方や、「クラス」「関連」「継承」を三大要素と呼ぶこと自体、私の持論でしかないため、異論を持つ方もおられると思う。実際、オブジェクトモデリング派の多くの人達は、概念モデリングの段階でも振る舞いを考えることが多い。(マーチン・ファウラーもその1人のようである。)

で、何に悩んでいるかというと「属性」の扱いについてである。本文ではUMLの書き方を簡単に書いているが、そこでは「属性」「関連」「継承」の単位で説明しているため、整合性が取れない。実際には「属性」は「関連」の一種だが、このあたりを説明し始めると話がディープになるので、あまり深く突っ込みたくないところである。(余談だが、基本型がないSmalltalkでプログラミングをすると、属性と関連に区別がないことを実感できる。)自分としてはいい加減な説明はしたくないので、属性は関連の一種であることをディープにならないように説明したいと思っている。しかし実際のさじ加減が難しい。

ところで、渡辺幸三さん式DOAでは、モデリングの三大要素は「親子関係」「参照関係」「派生関係」となる。しかしオブジェクトモデリング流からすると、「集約」は「関連」の特殊形でしかないため、「親子関係」も「参照関係」の一種になってしまう。(ちなみに「派生関係」は「継承」にほぼ近い概念である。)

このあたりの世界観の違いは、やはりDOAでは識別子を明示することが1つの要因になっている。この興味深いテーマ(=識別子の有無によるモデリングの世界観の違い)については、このblogで近々書きたいと思っている。できれば書籍や雑誌記事の形できちんと書きたいところだが、「モデリングのバイエル」で取り上げるには理屈っぽすぎるだろうから..