システム管理論 I / 第 7 回

システム設計(2)

結合度と強度 ── 分け方の良し悪しを測る

この回のねらい

2 つの物差し

前回、モジュールに分けること自体は目的ではないと述べました。 良い分け方とはどういうものか。物差しは 2 つあります。

結合度(モジュールの関係) ── 低いほど良い
モジュールどうしがどれだけ強く結びついているか。 結びつきが強いと、片方を直すともう片方も直すことになります。

強度(凝集度)(モジュールの関係) ── 高いほど良い
1 つのモジュールの中の機能どうしが、どれだけ関連しているか。 関連の薄いものを詰め込むと、何のためのモジュールか分からなくなります。

目指すのは「低結合・高強度」。

モジュール結合度(6 段階)

結合度の定義と順序関係
段階名前内容評価
内容結合 あるモジュールが、他のモジュール内部の構成要素を直接参照・変更できる。GoTo 文で他の内部へ飛ぶなど 結合度が高い
(好ましくない)
共通結合 複数のモジュールが共通の大域データを参照する
外部結合 共通の外部データ項目を参照する(必要なものだけを共有)
制御結合 相手の処理内容を指示する制御情報(フラグなど)を引数で渡す
スタンプ結合 データ構造(レコード全体など)を引数で渡す。相手は一部しか使わない
データ結合 必要なデータ項目だけを引数で渡す 結合度が低い
(好ましい)

覚え方。下から順に データ → スタンプ → 制御 → 外部 → 共通 → 内容。 「必要なものだけ渡す」がいちばん良く、 「相手の中身に手を突っ込む」がいちばん悪い、という並びです。
制御結合が中ほどにある理由は、フラグを渡すと 「呼ぶ側が、呼ばれる側の中の分岐を知っている」ことになるからです。 呼ばれる側の作りを変えると、呼ぶ側も直すことになります。

モジュール強度(7 段階)

1 つのモジュール内の機能どうしの関連性を表します。

強度の定義と順序関係
段階名前内容評価
暗号的強度 関連のない処理を、理由なくまとめただけ 強度が低い
(好ましくない)
論理的強度 似た種類の処理をまとめ、引数でどれを行うか選ぶ
時間的強度 同じ時期に実行される処理をまとめた(初期化処理など)
手順的強度 決まった手順で順に実行される処理をまとめた
連絡的強度 手順的強度に加えて、処理どうしが同じデータをやりとりする
機能的強度 ひとつの機能だけを果たす
情報的強度 同じデータ構造を扱う複数の機能を、その入口ごとにまとめた 強度が高い
(好ましい)

情報的強度が最上位である理由。 「あるデータ構造を扱う操作を、そのデータと一緒にまとめる」という考え方は、 第9回で扱うオブジェクト指向のカプセル化そのものです。 データとそれを操作する手続きを一体にすれば、 データの表現を変えても影響が内側に閉じます。
結合度・強度の議論は、そのままオブジェクト指向へつながっています。

動かして確かめる

場面を選んで、どの段階にあたるかを判定する選んでみる
← 第6回 第8回 テスト →