結合と分離とは何ですか? カップリングに関する情報は見つかりましたが、デカップリングに関する情報は見つかりませんでした。
5 に答える
Aaron の記事は理解に非常に役立ちます。また、マニングの出版物Spring in Action book を読むことをお勧めします。Spring がその問題をどのように解決するかについて非常に良い例を示しています。これにより、理解が確実に向上します。
編集 :
私は、テストによって導かれるオブジェクト指向ソフトウェアの成長と呼ばれるこの素晴らしい本でこれに出くわしました:
カップリング:
一方の変更が他方の変更を強制する場合、要素は結合されます。たとえば、2 つのクラスが共通の親から継承する場合、一方のクラスを変更すると、他方のクラスも変更する必要がある場合があります。コンボ オーディオ システムを考えてみてください。アナログ ラジオからデジタル ラジオに変更するには、システム全体を再構築する必要があるため、緊密に結合されています。セパレートからシステムを組み立てると、カップリングが低くなり、レシーバーを交換するだけで済みます。「疎」に結合された機能 (つまり、低結合の機能) は、保守が容易です。
凝集:
要素の結束は、その責任が意味のある単位を形成しているかどうかの尺度です。たとえば、日付と URL の両方を解析するクラスは、それらが無関係な概念であるため、一貫性がありません。衣服と皿の両方を洗う機械を考えてみてください。両方をうまく行うことはまずありません.2 反対に、URL の句読点だけを解析するクラスは、概念全体を表していないため、一貫性がありません。何かを成し遂げるには、プログラマーはプロトコル、ホスト、リソースなどの他のパーサーを見つける必要があります。「高い」コヒーレンスを持つ機能は、保守が容易です。
結束 - クラス/メソッドが 1 つのことのみを担当するという原則に関連しています。つまり、カプセル化に属さない浮遊メソッドはありません。メソッドは 1 つのことだけを行います。高凝集度/低凝集度は、これが保持される程度です。
カップリング - システムのさまざまな部分がどの程度相互依存しているか。たとえば、依存関係がどこにどのように存在するか。2 つのクラスが互いのメソッドを呼び出す場合、一方を変更すると他方も変更する必要があるため、それらは密結合になります。デカップリングとは、密に結合されていたものをそれほど結合しない、またはまったく結合しないようにするプロセスです。
柔軟なシステムには、高い結束力と疎結合があります。
カップリングについては、このウィキペディアの記事がすべての質問に答えているはずです。この記事では、結束について説明します。
「デカップリング」は「低/低カップリング」の別名です。
したがって、これらの用語はこれらの質問に答えます。
- プロジェクトの各部分は、別の部分にどの程度依存していますか?
- プロジェクトの一部だけを使用したい場合 (特定の問題を解決する場合など)、プロジェクトの残りの部分についてどれだけ知る必要がありますか?
- プロジェクトのすべての部分が特定の問題に対する単一の解決策に焦点を当てていますか、それとも解決策が他の部分に「漏れ」ていますか?
以下は、共生についての私の考えです。モジュールがあると想像してください。そのモジュール内には、いくつかのタスクがあります。これらのタスクが相互に関連性が高い場合、凝集度が高いと言えます。これらのタスクが関連していない場合、そのタスクは凝集度が低いと言えます。デカップリングを説明する私の最良の試みは、デカップリングはカップリングを取り除く行為であるということです.
低カップリングは、高い凝集力を実現するのに役立ちます! モジュールに関連するタスクと 1 つの責任を持たせたいことを思い出してください。しかし、カップリングとは何ですか?カップリングとは、そのモジュールに対する単一の責任を達成するための、他のモジュールへの依存度です。したがって、結合度が低いということは、外部モジュールにあまり依存していないため、高い結束力があるということです。
ただし、外部モジュールへの依存関係が多い場合は、結合度が高く、凝集度が低くなります。それを得る?
他のより装飾された思想家やグループは次のように述べています。
凝集度とは、単一のモジュールによって実行されるタスクが機能的に関連している度合いです。" IEEE、1983年"凝集度は、モジュールを一緒に保持する「接着剤」です。これは、モジュールの構成要素間の関連の一種と考えることができます。一般に、可能な限り最高レベルの結束が望まれます。" Bergland, 1981
ソフトウェア コンポーネントは、そのユニット内の要素が高度な機能的関連性を示す場合、高度な凝集性を示すと言われます。これは、プログラム単位の各要素が、その単位がその目的を達成するために不可欠であることを意味します。サマービル、1989年
デカップリングにより、オブジェクトの相互作用をクラスから分離し、継承を別個の抽象化レイヤーに分離して、カプセル化をポリモーフィックに分離することができます。これは、再利用可能なコードを使用して、個別のコード モジュールが相互に相互作用するのを防ぐ方法です。