【もじゅーるけつごうど】

モジュール結合度 とは?

最終更新:
💡 部品同士が、相手の何に依存しているか

モジュール(プログラムの部品)同士の依存の強さ。相手の内部構造や余分な情報に依存するほど、変更が他の部品へ波及しやすくなる。必要な機能を連携させつつ、依存する範囲を小さくすることが設計の目標になる。

📌 このページのポイント
結合度:相手の何に依存する? 例:料金計算が必要とするのは金額だけ 顧客データ 氏名・住所 金額:1,000円 全体を渡す 料金計算 金額だけ使う 使わない項目を含む構造にも依存する 必要な値 1,000円 金額を渡す 料金計算 依存する情報の範囲を小さくする 構造体やオブジェクト自体が悪いわけではない
分類名だけで順位を付けず、相手の変更がどこまで伝わるかを考えます。
ひよこ ひよこ
モジュール結合度って何なの?
ペンギン先生 ペンギン先生
プログラムの部品同士の依存の強さだよ。たとえば料金計算に金額だけが必要なのに、顧客データの内部構造まで知っていると、その構造の変更で計算側も直すことがあるんだ。
ひよこ ひよこ
結合度は低いほどいいの?
ペンギン先生 ペンギン先生
一般には、不要な依存が少ないと変更やテストを行いやすいよ。ただし、部品が連携するための依存は必要。つながりをゼロにするのではなく、何を約束して受け渡すかを明確にするんだ。
ひよこ ひよこ
どんな種類があるの?
ペンギン先生 ペンギン先生
必要なデータを渡すデータ結合、データ構造の一部だけを使うスタンプ結合、相手の処理を指定する情報を渡す制御結合などがあるよ。共有のグローバルデータを使う共通結合や、相手の内部を直接参照する内容結合も、依存を考える手掛かりになる。
ひよこ ひよこ
オブジェクトを渡すだけで悪い設計になる?
ペンギン先生 ペンギン先生
そうとは限らないよ。大切なのは、受け取る側に必要な情報のまとまりかどうか。金額だけ使う関数に住所や氏名まで含む顧客全体を渡す場合と、必要な項目だけの明確な型を渡す場合では、依存する範囲が違うんだ。
ひよこ ひよこ
APIを使えば疎結合になる?
ペンギン先生 ペンギン先生
窓口を決めることは役立つけれど、それだけでは決まらないよ。相手の内部を隠し、公開するデータや操作の約束を小さく明確にすることが大切。部品の中で関連する仕事がまとまっているかという、凝集度も一緒に考えよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「モジュール結合度」って出てきたら「プログラムの部品同士が、どれだけ相手に依存しているか」と思えばだいたいOK!
📖 おまけ:英語の意味
「Module Coupling」 = モジュール間の結び付き
💬 couplingは結び付きを表す言葉。ここでは、別の部品の情報や動作にどれだけ依存しているかに注目するよ。

参考資料

← 用語集にもどる