2008-09-02 6 views
58

私はカップリングと結束という概念を簡潔な定義に煮詰めようとしています。誰かがわかりやすくわかりやすい説明をくれますか(Wikipedia herehereの定義よりも短いですか?)彼らはどのように相互作用しますか?カップリングと結束

ありがとうございました。

誰かが良い、短い例がありますか?

+0

私は最初に逃げ出した1つの区別:「結合」はクラス間であり、「結束」は単一クラス内である*。 –

答えて

177

カップリング

  • ルース:あなたとコンビニエンスストアで男。あなたはそれぞれの目標を達成するために明確なプロトコルを使ってコミュニケーションをとります。お金を払うと、彼はCheetosのバッグで歩き回ることができます。いずれかの人がシステムを中断することなく交換することができます。

  • タイト:あなたとあなたの妻。

結束

  • 低:コンビニエンスストア。あなたは、ガスからミルク、ATMバンキングまであらゆるものを手に入れます。製品とサービスは共通点がほとんどなく、そのすべてを1か所にまとめておくことの利便性は、コストの増加と品質の低下を相殺するには不十分な場合があります。

  • 高:チーズ店。彼らはチーズを売る。他に何もない。それはチーズになると、彼らを打ち負かすことはできません。 (これらのものを含む)OOに関連するソフトウェアの設計思想の最高の包括的な議論の

+15

ハム、私は高い結束のための妻の例を予期していた、私は少し失望していると言う必要があります:) – ubiquibacon

+6

"ああ、私たちはカマンベールをいくつか持っています...実際、それは非常に流出しています...私はそれがあなたが好きなものよりも走っていると思います。はい、サー。 "ああ...猫はそれを食べた。" – MikeMurko

+0

私は、この答えを探して、ユニの同僚を見に来ました。しかし、それは関係がありません – danielcooperxyz

62

カップリング - モジュール(パッケージ、クラス、メソッド)が他のモジュールにどれくらい依存しているかの尺度。カップリングを低減するか、または所与のモジュールがシステムの他のモジュールに依存する量を低減することが望ましい。

結束 - モジュールのメンバ(メソッド内のクラス、メソッド、機能)が同じモジュールの他のメンバとどれほど密接に関連しているかの尺度。モジュールが非常に特定のタスクを有し、そのタスクだけを行うことを示すように、凝集力を高めることが望ましい。

1

「は結合が最小化されるべきモジュール、 間の相互依存性の尺度である」 「凝集、最大化される品質は、各モジュールによって実行される活動との関係 に焦点を当てています。」この論文から引用し

:結合を測定するhttp://steve.vinoski.net/pdf/IEEE-Old_Measures_for_New_Services.pdf

1

間に合わせと-方法は、あなたのimport(または類似の)文を測定することです。

21

一つは、バートランド・メイヤーのObject Oriented Software Constructionです。 「カップリング」について

次のように、彼は彼の弱カップリング/小インタフェースルールを与える:

二つのモジュールが通信した場合、彼らはできるだけ情報を交換する必要があります。凝集に関連

マイヤーの材料は、これまで、単一の簡潔な声明を煮詰めていないが、私はそれまでかなりよくスティーブ・マッコーネルのCode Complete合計からこの文を考える:

結束はルーチンのサポートにどのように密接にクラス内のすべてのルーチンまたはすべてのコードを指し中央目的

+0

素晴らしい答え! – SebNag

1

用語を導入し、元の論文を参照してください: http://www.research.ibm.com/journal/sj/132/ibmsj1302C.pdf

+0

最新のリンクが必要です(現在のリンクはIEEE paywallにつながります)。この記事は "Structured Design"というタイトルです。DOI:10.1147/sj.132.0115 – Mark

16

カップリングはothers.Cohesionへの依存性は、それ自身で完全に意味を意味します。

+0

簡潔で素敵な解答 – Premraj

1

モジュール間の結合が強く、モジュール間の結合が低いことは、多くの場合、OOプログラミング言語で高品質に関連しているとみなされます。例えば

、各Javaクラス内のコードは高い内部凝集力を有していなければならないが、として緩く他のJavaクラスのコードに可能な限り結合すること。

カップリングは、2つのクラス/モジュールがどのように関連しており、それらが互いにどのように依存しているかを示します。カップリングが低いということは、あるクラスで何かメジャーなものを変更しても、他のクラスに影響してはならないということです。結合が強くなると、クラスが密接に結合されるため、コードを変更したり維持したりすることが難しくなり、変更によってシステム全体が改造される可能性があります。

結束は、クラス(またはモジュール)が行うことを指します。結束度が低いということは、クラスが多種多様な行動を行い、それが何をすべきかに集中していないことを意味します。結束度が高いということは、クラスが何をすべきか、すなわちクラスの意図に関係するメソッドのみに集中していることを意味する。

優れたソフトウェア設計は、すべて高い結合力と低い結合性を実現します。

関連する問題