데 미터 법칙은 커플 링 및 응집력에 관한 객체 지향 시스템에 어떻게 적용됩니까? [닫은]


15

Demeter of Law는 커플 링 및 응집력을 가진 객체 지향 시스템에 어떻게 적용됩니까?

저는 "소프트웨어 개발 및 전문 실무"책을 읽고 LoD에 관한 장을 읽었으며 그 원리가 객체 지향 시스템에 어떻게 적용되는지 궁금했습니다.


나는 한 번 높은 수준의 커플 링 (스타 토폴로지)을 가진 프로젝트를 물려 받았습니다. 나는 '중재자 패턴'을 사용하여 물건 사이의 결합을 제한하고 중재자가 대신 각 물건과 대화하도록함으로써 물건을 정리했습니다. 여전히 커플 링이 관련되어 있지만 커플 수를 제한합니다. 어떤 사람들은 디자인에 높은 커플 링 문제가 있다고 생각하면 이것을 더 탐구하고 싶을 수도 있습니다.
Jeach

답변:


9

에 따르면 에머슨 마세 데메테르의 법칙은 다음을 말한다 :

  • 각 장치에는 다른 장치에 대한 정보가 제한적이어야합니다. 현재 장치와 "가까운"장치 만 있습니다.
  • 각 부대는 친구들과 만 대화해야합니다. 낯선 사람과 이야기하지 마십시오.
  • 가까운 친구와 만 대화하십시오.

이는 유닛 (또는 객체)이 위와 같이 가정 할 때 낮은 커플 링 원리와 직접적으로 일치합니다 .

  • 서로 밀접하게 연결되지 마십시오. 가장 가까운 것만 있습니다.
  • 각 직원은 공동 작업자와 공동 작업자가 아닌 공동 작업자와 만 대화해야합니다.
  • 즉각적인 공동 작업 개체와 만 대화

결합의 최하위 형태 중 하나는 메시지 전달입니다. 즉, 데이터는 매개 변수를 사용하여 메소드 호출을 통해 오브젝트간에 공유됩니다.

또한, 내가 볼 수 있듯이, 데메테르 법칙은 객체 자체가 어떤 데이터를 소유하고 있는지 알아야한다는 점 에서 높은 응집력원리와 직접적으로 일치하지 않습니다 . 응집력이 낮은 물체에는 자체 방법으로 자주 사용하지 않는 데이터 멤버가 있습니다. 관계 및 협업 객체가 아니라 객체의 내용에 관한 것입니다.


8

커플 링, 단순화

객체가 다른 객체의 메소드, 속성 등을 호출하면 객체가 연결되었다고 말합니다. 이제 수신자 는 자신의 메소드 / 프로 프에 대해 아무것도 변경할 수 없기 때문에 결합이라고 부릅니다 . w . 발신자를 끊지 않고 .

따라서 결합 방법, 소품이 많을수록. - 수신자 코드를 사용하는 모든 코드를 위반하지 않고 수신자 코드 를 변경하는 것이 더 어렵 습니다.

커플 링 고려

  • 단일 소품도 참조하는이 방법은 두 객체를 결합합니다.
  • 소프트웨어를 만들려면 분명히 커플 링이 필요합니다.
  • 커플 링의 '잠금 단계'특성을 고려하여 커플 링을 제한하고 분리하려고합니다. 이 목표는 단순히 일반적인 소프트웨어 개발과 함께 진행됩니다. 원칙.
  • 우리가 얘기해야 할 물건이 적을수록 커플 링이 낮아집니다.
  • 예를 들어 20 개의 서로 다른 메소드 호출을해야하는 경우 20 개의 호출이 모두 하나의 클래스 / 객체에 대한 경우 커플 링이 낮아집니다. 그와 동일한 메소드는 여러 클래스 / 객체에 분산됩니다.

대부분의 지식은 미친 커플 링을 유발합니다

여기에서 우리는이 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-

  1. 나는 "알고" Employee
  2. 난 단지에 연결하고 Employee- 아무리 복잡한 구조를.

최소한의 지식

우리는에서 myEmployee을 분리 Person하고 Address, 이상적으로 우리는 추가하여 최소한의 지식을 계속해서 적용해야 을 통해 패스를 속성 등이 Employee단지에 회담 PersonPerson만 대화Address


1

연구 ( V. Basili, L. Briand 및 WL Melo. 품질 지표로서 객체 지향 설계 메트릭의 유효성 검사 )는 응답 세트가 큰 클래스가 응답 세트가 더 많은 클래스보다 응답 세트가 작은 클래스보다 더 많은 오류를 생성하는 경향이 있음을 보여주었습니다. 더 높은 결합 가능성을 의미합니다.

Demeter의 법칙의 가치는 정의에 의해 설정된 응답을 줄인다는 것입니다. 객체의 메소드는 메소드 자체, 메소드에 전달 된 모든 매개 변수, 작성된 오브젝트의 메소드 및 직접 보유 된 오브젝트의 메소드 만 호출 할 수 있습니다. 응답 세트가 작기 때문에 높은 결합 가능성이 적습니다. 모듈 / 방법은 즉시 사용 가능한 참조 만 사용하므로 응집력이 높습니다.


1
연구 ( Anquetil, N. and Laval, J. Legacy Software Restructuring : Concrete Case 분석 )는 커플 링을 줄이고 응집력을 높이는 것이 항상 더 좋은 품질을 얻는 것은 아니라는 것을 보여주었습니다. 하나의 작은 연구 결과에 의존하는 것은 해로운 것으로 간주되었습니다.

0

꽤 간단합니다. A가 B에 의존하고 B가 C에 의존한다고 말한다. Demeter의 법칙이 없으면 A에서 B와 C를 모두 사용할 수 있지만이 법을 준수함으로써 A는 B에만 의존하며 C에만 의존 할 수는 없다.

이는 모듈의 종속성 수를 크게 줄이므로 낮은 결합을 가능하게합니다. 결합은 개념 상 커플 링과는 다르지만 동일한 방식으로 달성됩니다. 모듈에 대한 종속성이 적을수록 해당 모듈에 대해 더 구체적이되어 응집력이 증가합니다. 또한 총 모듈 수가 증가하고 종속 모듈에 특화된 작업을 수행하는 데 더 전문화되어 (신 오브젝트와 달리)보다 일관된 시스템으로 직접 변환됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.