S eda1a14b50ee24bcab19b62f40858e76 結合度

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

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...
 ハイブリッド結合について書いてるのはここだけ

もしかして

    他の人の「結合度」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ

        関連ツイート