ホーム > システムアーキテクト試験 > 2015年
システムアーキテクト試験 2015年 午前2 問04
オブジェクト指向設計における設計原則のうち、開放・閉鎖原則はどれか。
ア:クラスにもたせる役割は一つだけにするべきであり、複数の役割が存在する場合にはクラスを分割する。
エ:モジュールの機能には、追加や変更が可能であり、その影響が他のモジュールに及ばないようにする。(正解)
イ:クラスを利用するクライアントごとに異なるメソッドが必要な場合は、インタフェースを分ける。
ウ:上位のモジュールは、下位のモジュールに依存してはならない。
解説
オブジェクト指向設計における設計原則のうち、開放・閉鎖原則はどれか【午前2 解説】
要点まとめ
- 結論:開放・閉鎖原則は「モジュールは拡張に対して開かれ、修正に対して閉じているべき」という設計指針です。
- 根拠:この原則により、既存のコードを変更せずに機能追加が可能となり、システムの保守性と拡張性が向上します。
- 差がつくポイント:単に依存関係や役割分割を説明するのではなく、「変更の影響を最小化しつつ拡張を可能にする設計」であることを理解することが重要です。
正解の理由
選択肢エは「モジュールの機能には、追加や変更が可能であり、その影響が他のモジュールに及ばないようにする」と述べています。これはまさに開放・閉鎖原則(Open/Closed Principle, OCP)の定義そのもので、モジュールは拡張に対して開かれている(Open)一方で、修正に対して閉じている(Closed)ことを意味します。つまり、新しい機能追加は既存コードの修正を伴わずに行い、他のモジュールに影響を与えない設計を指します。
よくある誤解
開放・閉鎖原則は「変更しないこと」ではなく、「変更の影響を最小限に抑えつつ拡張可能にすること」です。単に依存関係を断つことや役割分割とは異なります。
解法ステップ
- 問題文の「開放・閉鎖原則」の意味を思い出す。
- 各選択肢の内容を原則の定義と照らし合わせる。
- 「拡張に対して開かれ、修正に対して閉じている」設計を示す選択肢を探す。
- 選択肢エがこの定義に合致するため正解と判断する。
選択肢別の誤答解説
- ア: 「クラスの役割は一つだけにする」というのは単一責任原則(SRP)であり、開放・閉鎖原則とは異なります。
- イ: 「クライアントごとに異なるインタフェースを分ける」はインタフェース分離原則(ISP)に該当します。
- ウ: 「上位モジュールは下位モジュールに依存してはならない」は依存関係逆転の原則(DIP)に関する内容です。
- エ: 「モジュールの機能には、追加や変更が可能であり、その影響が他のモジュールに及ばないようにする」は開放・閉鎖原則の正しい説明です。
補足コラム
開放・閉鎖原則はSOLID原則の一つであり、ソフトウェアの拡張性と保守性を高めるための基本的な設計指針です。具体的には抽象クラスやインタフェースを利用して拡張ポイントを設け、既存コードの修正を避ける設計が推奨されます。
FAQ
Q: 開放・閉鎖原則は具体的にどのように実装に活かせますか?
A: 例えば、新機能を追加する際に既存クラスを変更せず、新しいサブクラスや実装クラスを追加することで対応します。
A: 例えば、新機能を追加する際に既存クラスを変更せず、新しいサブクラスや実装クラスを追加することで対応します。
Q: 開放・閉鎖原則と単一責任原則はどう違いますか?
A: 単一責任原則は「クラスは一つの役割だけを持つべき」という設計指針で、開放・閉鎖原則は「拡張に対して開かれ、修正に対して閉じているべき」という拡張性に関する指針です。
A: 単一責任原則は「クラスは一つの役割だけを持つべき」という設計指針で、開放・閉鎖原則は「拡張に対して開かれ、修正に対して閉じているべき」という拡張性に関する指針です。
関連キーワード: 開放・閉鎖原則, OCP, SOLID原則, オブジェクト指向設計, 保守性, 拡張性