基本情報技術者 2010年 春期 午前(科目A) 問47
問題文
オブジェクト指向におけるクラス間の関係のうち、適切なものはどれか。
選択肢
ア:クラス間の関連は、二つのクラス間でだけ定義できる。
イ:サブクラスではスーパクラスの操作を再定義することができる。(正解)
ウ:サブクラスのインスタンスが、スーパクラスで定義されている操作を実行するときは、スーパクラスのインスタンスに操作を依頼する。
エ:二つのクラスに集約の関係があるときには、集約オブジェクトは部品オブジェクトの属性と操作を共有する。
🔒 解説は解答すると表示されます
クラス間の関係と継承の再定義【午前解説】
正解の理由
正解は イ です。オブジェクト指向の継承において、サブクラスはスーパクラスで定義された操作(メソッド)をそのまま使うことも、サブクラス固有の実装で上書き(オーバーライド)することもできます。これにより、同じメッセージ(操作)に対してサブクラス固有の振る舞いを実現し、ポリモーフィズム(多態性)を発揮できます。
解法ステップ
- 問題文で扱う用語(関連、サブクラス、スーパクラス、集約、委譲)を頭の中で定義する。
- 各選択肢のキーワード(「だけ」「できる」「するときは」「共有する」など)の強さをチェックする。断定表現は誤りの可能性が高い。
- 継承の定義(is-a、オーバーライド可)に当てはめて正しいものを選ぶ。
- 残りの選択肢を用語定義に照らして一つずつ排除する。
選択肢別の誤答解説
- ア: 「クラス間の関連は、二つのクラス間でだけ定義できる。」
誤り。UMLでは二項関連が一般的ですが、多項(n-ary)関連も存在し、複数クラスを結ぶ関連が定義可能です。したがって「だけ」は不適切です。 - イ: 「サブクラスではスーパクラスの操作を再定義することができる。」
正しい。オーバーライドによりサブクラスはスーパークラスのメソッド実装を上書き(再定義)できます。ポリモーフィズムの基礎です。 - ウ: 「サブクラスのインスタンスが、スーパクラスで定義されている操作を実行するときは、スーパクラスのインスタンスに操作を依頼する。」
誤り。継承ではサブクラスのインスタンス自身がスーパクラスの実装を持つ(あるいは上書きする)ため、別のスーパクラスインスタンスに依頼するわけではありません。委譲(delegation)と混同しやすい点です。 - エ: 「二つのクラスに集約の関係があるときには、集約オブジェクトは部品オブジェクトの属性と操作を共有する。」
誤り。集約は“部分-全体”の関係であり部品への参照を保持しますが、属性や操作を自動的に共有する概念ではありません。共有や複製、ライフサイクルの制約は設計次第です。
よくある誤解
- 「関連は必ず二つのクラス間だけで定義される」という誤解:UMLでは多項(n-ary)関連もあり、二者間に限定されません。
- 「サブクラスはスーパクラスのインスタンスに処理を委譲する」という誤解:継承は同一インスタンス内でスーパクラスの実装を参照・上書きする仕組みで、別インスタンスへの委譲とは異なります。
- 「集約では部品の属性や操作をそのまま共有する」という誤解:集約は部品参照を持つ“所有”の関係であり、属性や操作が自動的に共有されるわけではありません。
補足コラム
- オーバーライド(override)とオーバーロード(overload)は別概念です。前者は同名メソッドの再定義、後者は引数の異なる同名メソッドを複数定義することです。
- 継承は再利用と多態性を提供しますが、濫用すると設計が硬くなるため「コンポジション(委譲)」を優先する設計指針(“Prefer composition over inheritance”)がよく推奨されます。
- UMLでは関連(association)、集約(aggregation)、合成(composition)をアイコンで区別します。合成は集約より強いライフサイクル依存を意味します。
FAQ
Q1: オーバーライドは必ず可能ですか?
A1: 一般に可能ですが、言語やアクセス修飾子(final, sealed, private など)により禁止される場合があります。
A1: 一般に可能ですが、言語やアクセス修飾子(final, sealed, private など)により禁止される場合があります。
Q2: 継承と委譲のどちらを使うべきですか?
A2: 再利用の目的や関係の意味合いで判断します。"is-a" 関係なら継承、"has-a" または振る舞いの委譲ならコンポジション(委譲)を検討してください。
A2: 再利用の目的や関係の意味合いで判断します。"is-a" 関係なら継承、"has-a" または振る舞いの委譲ならコンポジション(委譲)を検討してください。
Q3: 集約と合成の違いは何ですか?
A3: 両者とも部分-全体の関係ですが、合成は部品のライフサイクルが全体に依存(強い所有)する点で集約より強い結合を意味します。
A3: 両者とも部分-全体の関係ですが、合成は部品のライフサイクルが全体に依存(強い所有)する点で集約より強い結合を意味します。
関連キーワード: オブジェクト指向、クラス、継承、オーバーライド、ポリモーフィズム、委譲、集約、合成、関連、UML

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

