定義:1つのオブジェクトは、他のオブジェクトの理解を最も少なく保つ必要があります。
問題の起源:クラス間の関係に近いほど、結合度が大きくなり、1つのクラスが変化すると、別のクラスへの影響が大きくなります。
解決策:クラス間の結合を可能な限り最小限に抑えます。
プログラミングを学び始めて以来、ソフトウェアプログラミングの一般原則を知っています:低カップリング、高い結束。プロセス指向であろうとオブジェクト指向プログラミングであろうと、各モジュール間の結合を可能な限り低く保つことによってのみ、コードの再利用率を改善できます。低カップリングの利点は自明ですが、どのようにして低カップリングを達成するためにプログラムできますか?それがまさに、Dimitルールが達成しようとしていることです。
最小の知識の原則としても知られているディミッター法は、1987年に米国ノースイースタン大学のイアン・ホランドによって最初に提案されました。素人の用語では、依存するクラスについて知ることが少ないほど良いです。言い換えれば、依存クラスの場合、ロジックがどれほど複雑であっても、クラス内のロジックをカプセル化して、提供されたパブリック方法以外の情報を外部に漏らしないようにしてください。 Dimitルールには、より単純な定義もあります。直接の友人とのみ通信します。まず、直接の友人が何であるかを説明しましょう。各オブジェクトは、他のオブジェクトと結合した関係を持ちます。 2つのオブジェクト間に結合関係がある限り、これらの2つのオブジェクトは友人の関係であると言えます。依存関係、関連性、組み合わせ、集約など、結合する多くの方法があります。その中で、メンバー変数のクラス、メソッドパラメーター、および直接的な友人として表示されるメソッドリターン値を呼び出しますが、ローカル変数のクラスは直接の友人ではありません。言い換えれば、クラス内にローカル変数として表示されないことが最善です。
これは、ディミット原則の違反の例です。
パブリッククラス教師{public void教師(クラスクラス){classes.getStudents.getScore.show(); }}
問題は何ですか?カップリングが高すぎます。
1.スコアクラスは、学生クラスでキャンセルできます。
2。スコアクラスの表示方法も削除される場合があります。
学生のクラスとスコアクラスはすべてあなたに馴染みがなく、いつ変化するかわからないかもしれません。
次のように変更できます。
パブリッククラス教師{public void teacher(classes classes){classes.showscore(); }} public classs classes {public void showscore(desute desute){student.showscore(); }} public class Student {スコアスコア; public void showscore(){score = new score(80); score.show(); }}
要約:
1. Dimitの法律の利点は、クラス間の結合を減らすことです。
2。不利な点は、より小さな方法を生成し、システムがより乱雑になり、通信効率が低下することです。
3。設計モードのアプリケーション:ファサードモード(ファサードモード)およびメディエーターモード(メディエーターモード)。