SAシステムアーキテクト試験 午前Ⅱ

平成27年度秋期 システムアーキテクト 午前Ⅱ 問4

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

オブジェクト指向設計における設計原則のうち,開放・閉鎖原則はどれか。

選択肢

  1. ア
    クラスにもたせる役割は一つだけにするべきであり,複数の役割が存在する場合にはクラスを分割する。
  2. イ
    クラスを利用するクライアントごとに異なるメソッドが必要な場合は,インタフェースを分ける。
  3. ウ
    上位のモジュールは,下位のモジュールに依存してはならない。
  4. エ
    モジュールの機能には,追加や変更が可能であり,その影響が他のモジュールに及ばないようにする。
解き方のヒントを見る

設計原則の対象と狙いを見極める

設計原則は名前が似ていたり略語で覚えたりしがちですが、区別の鍵はそれぞれが何を対象にし、どのような変更や依存の問題を避けようとしているかです。用語の響きではなく、原則の狙いに立ち返って照らし合わせることを意識しましょう。

この問題で問われていること

確認すべき観点は一つ、それぞれの原則が「どの設計要素を対象に、どんな望ましくない状態を防ごうとしているか」を自分の言葉で言えるかです。対象と狙いの組合せを取り違えていないかに注意を向けてください。

視点

オブジェクト指向の設計原則は、ソフトウェアを変更しやすく、再利用しやすく、理解しやすくするための指針です。原則ごとに、注目する設計上の単位や関係と、避けたい問題が異なります。名前だけを暗記すると混同しやすくなります。「この原則を破ると何が困るか」を具体的な場面で想像し、対象と狙いを対にして整理しておくと区別しやすくなります。

確認ポイント

  • その原則が主に注目している設計上の単位や関係は何かを、自分の言葉で言えるか
  • その原則に反した設計では、どんな不都合が起きるかを具体的な場面で想像できるか
  • 名前や略語の印象ではなく、対象と狙いの組合せで判断しているか
正解と解説を見る

正解

エ

解説

開放・閉鎖原則は、ソフトウェアのモジュールを拡張には開き、既存部分の変更には閉じた状態に保つという設計原則です。機能追加や変更の影響が他のモジュールへ広がらないことが重要です。

理由

開放・閉鎖原則では、モジュールの機能を追加・変更できる拡張性と、変更による他モジュールへの影響を抑える性質を両立させます。既存コードへの変更を最小限にすることが中心です。

比較

アは単一責任原則、イはインタフェース分離原則、ウは依存性逆転原則に対応します。したがって、開放・閉鎖原則を説明しているのはエです。

選択肢ア

これは不正解だよ。この記述は、一つのクラスに複数の責務を持たせず、責務ごとに分割する考え方を示している。これは単一責任原則の説明であり、機能追加時の拡張性と既存モジュールへの影響抑制を直接述べたものではない。

選択肢イ

これは不正解だよ。クライアントごとに必要なメソッドだけを持つインタフェースへ分けるという内容は、利用者に不要な依存を強制しない設計を表している。これはインタフェース分離原則に該当し、開放・閉鎖原則そのものの説明ではない。

選択肢ウ

これは不正解だよ。上位モジュールが下位モジュールの実装へ直接依存しないようにするという内容は、抽象に依存させる設計を示している。これは依存性逆転原則に関する説明であり、拡張と変更の影響範囲を扱う原則とは異なる。

選択肢エ(正解)

これは正解だよ。モジュールに機能の追加や変更を行える余地を持たせながら、その変更の影響が他のモジュールへ及ばないようにするという内容は、開放・閉鎖原則に一致する。拡張には開き、変更には閉じる設計を表している。

学習のポイント

SOLID原則の名称と、各原則が解決しようとする設計上の問題を対応付けて覚えましょう。

出典:独立行政法人 情報処理推進機構(IPA)平成27年度秋期 システムアーキテクト試験 午前Ⅱ 問4(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針