基本情報技術者 2011年 春期 午前(科目A) 問48
問題文
オブジェクト指向の特徴はどれか。
選択肢
ア:オブジェクト指向では、抽象化の対象となるオブジェクトに対する操作をあらかじめ指定しなければならない。
イ:カプセル化によって、オブジェクト間の相互依存性を高めることができる。
ウ:クラスの変更を行う場合には、そのクラスの上位にあるすべてのクラスの変更が必要となる。
エ:継承という概念によって、モデルの拡張や変更の際に変更箇所を局所化できる。(正解)
🔒 解説は解答すると表示されます
オブジェクト指向の基本特性【午前解説】
正解の理由
正解: エ。継承という概念は、共通の特性や振る舞いをスーパークラス(基底クラス)にまとめ、サブクラスで追加・変更することで変更箇所を局所化できます。これによりモデルの拡張や変更時に、影響範囲を限定して保守作業を簡潔にできます。したがってエが正しい記述です。
解法ステップ
- 各選択肢のキーワード(抽象化、カプセル化、継承)を確認する。各用語の定義を頭に入れる。
- 用語定義に照らして正誤を判定する:定義と反する表現があればその選択肢は不正解。
- 最終的に一つを選ぶ際は、設計原則(依存の増減、変更の局所化)で判断する。
例:イは「依存性を高める」とある時点でカプセル化の定義に反するため除外。
選択肢別の誤答解説
- ア: 誤り。抽象化は対象の本質を抽出することであり、「操作をあらかじめ指定しなければならない」という制約はない。インタフェースや抽象クラスで操作を定義することはあるが、抽象化自体は必須の操作固定を意味しない。
- イ: 誤り。カプセル化は情報隠蔽により内部実装変更の影響を抑え、オブジェクト間の相互依存性(結合度)を低くするのが目的であり、高めることはない。
- ウ: 誤り。クラスの変更が上位にあるすべてのクラスの変更を必要とするという記述は逆であり、継承を使えば共通機能は上位クラスに集約できるため、必ずしも上位クラス全てを変更する必要はない。
- エ: 正しい。継承により共通振る舞いを上位にまとめることで、モデルの拡張・変更時に変更箇所を局所化できる(正答)。
よくある誤解
- 抽象化は操作をあらかじめ全て指定することだ:抽象化は本質的な属性や振る舞いに注目することで、操作の定義方法は設計次第です。
- カプセル化はオブジェクト間の相互依存性を高める:逆で、カプセル化(情報隠蔽)は依存を減らしインタフェースを通じて通信させることで結合度を低くします。
- 継承すると必ず上位クラスも変更が必要:継承は再利用を促進し、共通部分は上位に置くため通常は上位クラスの頻繁な変更を避けられます(ただし設計を誤ると高結合になる)。
補足コラム
継承は強力ですが濫用すると高結合や脆弱な階層を生みます。近年の設計原則では「合成(composition)を優先する(prefer composition over inheritance)」が推奨され、継承は「is-a(〜である)」関係が明確な場合に使うのが望ましいです。簡単なPython例:
class Logger:
def log(self, msg):
print(msg)
# 継承で機能拡張
class FileLogger(Logger):
def log(self, msg):
# ファイルへ書き込む処理に変更・追加
with open('log.txt', 'a') as f:
f.write(msg + '\n')
# 合成で機能追加(推奨されることもある)
class Service:
def __init__(self, logger):
self.logger = logger
def do(self):
self.logger.log('start')
この例で、FileLogger を作ることで Logger の利用箇所を変えずにファイル出力に局所化できます。
FAQ
Q1: カプセル化と抽象化の違いは?
A1: 抽象化は本質的な属性・振る舞いの抽出、カプセル化は内部状態や実装を隠してインタフェースで扱うことです。目的が異なりますが連動して使われます。
A1: 抽象化は本質的な属性・振る舞いの抽出、カプセル化は内部状態や実装を隠してインタフェースで扱うことです。目的が異なりますが連動して使われます。
Q2: 継承すると常に保守性が上がるのですか?
A2: 使い方次第です。適切な継承は保守性向上に寄与しますが、誤った階層設計は高結合を招くため注意が必要です。
A2: 使い方次第です。適切な継承は保守性向上に寄与しますが、誤った階層設計は高結合を招くため注意が必要です。
Q3: 試験で見分けるコツは?
A3: 「~を高める」「~が必要となる」など明らかに用語定義と逆の表現がある選択肢をまず排除することです。
A3: 「~を高める」「~が必要となる」など明らかに用語定義と逆の表現がある選択肢をまず排除することです。
関連キーワード: オブジェクト指向、継承、カプセル化、抽象化、ポリモーフィズム、合成、設計原則、Liskovの置換原則、依存性低減、保守性

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

