カップリングと結束の概念を簡潔な定義に要約しようとしています。誰かが私に短くてわかりやすい説明をしてもらえますか (ウィキペディアのこことここの定義よりも短い)? 彼らはどのように相互作用しますか?
ありがとう。
誰かが良い、短い例を持っていますか?
カップリング
Loose: あなたとコンビニの男。それぞれの目標を達成するために明確に定義されたプロトコルを通じて通信します。システムを中断することなく、どちらかを置き換えることができます。
タイト:あなたとあなたの妻。
凝集
低:コンビニ。ガソリンから牛乳、ATM バンキングまで、あらゆるものを購入できます。製品とサービスには共通点がほとんどなく、それらすべてを 1 か所にまとめた利便性だけでは、結果として生じるコストの増加と品質の低下を相殺するには不十分な場合があります。
ハイ:チーズ屋さん。彼らはチーズを売っています。他には何もありません。チーズに関しては、彼らを打ち負かすことはできません。
カップリング - モジュール (パッケージ、クラス、メソッド) が他のモジュールにどの程度依存しているかの尺度。結合を減らすか、特定のモジュールがシステムの他のモジュールに依存する量を減らすことが望ましいです。
Cohesion - モジュールのメンバー (クラス、メソッド、メソッド内の機能) が同じモジュールの他のメンバーとどの程度密接に関連しているかの尺度。モジュールが非常に具体的なタスクを持ち、そのタスクのみを実行することを示すため、結束を高めることが望ましいです。
カップリングとは、他者への依存を意味します。
結束とは、それ自体との完全性を意味します。
OO (これらのものを含む) に関連するソフトウェア設計概念の最も包括的な議論の 1 つは、Bertrand Meyer のObject Oriented Software Constructionです。
「カップリング」に関して、彼は次のように弱いカップリング/小さなインターフェイスのルールを示しています。
2 つのモジュールが通信する場合、交換する情報はできるだけ少なくする必要があります。
結束に関連する Meyer の資料は、1 つの簡潔なステートメントに要約されることはありませんが、Steve McConnell のCode Completeからの次の文は、それをかなりうまくまとめていると思います。
凝集度とは、クラス内のすべてのルーチンまたはルーチン内のすべてのコードが中心的な目的をどれだけ密接にサポートしているかを示します
カップリングを測定する手っ取り早い方法は、import
(または類似の) ステートメントを測定することです。
「結合はモジュール間の相互依存性の尺度であり、最小化する必要があります」「結束、最大化する品質は、各モジュールによって実行されるアクティビティ間の関係に焦点を当てています。」
この論文から引用: http://steve.vinoski.net/pdf/IEEE-Old_Measures_for_New_Services.pdf