オブジェクト指向言語Javaにおける継承と委譲に関する記述のうち、最も不適切なものはどれか。
@ 委譲とは継承関係にないクラスに共通部をくくりだし、そのクラスのオブジェクトを通して共通部を利用するプログラミング手法である。
A 共通部を含むプログラムに対しては、共通部を基底クラスにくくりだし、基底クラスを継承することによって冗長なプログラム記述を排除するべきである。
B 継承することによって上位型のすべてのプログラム記述が下位型に存在することになる。
C すべての上位型のプログラムが継承の対象となるため、クラス階層は注意して設計しなくてはならない。
D 汎化関係にないクラスを下位型として定義することで重複する共通部分の排除を行うことは弊害が大きいため、継承ではなく委譲を利用するべきである。
B
@ 委譲 (=デリゲーション) は、あるオブジェクトに依頼されたメッセージの処理を、他のオブジェクトに委ねることである。
A 適切である。ただし、「冗長なプログラム記述を排除するべきである」という表現が言いすぎの感があるが、最も不適切でもない。
B 不適切である。継承 (=インヘリタンス) は、あるクラスのフィールドやメソッドを別のクラスがそのまま同様に利用できることである。上位型のプログラム記述が下位型に存在しないこともある。
C 適切である。
D 汎化は、複数のクラスに共通する部分を一般化することである。また、汎化の逆の特化は、抽象クラスから下位のクラスに特殊化することである。
「重複する共通部分の排除を行うことは弊害が大きい」とは言い切れないが最も不適切でもない。
V−16 | 目次 | V−18 |