2011-11-10 2 views
5

클래스 다이어그램을 디자인 할 때 컴포지션에 "has-a"관계가 있지만 Aggregation은 알고있는 것을 이해하는 데 어려움을 겪고 있습니까 ?? 나는 그것이 무엇인지 전혀 모른다. 클래스 다이어그램에서 컴포지션을 사용하는 것을 언제 알 수 있습니까? 클래스 다이어그램에서 집계를 사용하는 것을 언제 알 수 있습니까? 예를 들어 주시면 감사하겠습니다.클래스 다이어그램의 작곡과 집계

답변

21

집합과 구성의 주요 차이점은 "has-a"관계의 속성입니다. 그것은 강하고 약한 것입니다.

집계 "has-a"관계는 "약한 유형"입니다. 약한 것은 집합 자의 연결된 구성 요소가 집합 생명주기에서 존속하거나 다른 방법으로 액세스 될 수 있음을 의미합니다. 간단한 예가 회원으로있는 축구 클럽입니다. 클럽이 황폐 해지면 여전히 회원이 생겨나게됩니다. 실제로 다른 클럽의 회원이되어 살아 남을 수 있습니다.

"has-a"관계는 "strong-type"입니다. 강한 의미는 사람이 다른 사람과 함께 존재할 수 없다는 것입니다. 구성 요소의 수명주기는 "상위"에 직접 연결됩니다. 예를 들어 방이있는 집이 있습니다. 집을 찢기로 결정하면 방도 잃어 버릴 것입니다.

어쩌면 조금 추상적 일 수도 있지만 그 생각은 그 뒤에 있다고 생각합니다.

+0

나는 묻는 것을 잊었다, 협회는 어떨까요? – user962206

0

이전 질문에 대한 답변보기 here, herehere.

개인적으로 나는 집계를 사용하지 않습니다. 의미론이 너무 약해서 유용하지 않습니다. 그것은 해결할 수있는 것보다 많은 문제를 야기합니다. 간단한 바이너리 연관과 구별되는 명확하고 잠재적으로 유용한 속성이있는 곳은 단 한 곳입니다 (각주 참조).

컴포지션은 불변성 및 수명주기 관리에 중요한 속성을 정의하므로 유용 할 수 있습니다 (위의 첫 번째 링크 참조). 저는 Aggregation을 사용할 필요없이 오랫동안 아주 행복하게 살아 왔습니다.

hth.

각주. 재귀 트리 관계를 모델링해야하는 경우 집계를 적용 할 수 있습니다 (예 : 부분은 재귀 적으로 하위 파트로 분해됩니다. 집계에는 순환 관계가 없어서 부품이 직접 또는 간접적으로 자체의 하위 부분이 될 수 없다고합니다. 그러나 모델을 읽는 대부분의 사람들은 그것을 알지 못할 것입니다. - 덧글을 달아주세요. 즉, 바이너리 연결을 고수하고 집계 사용의 혼란을 피할 수 있습니다.

관련 문제