オブジェクト指向のこころー演習問題(第2部)


以下の問題及び回答は書籍を参考に記載しています。また一部引用があります。

第3章:柔軟なコードを必要とする問題

基礎

Q1. このシステムで考える必要のある、シートメタルの5つのフィーチャーとは何でしょうか?
A1.
スロット:一定幅でシートメタルを直線に打ち抜き、端部を直角または面取り加工したもの。スロットは任意の角度で撃ち抜くことが出来る。
ホール:シートメタルを円形に打ち抜いたもの。通常の場合、さまざまな大きさのドリルビットを使って加工する。
カットアウト:シートメタルを4隅が直角または面取りかこうされた4角形に撃ち抜いたもの。この形状は、ハイパワーパンチをシートメタルに打ち付けて加工する。
スペシャル:スロット、ホール、カットアウト以外の規制の形状である。こういった形状を迅速に打ち抜くため、専用のパンチが用意されることになる。
イレギュラー:上記以外。これに該当する形状はツールを組み合わせて撃ち抜く。

Q2. V1システムとV2システムの違いは何でしょうか?
A2.
V1システム:サブルーチンライブラリの集合体になっている
V2システム:オブジェクト志向になっており、ジオメトリーがオブジェクトとして格納されている。

応用

Q1. CAD/CAMの事例が抱える本質的な問題とは何でしょうか?
A1. 一貫した方法でシステムから情報を抽出したいが、各
システムが同じ情報を保持しているにも関わらず、実装が全くことなっていること。

Q2. ポリモーフィズムは、ジオメトリーの抽出レベルで必要となりますが、フィーチャーレベルでは必要となりません。その理由は何でしょうか?
A2. ジオメトリーレベルでは、共通したメソッド名を持つことによって、一貫した情報抽出を実現出来る、フィーチャーレベルでは、それぞれのフィーチャー毎共通する処理概念(処理メソッド)に異なるため。

第4章:標準的なオブジェクト指向による解決策

応用

Q1. 本章で解説したCAD/CAMの問題を解決するためのアプローチを解説してください。このアプローチは妥当なものでしょうか?
A1. スロットクラスを用意することで、各特殊化に対応した。このアプローチは、冗長性が高く、凝集度が低く、クラス数が爆発する(フィーチャー数xバージョン数のクラス)という結果を招き、保守費用が高くなってしまっている。

基礎

Q1. 図4.3のクラス図から、以下のものを答えてください。
・抽象クラス
・カーディナリティ
・派生クラス
・コンポジション
・公開(public)メソッド
A1.
・抽象クラス:Feature
・カーディナリティ:ModelインスタンスはFeatureインスタンスを0以上保持する。Featureインスタンスは、1つのModelインスタンスに保持される。
・派生クラス:SlotFeature, HoleFeature, CutoutFeature, IrregularFeature, SpecialFeature
・コンポジション:なし
・公開(public)メソッド:
 ・Feature:featureType(), getXLoc(),getYLoc()
 ・SlogFeature:getLength()
 ・HoleFeature:getDiameter()
 ・CutoutFeatuer:getOperations()
 ・IrregularFeature:getNumSegments(),getSegments()

Q2. CAD/CAMアプリケーションが必要とする本質的な機能とは何でしょうか?
A2. 複数のCAD/CAMバージョンを透過的に取り扱う

Q3. 最初の解決策には4つの問題がありました。それらは何だったでしょうか?
A3.
・メソッドの冗長さ-V1システムとやり取りを行うメソッドには、類似点があるにも関わらず、
・汚い
・高い結合度:各フィーチャーが間接的に関連しあっている。新たなCAD/CAMシステムの追加・既存のCAD/CAMシステムへの変更が発生すると、すべてのフィーチャーに影響がおよぶことになる。
・低い凝集度:書くとなる機能を実行するメソッドクラス間に散逸することになる。