同じ操作でクラスごとに動作が変わる性質の名前を確かめる
基本情報技術者試験 令和7年度 問12 / システム開発技術 › ソフトウェア方式設計・詳細設計
過去問にチャレンジ
オブジェクト指向プログラミングの特徴のうち,異なるクラスのオブジェクトを同一のインタフェースで操作したときに,操作対象クラスに応じた異なる動作を可能にすることを何と呼ぶか。
- ア
委譲
- イ
継承
- ウ
コンポジション
- エ
多相性
会話形式の解説
講師今回はオブジェクト指向の用語問題です。問題文の「同一のインタフェースで操作」と「操作対象クラスに応じた異なる動作」という二つの言葉に注目してください。この両方を満たす用語を選びます。
受験者最初は継承かなと思いました。親のクラスから受け継いだ操作を、子のクラスで変えられると習ったので、動作が変わる話に近い気がします。
講師よいところに気づいています。継承は、派生クラスが基底クラスの属性や操作を受け継ぐ仕組みです。受け継いだうえで、機能を追加したり変更したりできます。ただ、継承は多相性を実現する手段にはなりますが、問題が聞いている性質の名前ではありません。
受験者仕組みの名前と性質の名前は別、ということですか。
講師そうです。この問題は「同じ呼出しで対象ごとに動作が変わる」という性質そのものの名前を聞いています。その性質を表すのが多相性です。同じ呼出しをしても、対象の型、つまりクラスに応じた処理が働きます。
受験者多相性があると、呼び出す側はクラスの違いを気にしなくてよくなるのでしょうか。
講師はい。呼び出す側は実装の違いを意識せずに、異なるクラスのオブジェクトを同じように扱えます。ここが問題文の説明とぴったり一致します。
受験者委譲とコンポジションはあまり区別がついていません。どちらもオブジェクトどうしが関わる話ですよね。
講師委譲は、あるオブジェクトが受け取った処理の実行を、別のオブジェクトに任せる仕組みです。コンポジションは、他のオブジェクトを自分の構成要素として持つ仕組みで、「持っている」というhas-a関係を表します。どちらも処理の受け渡し方や構成の仕方を表す用語で、動作が対象ごとに変わる性質の名前ではありません。
受験者整理すると、委譲・継承・コンポジションはクラスやオブジェクトの関係や仕組みの名前で、同じ操作で動作が変わる性質を指すのは多相性だけ、ということですね。
講師その理解で大丈夫です。補足すると、多相性は多態性やポリモーフィズムとも呼ばれます。代表的な実現方法は、基底クラスの操作を派生クラスで再定義するオーバーライドと、実行時に呼び出す処理を決める動的結合の組合せです。
受験者継承やオーバーライドは多相性を作るための道具で、答えるべきなのは性質の名前のほう、と覚えておきます。
講師はい。用語問題では、仕組みの名前を聞かれているのか、性質の名前を聞かれているのかを区別して読むと、引っかけに迷わずに済みます。
まとめ
この問題は、異なるクラスのオブジェクトを同じインタフェースで操作したとき、クラスに応じて異なる動作をする性質の名前を問うもので、正解は多相性です。多相性は多態性やポリモーフィズムとも呼ばれ、呼び出す側は実装の違いを意識せずに複数のクラスを同じように扱えます。継承は派生クラスが基底クラスの属性や操作を受け継ぐ仕組みで、多相性を実現する手段にはなりますが、性質の名前ではありません。委譲は処理を別のオブジェクトに任せる仕組み、コンポジションは他のオブジェクトを構成要素として持つhas-a関係です。仕組みの名前と性質の名前を区別して読むことが大切です。
解答・解説
正解はエです
この問題のテーマ
オブジェクト指向の基本用語のうち、同じ操作を呼び出しても、対象のクラスによって動作が変わる性質を何と呼ぶかを問う問題です。
解き方の考え方
問題文のキーワードは「同一のインタフェースで操作」と「クラスに応じた異なる動作」の二つです。この二つを両方満たす用語を探します。委譲、継承、コンポジションは、どれもクラスやオブジェクトどうしの関係や仕組みを表す用語です。操作の結果が対象ごとに変わる性質そのものを表しているのは多相性だけなので、エが正解になります。
選択肢ごとの解説
- ×ア 委譲委譲は、あるオブジェクトが受け取った処理の実行を、別のオブジェクトに任せる仕組みです。処理の受け渡し方を表す用語なので、同じ操作で対象クラスごとに動作が変わる性質の名称ではありません。
- ×イ 継承継承は、派生クラスが基底クラスの属性や操作を受け継ぐ仕組みです。受け継いだうえで、派生クラスで機能を追加したり変更したりできます。多相性を実現する手段にはなりますが、問題が問う性質の名称ではありません。
- ×ウ コンポジションコンポジションは、他のオブジェクトを自分の構成要素として持つ仕組みで、has-a関係を表します。構成要素の組合せを表す用語であり、同じ操作に対して対象クラスごとに動作が変わる性質そのものを指すものではありません。
- ○エ 多相性多相性は、同じ呼出しをしても、対象の型(クラス)に応じた処理が働く性質です。呼び出す側は実装の違いを意識せずに、異なるクラスのオブジェクトを同じように扱えます。問題文の説明と一致します。
補足
多相性は、基底クラスの操作を派生クラスで再定義するオーバーライドと、実行時に呼び出す処理を決める動的結合を組み合わせて実現するのが代表的な方法です。継承は多相性を実現する手段の一つですが、問題が問う性質の名称は多相性です。仕組みの名前を聞かれているのか、性質の名前を聞かれているのかを区別して読むことが大切です。
POINT
- 多相性は、共通の操作でも対象クラスによって動作が変わる性質で、多態性やポリモーフィズムとも呼ばれます。
- 多相性があると、呼び出す側は実装の違いを意識せずに複数のクラスを同じように扱えます。
- 継承は、派生クラスが基底クラスの属性や操作を受け継ぎ、機能を追加・変更できる仕組みです。
- 委譲は処理を別のオブジェクトに任せる仕組みで、コンポジションはオブジェクトを構成要素として持つhas-a関係です。
