2. モデル・図の作成 |
2.4 関係の設計 |
![]() |
ではここで、汎化の関係(継承)についても考えておこう。汎化は、オブジェクト指向の特徴のひとつで、設計段階では特に意識しておかなければならないところなんだよ。 |
|||||||||
![]() |
汎化は、分析段階ではあまり考えなくてもよいということでしたね。 |
|||||||||
![]() |
うん、そうだよ。分析段階でも、クラス間で継承の関係が明らかなものについては汎化を導入する場合があるが、それは実世界の関係から導き出されるものが多いんだ。設計段階では、再利用性を考慮して、実装用のクラスを組み入れたり、商用のクラスライブラリを組み込む目的で、継承階層を見直し、洗練するんだよ。 | |||||||||
![]() |
設計段階では、コーディングレベルでモデルの構造を考えるということですね。 | |||||||||
![]() |
そうだよ。モデルに継承構造を組み込むことによって、全体のコード量が減り、クラス間の統一性が増すんだ。継承階層の上位クラスであるスーパークラスの操作や属性については、再定義する必要がなければ、サブクラスごとに定義する必要がなくなるからね。また、スーパークラスとサブクラスを使い分けることによって、開発者も作業がしやすくなるんだ。 | |||||||||
![]() |
分かりました。では、実際、継承階層はどのように作っていけばいいのですか? |
|||||||||
![]() |
分析図をレビューして、属性、操作、関連に関して共通部分がないかどうかを調べるんだよ。そして、共通の要素を含む新たなクラスをスーパークラスとして定義し、クラス独自の要素を持つクラスをサブクラスとして定義するんだ。例えば、顧客に一般会員と法人会員がいる場合を考えてみよう。(図2.4.8) | |||||||||
図2.4.8 汎化の例
|
||||||||||
![]() |
Jun先輩、ひとつのクラスに対して、スーパークラスは複数あってもかまわないのですか? | |||||||||
![]() |
2つ以上のスーパークラスから継承する場合を多重継承と言うんだよ。概念上は必要な場合もあるが、実装するときに多くの問題を持ち込んでしまう場合があるので注意しないといけないよ。それに、C++では多重継承をサポートしているが、オブジェクト指向プログラミング言語のすべてが多重継承を直接サポートしているわけじゃないから、言語レベルで解決する問題も多くなるんだ。 | |||||||||
![]() |
分かりました。 | |||||||||
![]() |
それから、これは補足だが、C++の場合、継承階層のレベルは、通常、3から5レベルなんだよ。原則としては階層レベルの数の制限は特にないんだが、階層が深くなりすぎると逆に分かり難くなる可能性があるからね。 | |||||||||
![]() |
そうですね、分かりました。 | |||||||||
|
||||||||||
![]() |
では次に、パッケージへの分割に入ろう。 |
|||||||||