デメテルの法則(Low of Demeter)とは?
最小知識の原則(principle of least knowledge)とも呼ばれる、「ソフトウェアの設計(特にオブジェクト指向プログラムの設計)」におけるガイドラインのことで、基本的な考え方は「任意のオブジェクトが自分以外(サブコンポーネント含む)の構造やプロパティに対して持っている仮定を最小限にすべきである」
というモノです。
分かりやすくいうと、、
「親クラス.子クラス.子クラスのメソッド」 # これはNG
デメテルの法則に則った場合に呼び出せるメソッドは?
オブジェクト=Object
メソッド=オブジェクトが使えるメソッド
とする。
- オブジェクト自身
- メソッドの引数に渡されたオブジェクト
- メソッドの内部でインスタンス化されたオブジェクト
- オブジェクトを直接的に構成するオブジェクト(オブジェクトのインスタンス変数)
- 呼び出し用のメソッドまたは属性として同じクラス内で宣言されたオブジェクトのメソッド
メリット
- テストや修正が楽になる。
デメリット
- 密結合になり、子クラスでメソッドやプロパティを削除したときに親クラスまで参照して直さないといけない。
- テストがしづらい。