汎化


サブクラス化

オブジェクト指向において、最も重要な概念のひとつが継承です
機能を抽象化した型から、より具体化した型に開発を進める手法であり
大規模なシステムの要素を分割した柔軟な設計を行えることが特徴です

このとき、親となるクラスを基本クラスとかスーパークラスと呼び
親を継承した子クラスを派生クラスとかサブクラスと呼びます
これらの用語の使い方の違いは、使用するプログラミング言語によって異なります
派生クラスとかメンバ関数という言葉を好んで使う人がいれば
おそらく、その人は C++ プログラマであることが分かります

UML では、Java 言語のスーパークラスとサブクラスという呼び方を優先します
しかし、本来は分類子に対する親や子という表現が使われるべきでしょう
また、継承のことを UML では 汎化と呼んでいます

汎化は、関連の一種で子から親への実線矢印経路で示します
親の関連端には空白の三角矢印を記述しなければなりません



この図は、クラスの汎化階層を表しています
GUI におけるコンポーネントの基本設計図といえるでしょう
汎化は関連の一種なので横書きでもかまいませんが、人間が直観的に理解できるように
上の図のように、上から下へ汎化していくスタイルを私は推奨しています

また、多重継承を行うことも問題ありません
つまり、複数のスーパークラスを持つサブクラスを記述することです
しかし、現代オブジェクト指向は単一継承が一般的であると考えられます

多重継承を行えば、型やインスタンスの関係が無駄に複雑になる傾向があり
開発者にとっても、ミスの可能性を増やしてしまうことになります
そのため、クラスは完全な木構造であるべきだと考えられます

たとえ多重継承をサポートする言語を使うとしても、単一継承で設計するべきであり
そうすることで、他言語への移植に対しても再設計を避けることができます
複数の型を持つクラスを作成するためには、一切の実体を持たない抽象クラス
すなわち、インターフェイスを作成してこれを実現する方法が適切です



前のページへ戻る次のページへ