Demeter of Law는 커플 링 및 응집력을 가진 객체 지향 시스템에 어떻게 적용됩니까?
저는 "소프트웨어 개발 및 전문 실무"책을 읽고 LoD에 관한 장을 읽었으며 그 원리가 객체 지향 시스템에 어떻게 적용되는지 궁금했습니다.
Demeter of Law는 커플 링 및 응집력을 가진 객체 지향 시스템에 어떻게 적용됩니까?
저는 "소프트웨어 개발 및 전문 실무"책을 읽고 LoD에 관한 장을 읽었으며 그 원리가 객체 지향 시스템에 어떻게 적용되는지 궁금했습니다.
답변:
에 따르면 에머슨 마세 데메테르의 법칙은 다음을 말한다 :
이는 유닛 (또는 객체)이 위와 같이 가정 할 때 낮은 커플 링 원리와 직접적으로 일치합니다 .
결합의 최하위 형태 중 하나는 메시지 전달입니다. 즉, 데이터는 매개 변수를 사용하여 메소드 호출을 통해 오브젝트간에 공유됩니다.
또한, 내가 볼 수 있듯이, 데메테르 법칙은 객체 자체가 어떤 데이터를 소유하고 있는지 알아야한다는 점 에서 높은 응집력 의 원리와 직접적으로 일치하지 않습니다 . 응집력이 낮은 물체에는 자체 방법으로 자주 사용하지 않는 데이터 멤버가 있습니다. 관계 및 협업 객체가 아니라 객체의 내용에 관한 것입니다.
커플 링, 단순화
객체가 다른 객체의 메소드, 속성 등을 호출하면 객체가 연결되었다고 말합니다. 이제 수신자 는 자신의 메소드 / 프로 프에 대해 아무것도 변경할 수 없기 때문에 결합이라고 부릅니다 . w . 발신자를 끊지 않고 .
따라서 결합 방법, 소품이 많을수록. - 수신자 코드를 사용하는 모든 코드를 위반하지 않고 수신자 코드 를 변경하는 것이 더 어렵 습니다.
커플 링 고려
대부분의 지식은 미친 커플 링을 유발합니다
여기에서 우리는이 Employee
가 그 Person
에 '주소'가 그
public class Employee {
public Person me = new Person();
}
public class Person {
public Address home = new Address();
}
public class Address {
public string street;
}
거리를 얻으려면 전화해야합니다 myEmployee.me.home.street
. 이것은 최소한의 지식 원칙과 180도 반대입니다. 내가 할 알고 내부, 복합 구조의에 대해 Employee
, Person
그리고 Address
클래스.
이 불완전한 클래스 디자인으로 인해 모든 클래스에 대해 알게 되었으므로 myEmployee.me.home.street
(발신자 객체)를 3 개 이상의 클래스에 연결하여 단일 속성 만 얻을 수 있습니다!
최소한의 지식으로 하루를 저장
내가 Employee
수업 에 대해서만 이야기한다면 나는 최소한의 지식 원칙을 적용하고 있으며, 그렇게함으로써 우리는 자동적으로 그 수업에만 커플 링을 제한 하고 동시에 그 한 수업에 커플 링을 분리 한다.
Employee
클래스에 필요한 모든 속성을 추가 하여 커플 링을 수정합니다.
그러므로
public class Employee {
public Person me = new Person();
public string street { return me.home.street; }
}
전화 할 수 있습니다 : myEmployee.street
-
Employee
Employee
- 아무리 복잡한 구조를.최소한의 지식
우리는에서 myEmployee을 분리 Person
하고 Address
, 이상적으로 우리는 추가하여 최소한의 지식을 계속해서 적용해야 을 통해 패스를 속성 등이 Employee
단지에 회담 Person
과 Person
만 대화Address
연구 ( V. Basili, L. Briand 및 WL Melo. 품질 지표로서 객체 지향 설계 메트릭의 유효성 검사 )는 응답 세트가 큰 클래스가 응답 세트가 더 많은 클래스보다 응답 세트가 작은 클래스보다 더 많은 오류를 생성하는 경향이 있음을 보여주었습니다. 더 높은 결합 가능성을 의미합니다.
Demeter의 법칙의 가치는 정의에 의해 설정된 응답을 줄인다는 것입니다. 객체의 메소드는 메소드 자체, 메소드에 전달 된 모든 매개 변수, 작성된 오브젝트의 메소드 및 직접 보유 된 오브젝트의 메소드 만 호출 할 수 있습니다. 응답 세트가 작기 때문에 높은 결합 가능성이 적습니다. 모듈 / 방법은 즉시 사용 가능한 참조 만 사용하므로 응집력이 높습니다.
꽤 간단합니다. A가 B에 의존하고 B가 C에 의존한다고 말한다. Demeter의 법칙이 없으면 A에서 B와 C를 모두 사용할 수 있지만이 법을 준수함으로써 A는 B에만 의존하며 C에만 의존 할 수는 없다.
이는 모듈의 종속성 수를 크게 줄이므로 낮은 결합을 가능하게합니다. 결합은 개념 상 커플 링과는 다르지만 동일한 방식으로 달성됩니다. 모듈에 대한 종속성이 적을수록 해당 모듈에 대해 더 구체적이되어 응집력이 증가합니다. 또한 총 모듈 수가 증가하고 종속 모듈에 특화된 작업을 수행하는 데 더 전문화되어 (신 오브젝트와 달리)보다 일관된 시스템으로 직접 변환됩니다.