"상속보다 유리한 구성"에 대해 많이 듣습니다 (이 사이트에서 읽음).객체 지향 디자인과 관련된 구성은 무엇입니까?
하지만 Compositon은 무엇입니까? 저는 인간의 관점에서 상속을 이해합니다 : 포유 동물 : 동물,하지만 어디서나 Compostion의 정의를 볼 수는 없습니다. 누군가 나를 채울 수 있습니까?
"상속보다 유리한 구성"에 대해 많이 듣습니다 (이 사이트에서 읽음).객체 지향 디자인과 관련된 구성은 무엇입니까?
하지만 Compositon은 무엇입니까? 저는 인간의 관점에서 상속을 이해합니다 : 포유 동물 : 동물,하지만 어디서나 Compostion의 정의를 볼 수는 없습니다. 누군가 나를 채울 수 있습니까?
작문은 간단한 유형을 결합하여 더 복잡한 유형을 만드는 것을 말합니다. 당신의 예에서, 구성은 수 :
이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
이 방법의 장점은 것입니다 :
Animal:
Skin animalSkin
Organs animalOrgans
Mammal::Animal:
Hair/fur mammalFur
warm-blooded-based_cirulation_system heartAndStuff
Person::Mammal:
string firstName
string lastName
당신이 같을 것이다 완전히 구성을 이동 (모든 상속 제거) 원한다면 Mammal
및 Person
유형은 이전 상위의 인터페이스를 준수 할 필요가 없습니다. 이 은 일 수 있습니다. 수퍼 클래스 변경이 서브 클래스에 심각한 영향을 미칠 수 있기 때문에 좋은 일이 될 수 있습니다. 그들은 여전히 이러한 클래스의 private 인스턴스를 통해 이러한 클래스의 속성 및 동작에 액세스 할 수 있으며 이전의 수퍼 클래스 동작을 공개하려는 경우 공용 메서드로 간단히 래핑 할 수 있습니다. 클래스에 동작을 제공하는 세 가지 방법이 있습니다 http://www.artima.com/designtechniques/compoinh.html
구성은 단순히 전체를 구성하는 부분입니다. 자동차에는 바퀴, 엔진 및 좌석이 있습니다. 상속은 "관계"입니다. 작문은 "관계가있다". 다른 클래스 내에서 클래스의 인스턴스가 어디
그리고 집계는 ... 관계입니다. –
집계는 단순한 구성 일 수도 있고, 비슷한 물건 (예 : 자동차의 차륜)의 모음 일 경우 컬렉션으로 처리 될 수도 있습니다.자동차는 4 개의 개별 바퀴를 가질 수 있으며 고유하게 식별되거나 바퀴 집합을 가질 수 있습니다. 사용법에 따라 다릅니다. 컬렉션 클래스를 사용하는 경우 컬렉션 자체가 집합입니다. –
구성의 예는 대신에서
This 페이지를 상속이며, 사람들의 몇 가지 예에 "상속 이상의 찬성 구성"라고 이유를 설명하는 좋은 기사를 가지고 왜.
* 다른 클래스 [C2]의 클래스 [C2] 인스턴스가 아니라 다른 클래스의 ** 인스턴스 ** 내의 클래스의 인스턴스 **입니다. 전자는 C1을 정의 할 때 C2를 인스턴스화 한 것처럼 오해 할 수 있습니다. 공통적이지 않아야합니다. –
:
은 여기 좋은 예제와 함께 좋은 링크를 발견했다. 클래스에 해당 동작을 작성할 수 있습니다. 원하는 동작을 가진 클래스에서 상속받을 수 있습니다. 또는 원하는 동작이있는 클래스를 필드 또는 멤버 변수로 클래스에 통합 할 수 있습니다. 마지막 두 개는 코드 재사용의 형태를 나타내며, 마지막 하나는 일반적으로 선호됩니다. 실제로 클래스에 원하는 동작을 제공하지는 않지만 - 여전히 필드에서 메서드를 호출해야하지만 클래스 디자인에 대한 제약이 적어지고 테스트가 쉽고 코드를 쉽게 디버깅 할 수 있습니다. 상속은 그 자리를 차지하고 있지만, 구성이 선호되어야합니다.+1 : 작곡은 킹이다. –
class Engine
{
}
class Automobile
{
}
class Car extends Automobile // car "is a" automobile //inheritance here
{
Engine engine; // car "has a" engine //composition here
}
구성 - 객체의 기능이 다른 클래스의 집합체로 구성되어 있습니다. 실제로 이것은 작업이 연기되는 다른 클래스에 대한 포인터를 보유한다는 것을 의미합니다.
상속 - 개체의 기능은 자체 기능과 부모 클래스의 기능으로 구성됩니다.
왜 컴포지션이 상속보다 선호되는지에 대해서는 Circle-ellipse problem을 살펴보십시오.
이렇게 말 할 수 있습니다 : "작곡은 Class A에서 Class B를 서브 클래 싱하는 대신 Class B 안에 객체를 생성 할 때입니다. ? – thesummersign
오. 좋아, 나중에 w69rdy가 대답했다. 네, 그렇게 말할 수 있습니다. – thesummersign