사이의 차이점에 대해 존재 얼마나 많은 혼란이 놀라운 부분 - 전체 - 협회 개념 응집 및 구성 . 주된 문제는 구성의 개념이 전체 없이는 부분이 존재할 수 없도록 전체와 부분 사이의 수명주기 종속성을 암시한다는 광범위한 오해 (전문 소프트웨어 개발자 및 UML 작성자 사이에서도)입니다. 그러나이 견해는 공유 할 수없는 부분과 부분-전체-연관이있는 경우도 있다는 사실을 무시하고 부분이 전체의 파괴에서 분리되어 살아남을 수 있습니다.
UML 사양 문서에서 "구성"이라는 용어의 정의는 항상 공유 할 수없는 부분을 의미했지만 "구성"의 정의 특성이 무엇인지, 그리고 단순히 선택적 특성이 무엇인지는 명확하지 않습니다. 새 버전 (2015 년 현재)에서도 UML 2.5는 "구성"이라는 용어의 정의를 개선하려는 시도 후에도 여전히 모호한 상태로 남아 있으며 비와 부분 전체 연결을 모델링하는 방법에 대한 지침을 제공하지 않습니다. 부분이 분리 될 수없고 전체가 함께 파괴되는 경우와는 반대로, 부분이 분리 될 수 있고 전체가 파괴 되어도 살아남을 수있는 공유 가능한 부분. 그들은 말한다
복합 객체가 삭제되면 객체 인 모든 부품 인스턴스도 함께 삭제됩니다.
그러나 동시에 그들은 또한 말합니다
부품 객체는 복합 객체가 삭제되기 전에 복합 객체에서 제거 될 수 있으므로 복합 객체의 일부로 삭제되지 않습니다.
이러한 혼동은 UML 정의가 불완전 함을 나타내며, 이는 컴포넌트와 컴포지트 간의 라이프 사이클 종속성을 고려하지 않습니다. 따라서 컴포넌트를 컴포지트에서 분리 할 수 없으므로 컴포지트가 파괴 될 때마다 소멸되어야 하는 << 분리 불가 >> 컴포지션에 대한 UML 스테레오 타입을 도입하여 UML 정의를 향상시킬 수있는 방법을 이해하는 것이 중요합니다 .
1) 구성
마찬가지로 마틴 파울러 설명했다 , 조성물의 특성의 주된 문제는 "오브젝트는 하나 개의 구성 관계의 일부분 일 수있다"이다. 이것은 Geert Bellekens 의 우수한 블로그 게시물 UML Composition vs Aggregation vs Association 에서도 설명됩니다 . 컴포지션의 이러한 정의 특성 ( 배타적 또는 공유 불가능한 부분 포함) 외에도 컴포지션에는 컴포지션과 해당 구성 요소 간의 수명주기 종속성이있을 수 있습니다. 실제로 이러한 종속성에는 두 가지 종류가 있습니다.
- 컴포넌트 가 항상 컴포지트에 연결 되어야하는 경우, 즉 컴포지션 라인의 컴포지트 측면에서 "정확히 1"다중성으로 표현되는 필수 컴포지트 가있는 경우에는 다시 사용해야합니다. 다른 컴포지트에 (또는 다시 연결) 현재 컴포지트가 파괴되면 파괴됩니다. 이는 아래 다이어그램과 같이
Person
와 사이의 구성으로 예시됩니다 Heart
. 심장은 소유자가 사망했을 때 파괴되거나 다른 사람에게 이식됩니다.
- 컴퍼넌트마다 분리 할 수없는 것이있다 환언 그 합성하거나로부터 분리 하고, 단지 그 다음, 구성 요소는 복합체가 파괴 될 때, 폐기되어야한다. 분리 부와 같은 조성물의 일례의 조성물
Person
및 Brain
.
요약하면 수명주기 종속성은 특정 구성 사례에만 적용되지만 일반적으로는 적용되지 않으므로 정의되는 특성이 아닙니다.
UML 사양에는 "복합 인스턴스가 삭제되기 전에 복합 인스턴스에서 일부가 제거 될 수 있으므로 복합 인스턴스의 일부로 삭제되지 않을 수 있습니다."라고 명시되어 있습니다. Car
- Engine
구성 의 예 에서 다음 다이어그램과 같이 자동차가 파괴되기 전에 엔진을 자동차에서 분리 할 수있는 경우가 분명합니다.이 경우 엔진이 파괴되지 않고 재사용 할 수 있습니다. 이것은 컴포지션 라인의 합성면에서 0 또는 1의 다중성을 의미합니다.
다중 복합 측의 조성물의 연결 단부 중 어느 하나 또는 0..1이고, 필수 성분은 합성이 있으면 사실에 따라 (a 복합체에 부착되어야한다) 여부. 구성 요소가 분리 불가능한 경우 이는 필수 구성 요소가 있음을 의미합니다.
2) 집계
집계는 전체의 일부를 다른 전체와 공유 할 수있는 부분-전체-관계의 의도 된 의미와 관련된 또 다른 특수한 형태의 연관입니다. 예를 들어, 다음 다이어그램에 표시된대로 클래스 DegreeProgram
와 의 집계를 모델링 할 수 있습니다 Course
. 코스는 학위 프로그램의 일부이고 코스는 둘 이상의 학위 프로그램간에 공유 될 수 있습니다 (예 : 공학 학위는 C를 공유 할 수 있음). 컴퓨터 과학 학위가있는 프로그래밍 과정).
그러나 공유 가능한 부분 이 있는 집계의 개념은 실제로 그다지 의미가 없으므로 구현에 아무런 영향을 미치지 않으므로 많은 개발자가 클래스 다이어그램에서 흰색 다이아몬드를 사용하지 않고 단순한 연결을 모델링하는 것을 선호합니다. 대신. UML 스펙은 "공유 집계의 정확한 의미는 애플리케이션 영역과 모델러에 따라 다릅니다"라고 말합니다.
다수 전체 측 집합체의 연관 단부는 임의의 수 (*) 일부에 속하거나 할 수 있기 때문에 수있다 공유 wholes의 임의의 수 중에서.