質問

凝集とデカップリングとは何ですか?カップリングに関する情報を見つけましたが、デカップリングについては見つかりませんでした。

役に立ちましたか?

解決

アーロンのその記事は理解するのに非常に良いです、また私はあなたがマニング出版物を読むことをお勧めします 活動中の春 本、彼らは、春がその問題をどのように解決するかについて非常に良い例を示しています。

編集 :

私はこれを、テストによって導かれた成長オブジェクト指向ソフトウェアと呼ばれるこの素晴らしい本でこれを受け入れました:

結合:

一方の変化が他方の変化を強制する場合、要素は結合されます。たとえば、2つのクラスが共通の親から継承する場合、あるクラスの変更には他のクラスの変更が必要になる場合があります。コンボオーディオシステムを考えてみてください。アナログからデジタルラジオに変更したい場合は、システム全体を再構築する必要があるため、しっかりと結合されています。システムを分離から組み立てると、カップリングが低くなり、受信機を交換するだけです。 「ゆるく」結合された機能(つまり、カップリングが低いもの)は、メンテナンスが容易です。

凝集:

要素 凝集 その責任が意味のある単位を形成するかどうかの尺度です。たとえば、日付とURLの両方を解析するクラスは、無関係な概念であるため、一貫性がありません。衣服と皿の両方を洗う機械を考えてみてください。両方ともうまくいくことはまずありません。何でも成し遂げるには、プログラマーはプロトコル、ホスト、リソースなどの他のパーサーを見つける必要があります。 「ハイ」コヒーレンスを備えた機能は、メンテナンスが容易です。

他のヒント

凝集 - クラス/メソッドが1つのことに対して責任を負うべきであるという原則に関連しています。つまり、カプセル化に属さない迷惑な方法はありません。メソッドは1つだけを行います。高い/低凝集は、これが保持する程度です。

カップリング - システムの異なる部分が相互依存する方法。たとえば、依存関係がどのように、どこであるか。 2つのクラスが互いに互いに呼び出される場合、それらは緊密に結合されます。1つは他方を変更する必要があることを意味するためです。デカップリングとは、緊密に結合されていない、またはまったく結合しないものを作るプロセスです。

柔軟なシステムは、高い結束とゆるい結合を持っています。

結合のために、 このウィキペディアの記事 すべての質問に答える必要があります。 この記事 凝集を扱っています。

「デカップリング」は、「小さなカップリング」の別の名前です。

したがって、これらの用語はこれらの質問に答えます。

  • プロジェクトの各部分は別の部分にどのくらい依存していますか?
  • プロジェクトの一部を使用したい場合(特定の問題を解決するのが好きです)、プロジェクトの残りのすべてについてどのくらい知る必要がありますか?
  • プロジェクトのすべての部分は、特定の問題に対する単一のソリューションに焦点を合わせていますか、それとも他の部分に「リーク」ソリューションを実行しますか?

これが凝集についての私の考えです。モジュールがあると想像してください。そのモジュールには、いくつかのタスクがあります。これらのタスクが互いに非常に関連している場合、私たちはそれが高い結束を持っていると言います。これらのタスクが関連していない場合、凝集が低いと言います。デカップリングを説明するための私の最善の試みは、デカップリングがカップリングを削除する行為であるということです。

低カップリングは、私たちが高い結束に到達するのに役立ちます!モジュールに関連するタスクと1つの責任を持たせたいことを忘れないでください。しかし、結合とは何ですか?カップリングは、そのモジュールに対する単一の責任を達成するための他のモジュールへの依存度の程度です。したがって、カップリングが低いことで、外部モジュールにあまり依存していないため、高い結束力があると言っています。

ただし、外部モジュールへの多くの依存関係がある場合、高い結合と低い結束があります。それを得る?

他のより装飾された思想家やグループは言う:

凝集は、単一のモジュールによって実行されるタスクが機能的に関連する程度です。」IEEE、1983 "凝集は、モジュールを一緒に保持する「接着剤」です。モジュールのコンポーネント要素間の関連性のタイプと考えることができます。一般的に、可能な限り最高レベルの結束を望んでいます。」Bergland、1981

ソフトウェアコンポーネントは、そのユニットの要素が高度な機能的関連性を示す場合、高度な凝集を示すと言われています。これは、プログラムユニットの各要素がそのユニットがその目的を達成するために不可欠であることを意味します。 Sommerville、1989年

デカップリングにより、オブジェクトの相互作用をクラスと継承を分離し、抽象化の明確な層に分離することができます。これは、再利用可能なコードを使用して個別のコードモジュールが相互作用するのを防ぐための練習であるカプセル化を分離するために使用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top