基本情報技術者 2016年 春期 午前(科目A) 問47
問題文
モジュールの独立性を高めるには、モジュール結合度を低くする必要がある。モジュール間の情報の受渡し方法のうち、モジュール結合度が最も低いものはどれか。
選択肢
ア:共通域に定義したデータを関係するモジュールが参照する。
イ:制御パラメタを引数として渡し、モジュールの実行順序を制御する。
ウ:入出力に必要なデータ項目だけをモジュール間の引数として渡す。(正解)
エ:必要なデータを外部宣言して共有する。
🔒 解説は解答すると表示されます
モジュール結合度と引数渡し【午前解説】
正解の理由
正解は ウ です。選択肢ウは「入出力に必要なデータ項目だけをモジュール間の引数として渡す」方式で、これはデータ結合(data coupling)に相当します。データ結合はモジュールが必要とする値だけを明示的に受け渡すため、モジュール間の依存関係が最小化され、変更の波及や副作用が最も小さくなります。したがってモジュールの独立性(低結合、高凝集)を高めるのに最適です。
解法ステップ
- 問題文のキーワードを確認:「情報の受渡し方法」「最も結合度が低い」。
- 各選択肢がどの結合の種類に該当するかを対応付ける(例:共通域→共通結合、制御パラメタ→制御結合)。
- 結合度の強さ(高い→低い)の順序を思い出す(内容結合が最も強く、データ結合が最も弱い)。
- 最も弱い(=独立性を高める)のはデータ結合に該当する選択肢を選ぶ(ウ)。
選択肢別の誤答解説
- ア: 共通域に定義したデータを関係するモジュールが参照する。
- 共通結合(common coupling)に該当します。複数モジュールが同じデータ領域を参照・変更するため、変更や副作用が広範囲に及びやすく結合度は高いです。
- イ: 制御パラメタを引数として渡し、モジュールの実行順序を制御する。
- 制御結合(control coupling)に該当します。呼び出し側が被呼び出し側の制御情報を与えるため、モジュール間の役割分離が弱まり結合度が上がります。
- ウ: 入出力に必要なデータ項目だけをモジュール間の引数として渡す。
- データ結合(data coupling)で最も結合度が低く、これが正解です。
- エ: 必要なデータを外部宣言して共有する。
- 外部結合(external coupling)に相当し、ハードウェアやOS、外部システムに依存する共有を意味することがあり、結合度は高めです。
よくある誤解
- 「引数で何でも渡せば安全」:構造体や複数項目を丸ごと渡すとスタンプ結合になり、受け側が不要なフィールドに依存する恐れがあります。
- 「グローバルで共有すれば実装が簡単」:共通領域や外部宣言は暗黙の依存を生み、影響範囲が見えにくくなります。
- 「制御パラメタで柔軟にするのが良い」:制御パラメタは制御結合になり、呼び出し側が被呼び出し側の内部動作を知る必要が出てきます。
補足コラム
代表的な結合度(高い→低い)の順序は一般に次のように説明されます:内容結合 > 共通結合 > 外部結合 > 制御結合 > スタンプ結合(データ構造) > データ結合。設計上は「低結合・高凝集」を目指し、インタフェースを明確化して必要最小限のデータのみを渡すことが重要です。実務的には依存注入やインタフェース抽象化、イミュータブルなパラメタ設計が有効です。
簡単なコード例(必要項目だけ渡す例):
# 悪い例: 大きなオブジェクトを丸ごと渡す(スタンプ結合の危険)
def process_order(order):
# orderには多数のフィールドが含まれる
pass
# 良い例: 必要な項目だけを明示的に渡す(データ結合)
def process_order(item_id, quantity, price):
pass
FAQ
Q1. スタンプ結合とデータ結合の違いは?
A1. スタンプ結合はレコードや構造体など「まとまったデータ」を丸ごと渡すことで、受け側が不要なフィールドに依存する可能性がある。データ結合は必要な項目だけを渡し依存を最小化します。
A1. スタンプ結合はレコードや構造体など「まとまったデータ」を丸ごと渡すことで、受け側が不要なフィールドに依存する可能性がある。データ結合は必要な項目だけを渡し依存を最小化します。
Q2. 制御パラメタは完全に避けるべきですか?
A2. 状況によりますが、制御パラメタは呼び出し側が被呼び出し側の動作を知る必要が出るため慎重に使い、可能なら明示的なインタフェースや状態オブジェクトで設計する方が良いです。
A2. 状況によりますが、制御パラメタは呼び出し側が被呼び出し側の動作を知る必要が出るため慎重に使い、可能なら明示的なインタフェースや状態オブジェクトで設計する方が良いです。
Q3. 実務でまず取り組むべきは?
A3. グローバル変数や共通領域の使用を減らし、モジュールのインタフェースを明確化して必要最小限のデータを渡す習慣をつけることです。
A3. グローバル変数や共通領域の使用を減らし、モジュールのインタフェースを明確化して必要最小限のデータを渡す習慣をつけることです。
関連キーワード: モジュール結合度、データ結合、制御結合、共通結合、外部結合、スタンプ結合、低結合、高凝集、モジュール設計

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

