객체 지향 디자인과 관련된 구성이란 무엇입니까?
나는 "상속보다 작곡을 선호한다"는 많은 듣고이 사이트에서 읽었다.
그러나 Compositon은 무엇입니까? 나는 사람 : 포유류 : 동물이라는 점에서 상속을 이해하지만, 컴포지션의 정의를 어디에서 볼 수 없습니다. 누군가 나를 채워줄 수 있습니까?
합성은 단순한 유형을 결합하여 더 복잡한 유형을 만드는 사실. 귀하의 예에서 구성은 다음과 가변적입니다.
Animal:
Skin animalSkin
Organs animalOrgans
Mammal::Animal:
Hair/fur mammalFur
warm-blooded-based_cirulation_system heartAndStuff
Person::Mammal:
string firstName
string lastName
완전히 구성하고 모든 상속을 없애고 다음과 같이 보일 것입니다.
Animal:
Skin animalSkin
Organs animalOrgans
Mammal:
private Animal _animalRef
Hair/fur mammalFur
warm-blooded-based_cirulation_system heartAndStuff
Person:
private Mammal _mammalRef
string firstName
string lastName
방법의 장점이은 유형이다 Mammal
하고 Person
이전 부모의 인터페이스에 적합 할 필요가 없습니다. 심각한 수퍼 클래스를 변경하면 서브 클래스에 심각한 영향을 미칠 수 있기 때문에이 좋은 일 이 될 수 있습니다. 기존의 클래스의 개인 인스턴스를 통해 기존 액세스 할 수있는 속성 및 동작에 계속 액세스 할 수있는 경우 간단히 공용 메소드로 래핑 할 수 있습니다.
좋은 예제가있는 좋은 링크를 찾았습니다.
http://www.artima.com/designtechniques/compoinh.html구성은 전체를 구성하는 부분입니다. 자동차에는 바퀴, 엔진 및 좌석이 있습니다. 상속은 "is a"관계입니다. 구성은 "있음"관계입니다.
클래스에 행동을 부여하는 세 가지 방법이 있습니다. 그 동작을 클래스에 쓸 수 있습니다. 원하는 동작을 가진 클래스에서 상속 할 수 있습니다. 또는 원하는 동작을 가진 클래스를 필드 또는 멤버 변수로 클래스에 통합 할 수 있습니다. 마지막 두 개는 코드 도구의 형태를 마지막 두 개는 일반적으로 구성입니다. 실제로 클래스에 원하는 동작을 제공합니다. 필드에서 메서드를 호출해야하지만 클래스 디자인에 대한 제약이 적고 테스트가 더 내부 코드를 디버그하기가 더 많은 것입니다. 상속은 그 자리를 차지하지만 구성이 선호되어야합니다.
class Engine
{
}
class Automobile
{
}
class Car extends Automobile // car "is a" automobile //inheritance here
{
Engine engine; // car "has a" engine //composition here
}
구성 -개체의 기능은 서로 다른 클래스의 집합체로 구성됩니다. 실제로는 작업이 지연되는 다른 클래스에 대한 포인터를 보유하는 것을 의미합니다.
상속 -객체의 기능은 자체 기능과 상위 클래스의 기능으로 구성됩니다.
상속보다 컴포지션이 선호되는 이유에 대해서는 원-타원 문제를 살펴보십시오 .
컴포지션의 예는 다른 클래스에서 상속하는 대신 클래스의 인스턴스가있는 경우입니다.
이 페이지에는 사람들이 "상속보다 구성을 선호"하는 이유를 몇 가지 예와 함께 설명하는 좋은 기사가 있습니다.
'ProgramingTip' 카테고리의 다른 글
반사가 어떻게 코드 냄새로 이어지지 않습니까? (0) | 2020.11.23 |
---|---|
Maven 프로젝트에 시스템 속성 지정 (0) | 2020.11.23 |
테스트 및 개발에 사용할 수있는 SMTP 서버-실제로 메일을 배달하지 않습니다. (0) | 2020.11.23 |
Git- 원격 저장소에서 파일을 삭제하는 방법 (0) | 2020.11.23 |
크기에 맞게 확대 : HTML에 PDF 포함 (0) | 2020.11.23 |