【チュートリアル】 - 設計編

bn_hanka.gif (701 バイト)

2. モデル・図の作成
2.4 関係の設計
jun ではここで、汎化の関係(継承)についても考えておこう。汎化は、オブジェクト指向の特徴のひとつで、設計段階では特に意識しておかなければならないところなんだよ。
chen 汎化は、分析段階ではあまり考えなくてもよいということでしたね。
jun うん、そうだよ。分析段階でも、クラス間で継承の関係が明らかなものについては汎化を導入する場合があるが、それは実世界の関係から導き出されるものが多いんだ。設計段階では、再利用性を考慮して、実装用のクラスを組み入れたり、商用のクラスライブラリを組み込む目的で、継承階層を見直し、洗練するんだよ。
chen 設計段階では、コーディングレベルでモデルの構造を考えるということですね。
jun そうだよ。モデルに継承構造を組み込むことによって、全体のコード量が減り、クラス間の統一性が増すんだ。継承階層の上位クラスであるスーパークラスの操作や属性については、再定義する必要がなければ、サブクラスごとに定義する必要がなくなるからね。また、スーパークラスとサブクラスを使い分けることによって、開発者も作業がしやすくなるんだ。

ill_21.jpg (8518 バイト)

chen 分かりました。では、実際、継承階層はどのように作っていけばいいのですか?
jun 分析図をレビューして、属性、操作、関連に関して共通部分がないかどうかを調べるんだよ。そして、共通の要素を含む新たなクラスをスーパークラスとして定義し、クラス独自の要素を持つクラスをサブクラスとして定義するんだ。例えば、顧客に一般会員と法人会員がいる場合を考えてみよう。(図2.4.8)
 

図2.4.8 汎化の例

1、 「一般会員」クラスと「法人会員」クラスについてそれぞれ考える。一般会員は、誕生月に特別割引が実施され、法人会員は、継続年数によって割引率が計算されるとする。
relsample81.gif (2624 バイト)
2、 共通部分をまとめた「顧客」クラスをスーパークラス、「一般会員」クラスと「法人会員」クラスをサブクラスとした継承構造にする。
relsample82.gif (2655 バイト)

 

chen Jun先輩、ひとつのクラスに対して、スーパークラスは複数あってもかまわないのですか?
jun 2つ以上のスーパークラスから継承する場合を多重継承と言うんだよ。概念上は必要な場合もあるが、実装するときに多くの問題を持ち込んでしまう場合があるので注意しないといけないよ。それに、C++では多重継承をサポートしているが、オブジェクト指向プログラミング言語のすべてが多重継承を直接サポートしているわけじゃないから、言語レベルで解決する問題も多くなるんだ。
chen 分かりました。
jun それから、これは補足だが、C++の場合、継承階層のレベルは、通常、3から5レベルなんだよ。原則としては階層レベルの数の制限は特にないんだが、階層が深くなりすぎると逆に分かり難くなる可能性があるからね。
chen そうですね、分かりました。
 

bn_notehan.gif (1969 バイト)

 

jun では次に、パッケージへの分割に入ろう。

 

Prev. Next Home Top