オブジェクト指向のこころ 第4章の練習問題の解答をまとめてみる。
基礎
図4.3のクラス図から、以下のものを答えてください。
- 抽象クラス
- カーディナリティ
- 派生クラス
- コンポジション
公開(public)メソッド
抽象クラス
- Feature
- カーディナリティ
- ModelはFeatureを0...*に持てる。
- 派生クラス
- SlotFeature, HoleFeature, CutoutFeature, IrregularFeature, SpecialFeature
これらはすべてFeatureの一種
- SlotFeature, HoleFeature, CutoutFeature, IrregularFeature, SpecialFeature
- コンポジション
- ModelはFeatureのコンポジションからなる
- 公開(public)メソッド
- getOperation()はCutoutFeatureの公開メソッド
(p.55)
CAD/CAMアプリケーションが必要とする本質的な機能とは何でしょうか
エキスパートシステムに変更を加えることなく、さまざまなCAD/CAMシステムをプラグインできる機能を必要としている。
(p.59)
最初の解決策には4つの問題がありました。それらは何だったでしょうか?
- メソッドの冗長さ
- 汚い
- 高い結合度:Feature同士が関連している
- 低い凝集度:多くのクラス間にメソッドが散らばっている
(p.60)
応用
本章で解説したCAD/CAMの問題を解決するためのアプローチを解説してください。このアプローチは妥当なものでしょうか?
それぞれのケースに対してフィーチャーを特殊化するというアプローチ。 V1に対するスロットクラスと、V2に対するスロットクラスを作り、 それぞれのV1型のケースは、V1ライブラリとやり取りし、V2型のケースはV2ライブラリとやり取りする。 最初のステップは妥当に思えて、問題に対するある種の洞察を与えるが、改善されなければならない。