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