基本情報 平成22年度 秋期 問47:テクノロジ系に関する問題
オブジェクト指向におけるクラス間の関係のうち, 適切なものはどれか。
- aクラス間の関連は, 二つのクラス間でだけ定義できる。
- bサブプクラスではスーパクラスの操作を再定義むすることができる。正答
- cサブクラスのインスタンスが, スーパクラスで定義されている操作を実行すると きは, スーパクラスのインスタンスに操作を依頼する。
- d二つのクラスに集約の関係があるときには, 集約オプジェクトは部品オブジェク トの属性と操作を共有する。
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは b です。
オブジェクト指向では「親クラス(スーパクラス)」と「子クラス(サブクラス)」があります。親クラスの動作をそのまま受け継ぐだけでなく、子クラスでは動作を上書きして変えることができます。これを「オーバーライド(再定義)」と言います。
👉 覚え方:子は親の言うことを聞きつつ、自分流にアレンジできる。
ほかの選択肢:a クラスは2つ以上の関連も持てる/c は逆。子が親に頼むのではなく親の操作を呼ぶだけ/d 集約しても属性・操作は共有しない。
なぜこれが正解か
正解は b。サブクラス(派生クラス)は、スーパクラス(基底クラス)の操作(メソッド)を継承しつつ、必要に応じてオーバーライド(再定義)できる。これがポリモーフィズム(多態性)の基礎となり、同じメソッド呼び出しでもインスタンスの実型によって異なる振る舞いを実現する。
各選択肢の解説
- a:クラス間の関連は3つ以上のクラス間(n項関連)でも定義できる。UMLでは関連クラスや複合関連で表現。
- c:サブクラスのインスタンスが継承した操作を実行するときは、自分自身で実行する(スーパクラスのインスタンスに依頼しない)。
- d:集約(aggregation)は「has-a」関係で、属性・操作の共有ではなく所有関係を表す。
覚え方・ひっかけ注意
継承の本質はオーバーライドによる多態性。「is-a関係=継承」「has-a関係=集約・コンポジション」を区別する。継承(is-a)、集約(has-a・弱い所有)、コンポジション(has-a・強い所有・ライフサイクル一致)の階層を整理。
理論的背景
オブジェクト指向の3大特徴はカプセル化・継承・ポリモーフィズム。オーバーライドはポリモーフィズムの実装手段で、動的ディスパッチ(仮想関数呼び出し)により実行時にメソッドが解決される。SOLID原則のリスコフ置換原則(LSP)は「サブクラスはスーパクラスと置換可能でなければならない」とし、継承の正しい使い方を規定する。
実務での使われ方
Java・C++・C#・Pythonなど主要言語で継承+オーバーライドが標準機能。一方で「継承よりコンポジション(Favor Composition over Inheritance)」というGoFデザインパターンの原則も広く支持され、過度な継承階層は保守性低下を招くため、Strategy・Decoratorパターン等で委譲(delegation)を使う設計が現代的。Goやインターフェース継承中心の言語では、構造的部分型やTraitなど別アプローチが採用される。
試験での位置づけ
基本情報・応用情報のオブジェクト指向分野で必出。継承・オーバーライド(再定義)・オーバーロード(多重定義)の違い、抽象クラスとインターフェース、汎化(generalization)と集約(aggregation)の関係を整理。UMLクラス図の表記(白抜き三角=汎化、白抜きひし形=集約、黒塗りひし形=コンポジション)も頻出。
選択肢の発展補足
集約とコンポジションの差はオブジェクトのライフサイクル:集約は別々に存在可(大学⇔学生)、コンポジションは親が消えたら子も消える(家⇔部屋)。クラス間関連は二項関係(最も一般的)に加え、UMLでは関連クラス(association class)でn項関係や関連自体に属性を持たせることも可能。GoFデザインパターンの23パターンは継承とコンポジションの巧妙な組合せで再利用可能な設計を実現する。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成22年度 秋期 問47/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。