結合度

1pt

恋人どうしのようにくっついているのではなく、職場の同僚のように冷めた関係にしよう

Code Complete 2nd Edition


モジュール間の結びつきの強さのこと。結合が強いほど修正が困難になる。

大学の先生から教えてもらった。それ以来プログラミングするときには必ず意識している。構造化プログラミングが生まれたのも、オブジェクト指向プログラミングが生まれたのも、いかにして疎結合にするかという必要性から生まれたものだ。なのでこれを知っておけば小手先の知識は不要といえる。

結合の基準(Code Complete

  • サイズ

 引数の数。あまり多すぎるとルーチン切り分ける意味がなくなる。そういうのは大抵設計が悪い。

  • 可視性

 モジュール間の結びつきを見えるようにする。例えばある変数をグローバル変数にする。依存関係が容易に把握できるかどうか?

  • 柔軟性

 どれくらい簡単に変更できるか。

結合の種類(コンスタンチンとヨードン、Wikipedia:en)

ソフトウェア構造化設計技法が原典?
結合度が高い(ダメな)順。

  • 内容結合 (content coupling)

 別のモジュールの中身に依存する

  • 共通結合 (common coupling)

 グローバルデータを参照

  • 外部結合 (external coupling)

 外部宣言しているデータを参照する(publicなデータとか?)

  • 制御結合 (control coupling)

 フラグとか、処理を制御するための引数を渡す

  • スタンプ結合 (stamp coupling)

 構造体を渡す

  • データ結合 (data coupling)

 決められた引数でデータを渡す

  • メッセージ結合 (message coupling)

 (引数のない)メソッドの呼び出し。メッセージパッシング

オブジェクト指向プログラミングに見られる結合(Wikipedia:en)

 子は親を知ってるけど、親は子を知らない。子が親に依存してるので、親の修正が難しくなる。

  • 一時的結合

 あるメソッドが別のメソッドに依存してしまうこと。executeしないとerrorが取得できないような。
 IteratorのhasNext(), next()がそうなじゃないかという
 http://hamletdarcy.blogspot.com/2008/09/temporal-coupling-in...
 これは結構やってしまうことが多い。

結合の種類(Code Complete

  • 単純データパラメータ結合

 データ結合

  • 単純オブジェクト結合

 あるオブジェクトをインスタンス化する

  • オブジェクトパラメータ結合

 あるオブジェクトに、指定のオブジェクトを要求すること

  • セマンティック結合

 別のモジュールの内部構造を使用する場合
 制御結合、外部結合、共通結合、内部結合は全部これにあたるみたい。

その他

  • ハイブリッド結合

ある値を状況によって複数の意味を持たせること

参考

Code Complete


http://en.wikipedia.org/wiki/Coupling_(computer_science)
一番詳しい。
http://homepage3.nifty.com/koha_hp/KeyWords/KW.Coupling.html
 ハイブリッド結合について書いてるのはここだけ

「結合度」について友人に書いてもらう。

あなたにとって「結合度」とは?

ログインするとワンクリックでキーワードを投稿できます

ログインする 新規登録する

関連したキーワードを持つお気に入り

他の人の「結合度」を見る