ProgramingTip

객체 지향 디자인과 관련된 구성이란 무엇입니까?

bestdevel 2020. 11. 23. 19:46
반응형

객체 지향 디자인과 관련된 구성이란 무엇입니까?


나는 "상속보다 작곡을 선호한다"는 많은 듣고이 사이트에서 읽었다.

그러나 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

}

구성 -개체의 기능은 서로 다른 클래스의 집합체로 구성됩니다. 실제로는 작업이 지연되는 다른 클래스에 대한 포인터를 보유하는 것을 의미합니다.

상속 -객체의 기능은 자체 기능과 상위 클래스의 기능으로 구성됩니다.

상속보다 컴포지션이 선호되는 이유에 대해서는 원-타원 문제를 살펴보십시오 .


컴포지션의 예는 다른 클래스에서 상속하는 대신 클래스의 인스턴스가있는 경우입니다.

페이지에는 사람들이 "상속보다 구성을 선호"하는 이유를 몇 가지 예와 함께 설명하는 좋은 기사가 있습니다.

참고 URL : https://stackoverflow.com/questions/3441090/what-is-composition-as-it-relates-to-object-oriented-design

반응형