📗

オブジェクト指向のこころ 第14章の振り返り

2024/04/04に公開

はじめに

みなさんこんにちは、やすのりです。

『オブジェクト指向のこころ』の14章を読み終わりましたので、
自身の理解度や考えをまとめるためにまとめ問題の回答を残しておこうと思います。
※『それは違うよ!』ということがあれば遠慮なくご指摘いただければ幸いです🙇

第14章 デザインパターンの原則と戦略

基礎問題

Q1. 設計の実装方法を選択する場合、どういったことを考えるべきか?

  1. 『この実装は、どういった状況において他の実装よりも優れているんだろうか?』
  2. 『自身の抱えている問題領域に最も近い状況はどれだろうか?』

実際に『常に他の実装よりも優れている実装』というものは無いが、そう思ってしまいがちである。
なのでまずは、1番を基に実装毎の優れた状況を考える。
その後、1番を基に考えた『実装毎の優れた状況』と2番の考えを基に、最適な実装を選択できる。


Q2. デザインパターンには5つの落とし穴があるが、それは何?

  • 表層的理解
    • 実装箇所の詳細な要件や問題点を把握する前に、表面的な理解だけでパターンを選択してしまう。
  • 思い込み
    • 発生する問題は『すべてパターンで解決できる』と信じてしまう。
    • 上記の考え方を改めない。
  • 選択ミス
    • どのパターンがどういう状況に適しているのか理解できていないために、ミスマッチなパターンを選択してしまう。
  • 誤診
    • パターンをすべて把握しておらず、本来適しているパターンとは違う複雑なパターンを適用させてしまう。
  • 当てはめ
    • 実際のビジネスロジックなどで発生し得る例外や特殊ケースの考慮をせず、パターンの理想通りに実装するがあまり、柔軟性の低い設計が出来上がる。

応用問題

Q1. 開放/閉鎖原則では、『モジュール、メソッド、クラスは、拡張性という観点から見た場合、見通しの聞くようになっているべきであり、変更という観点から見た場合、閉鎖的になっているべきである』述べられているが、どういう意味か?

新規機能や既存機能の拡張をする際は、既存のクラスやモジュールなどに手を加えることなく、新規クラスやモジュール追加で対応できるようにソフトウェア設計をするべきという意味。


Q2. Bridgeパターンにおける開放/閉鎖原則は何か?

『抽象的側面』と『実装』を別々の抽象クラスに切り分けることで、それぞれ別の要件が発生した時に既存クラスは変更せずに新規クラスを追加することで拡張性を持たせることができている。

本書で触れられているCAD/CAMシステムを例に挙げると、描画させたい図形が新規追加されたり(抽象的側面)、システムのバージョンが上がり図形の描画方法が変更された(実装)場合を想定する。
この場合でも既存の図形・実装用のクラスを変更することなく、新規図形・描画実装用クラスを追加するだけで対応できるようになる。

GitHubで編集を提案

Discussion