人生を自由に楽しむために会社員を辞め、フリーランスを経て法人化し、現在は一人社長をしています。ユウイチです。
今回はIPAの情報処理試験で頻出のモジュール間結合度について解説します。
ITパスポート試験や基本情報技術者試験では、この結合度の種類や違いをよく問われますので、しっかり理解しておきましょうね。
それでは、分かりやすく解説します。
モジュール間結合度とは?
モジュール間結合度とは、複数のモジュールがどれだけ強く依存しているかを示す指標で、結合度が強いほどモジュール同士が密接に関係し、変更の影響を受けやすくなります。
ですので、モジュール間結合度をできるだけ弱く(疎結合)することが望ましいです。
モジュール間結合度の種類(強い順)
それでは、モジュール間結合度を「強い(避けるべき)」→「弱い(望ましい)」の順に解説します。
1. 内容結合(Content Coupling)【最も避けるべき】
モジュール間で、他のモジュールの内部実装に直接アクセスする状態。
特徴
- 完全に依存してしまい、変更が難しくなる
- メンテナンス性が極端に悪化する
例
- あるモジュールが別のモジュールの内部変数を直接変更する
- 別のモジュールの内部メソッドを直接呼び出す
2. 共通結合(Common Coupling)
モジュール間でグローバル変数を共有する状態。
特徴
- どのモジュールがデータを変更したのか把握しづらい
- 変更の影響範囲が広がる
例
- すべてのモジュールが同じグローバル変数を読み書きする
3. 外部結合(External Coupling)
モジュール間で外部リソース(ファイル、データベース、環境変数など)を共有する状態。
特徴
- 外部システムの影響を受けやすい
- テストや保守が難しくなる
例
- 2つのモジュールが同じファイルを直接操作する
- 環境変数を使って設定を共有する
4. 制御結合(Control Coupling)
モジュール間で制御用のフラグ(true/false など)を渡し、処理を制御する状態。
特徴
- 呼び出し側が処理の流れを制御するため、依存関係が強くなる
- モジュールの独立性が損なわれやすい
例
- 関数の引数としてフラグ(true/false)を渡し、処理の流れを変える
5. スタンプ結合(Stamp Coupling)
モジュール間でデータ構造(構造体やクラスなど)を受け渡す状態。
特徴
- データ結合よりも結合が強くなる
- 必要のない情報まで渡してしまう可能性がある
例
- 関数の引数としてオブジェクト全体を渡すが、実際には一部のデータしか使用しない
6. データ結合(Data Coupling)【最も望ましい】
モジュール間のデータの受け渡しが単純なデータ構造(変数や配列など)で行われる状態。
特徴
- モジュール間の関係が最も緩く、独立性が高い
- 変更の影響が最小限
例
- 関数の引数として単純なデータ項目(整数、文字列など)を渡す
モジュール間結合度の比較表
以下、表にまとめます。
結合度の種類 | 結合度 | 独立性 | 例 | 推奨度 |
---|---|---|---|---|
内容結合 | 最も高い | 最も低い | 他モジュールの内部を直接操作 | ×××(避けるべき) |
共通結合 | 高い | 低い | グローバル変数を共有 | ×× |
外部結合 | やや高い | やや低い | ファイルやDBを共有 | × |
制御結合 | 普通 | 普通 | フラグを引数で渡す | △ |
スタンプ結合 | やや低い | やや高い | 構造体を引数で渡す | ○ |
データ結合 | 低い | 高い | 変数を引数で渡す | ◎(推奨) |
まとめ
以上、今回はモジュール間結合度について簡単に説明してみました。
情報処理試験対策として、以下のように覚えておきましょう笑
情報処理試験対策
結合度は「内容結合」が最も避けるべきで、「データ結合」が最も望ましい
「結合度が強ければ悪」「結合度が低ければ正義」
情報処理試験対策であれば、これで十分だと思います。
モジュール間結合度を聞かれるのは選択問題のはずなので、これ覚えておくだけで正しい選択し選べます^^
情報処理試験でモジュール間結合度の問題が出てきたら、確実に正解しておきましょうね^^
それではまた!