結合度の履歴
恋人どうしのようにくっついているのではなく、職場の同僚のように冷めた関係にしよう
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)
- 単純データパラメータ結合
データ結合
- 単純オブジェクト結合
あるオブジェクトをインスタンス化する
- オブジェクトパラメータ結合
あるオブジェクトに、指定のオブジェクトを要求すること
- セマンティック結合
別のモジュールの内部構造を使用する場合
制御結合、外部結合、共通結合、内部結合は全部これにあたるみたい。
その他
- ハイブリッド結合
ある値を状況によって複数の意味を持たせること
参考
http://en.wikipedia.org/wiki/Coupling_(computer_science)
一番詳しい。
http://homepage3.nifty.com/koha_hp/KeyWords/KW.Coupling.html
ハイブリッド結合について書いてるのはここだけ