2012-09-05 2 views
2

조금 혼란 스러울 정도로 나에게 계발하십시오.집계 또는 구성

  1. 내 수업에서 new 연산자를 사용하여 개체를 만들거나 Singleton을 사용하여 컴포지션을 만들면 어떻게됩니까?
  2. 팩토리 메서드를 호출하면 컴포지션도 변경됩니까?

답변

3

컴포지션과 집계는 구성 요소 개체 수명과 관련이 있으며 구성 요소 개체의 인스턴스화 방법과 관련이 없습니다. 포함 된 객체가 처리 될 때 구성 요소 객체가 삭제되면 Composition입니다. 구성 요소 개체가 계속 살 수있는 경우 집계입니다.

+0

똑바로하려면 BookShop 및 BookShopStuff 클래스 (그리고 Books, Newspapers ...와 같은 하위 클래스)가 있다고 가정 해 보겠습니다. BookShopStore의 각 객체는 BookShop 배열에 저장됩니다. 이 구성은 그때인가? 아니면 BookShop이 BookShopStuff 요소를 집계합니까? 나는 혼란 스럽다. – lunar

+0

좋아, 책이 좋다. 서점에없는 서점은 서점 없이도 계속 존재할 수 있습니까? 그렇다면 집계이고, 그렇지 않으면 작문입니다. – Dave

+0

BookShop이 모든 인스턴스가 보관되는 유일한 장소이기 때문에 존재할 수 없습니다. 그래서 그것은 구성입니다. – lunar

2

"구성"이라는 용어는 UML 및 OOP에서 약간 다른 의미를 갖습니다.

UML에서 컴포지션은 더 강력한 형태의 집계이며 일종의 "owns-a"연관입니다.

GoF 디자인 패턴 책에서는 OOP에서 상속에 비해 구성을 선호해야한다고 제안합니다. 이 경우 컴포지션이란 클래스를 상속하지 않고 클래스를 참조하여 기능을 제공한다는 의미입니다.

일부 용어가 섞여있는 것 같습니다. 팩토리 메소드를 생성하고 객체화하거나 호출하는 것은 그 자체로 구성되지 않습니다.