집계와 구성
On 2월 12, 2021 by adminOOP에서 구성이 무엇인지 이해하지만 집계가 무엇인지 명확하게 알 수 없습니다. 누군가 설명 할 수 있습니까?
답변
간단한 규칙 :
- A “소유”B = 구성 : B는 A없이 시스템에서 의미 나 목적이 없습니다
- A “사용”B = 집계 : B는 A와 독립적으로 (개념적으로) 존재합니다.
예 1 :
회사는 사람들의 집합체입니다. 회사는 계정의 구성입니다. 회사가 비즈니스를 중단하면 계정은 사라지지만 직원은 계속 존재합니다.
예 2 : (매우 단순화 됨)
텍스트 편집기는 버퍼 (구성)를 소유합니다. 텍스트 편집기는 파일 (집계)을 사용합니다. 텍스트 편집기가 닫히면 버퍼는 파괴되지만 파일 자체는 파괴되지 않습니다.
코멘트
- 자동차는 집합체이거나 부분의 구성?
- 그리고 집계는 두 종류의 엔티티 간의 다른 관계와 어떻게 다른가요?
- @reinierpost 현실 에서 자동차는 부품의 집합, 부품은 단순히 분자의 집합입니다 … 그러나 모델 에서는 모든 것이 귀하의 요구 사항에 달려 있습니다. 자동차와 관계없이 수명을 추적 할 수 있도록 엔진을 별도의 개체로 취급하는 것이 중요합니까? 다른 차에서 똑같은 엔진을 재사용 할 수 있습니까? 그렇다면 아마도 집계를 원할 것입니다. 그렇지 않으면 ‘ 자동차의 일부가 아닌 ‘ 엔진에 관심이없고 엔진 재사용에 관심이 없기 때문에 구성을 원합니다. .
- 완벽한 이해를위한 구현 사례가 누락 된 것은 …
- 회사가 사업을 중단하면 직원은 어떻습니까? 직원과 사람은 서로 다른 실체 죠? 그렇다면 회사가 직원의 구성이라고 말할 수 있습니까?
답변
From http://en.wikipedia.org/wiki/Object_composition
집계는 의미가 없다는 점에서 일반 구성과 다릅니다. 소유권. 구성에서 소유 객체가 파괴되면 포함 된 객체도 파괴됩니다. 집계에서 이것이 반드시 사실은 아닙니다. 예를 들어 한 대학은 다양한학과 (예 : 화학)를 소유하고 있으며 각학과에는 여러 교수가 있습니다. 대학이 문을 닫으면 부서는 더 이상 존재하지 않지만 해당 부서의 교수는 계속 존재합니다. 따라서 대학은학과의 구성으로 볼 수 있지만학과에는 교수가 모여 있습니다. 또한 교수는 두 개 이상의학과에서 일할 수 있지만 한학과는 두 개 이상의 대학에 속할 수 없습니다.
그렇습니다. 소유자가있는 경우 소유 한 개체의 소유권 관계도 소멸됩니다. 집합 (및 포함 된 개체)은 독립적으로 존재할 수 있습니다.
–
업데이트 : 사과-이 답변 돌이켜 보면 너무 단순합니다.
@Curtis Batt는 그의 대답에 탁월한 정의를 제공합니다. 집계 vs 구성
주석
- 예에서 인용 한 구성은 일대 다이고 집계에는 일대 다 관계가 내포되어 있습니다. 집계를위한 다 대다 관계 여야합니다 (선생님이 여러 부서에서 가르 칠 수 있다고 가정 할 수 있음). 부서는 여러 대학의 일부가 될 수 없습니다. 구성은 소유권을 의미하지만 집계는 관계를 넘어서는 것이 아닙니다. 인용문은 정확하지만 주석은 아닙니다.
- 파괴와는 아무 관련이 없습니다! UML은 가비지 수집 시스템을 정의하지 않습니다.
- 나는 위키피디아 링크가 반사적 업 보트를 받고 있다고 생각하지만 이것은 끔찍한 정의입니다. @bold가 이러한 관계가 GC와 관련이 없다고 지적했듯이. 이것은 또한 물체가 두 개의 의족을 연결하는 볼 조인트의 공과 같이 다른 두 물체의 구성 요소 일 때도 분리됩니다. 구성 요소 관계는 기능적 의존성에 관한 것입니다.
- 내 대답이 심각하게 부족하다는 데 동의하지만 WikiPedia 기사도 그렇습니다 …
- 구성과 집계의 차이는 분명합니다. 집계의 문제는 ‘ 일반 연결과 어떻게 다른지 명확하지 않다는 것입니다.
답변
-
작품은 연결입니다.
-
집계는 연결입니다.
-
구성은 강력한 연결입니다 (포함 된 개체의 수명이 컨테이너 개체에 전적으로 의존하는 경우 강력한 연관성이라고 함)
-
집계는 약한 연관입니다 (포함 된 객체의 수명이 컨테이너 객체에 의존하지 않는 경우 약한 연관성)
예 :
class Contained { public void disp() { System.out.println("disp() of Contained A"); } } public class Container { private Contained c; //Composition Container() { c = new Contained(); } //Association public Contained getC() { return c; } public void setC(Contained c) { this.c = c; } public static void main(String[] args) { Container container = new Container(); Contained contained = new Contained(); container.setC(contained); } }
댓글
- 구성도 집계도 아닌 집계와 연결의 차이점은 무엇입니까?
답변
단일 설명이 없습니다. 작성자마다 집계에 따라 다른 의미가 있습니다. 대부분의 경우 구체적인 내용을 의미하지는 않습니다.
댓글
- 이 정답입니다. 저는 ‘ 두 권의 책을 읽었으며 그중 하나는 Martin Fowler ‘ s UML Distilled 입니다.
- martinfowler.com/bliki/AggregationAndComposition.html
답변
구성 (혼합)은 간단한 개체 또는 데이터 유형을 결합하는 방법입니다. 더 복잡한 것으로. 구성은 많은 기본 데이터 구조의 중요한 구성 요소입니다.
집계 (컬렉션)는 일반 구성과 다릅니다. 소유권을 의미하지 않는다는 점에서. 구성에서 소유 객체가 파괴되면 포함 된 객체도 파괴됩니다. 집계에서 이것은 반드시 사실은 아닙니다.
╔═══════════╦═════════════════════════╦═══════════════════════╗ ║ ║ Aggregation ║ Composition ║ ╠═══════════╬═════════════════════════╬═══════════════════════╣ ║ Life time ║ Have their own lifetime ║ Owner"s life time ║ ║ Relation ║ Has ║ part-of ║ ║ Example ║ Car has driver ║ Engine is part of Car ║ ╚═══════════╩═════════════════════════╩═══════════════════════╝
두 클래스 간의 서로 다른 종류의 종속성에 대한 UML 표기법
Composition : Engine은 Car의 일부이므로 이들 간의 관계는 Composition입니다. 다음은 Java 클래스간에 구현되는 방법입니다.
public class Car { //final will make sure engine is initialized private final Engine engine; public Car(){ engine = new Engine(); } } class Engine { private String type; }
집계 : Organization은 Person을 직원으로 가지고 있으므로 이들 간의 관계는 Aggregation입니다. 다음은 Java 클래스 측면에서 어떻게 보이는지입니다.
public class Organization { private List employees; } public class Person { private String name; }
댓글
- 이것이 ‘ 이전 12 개 답변에서 얻은 점수와 설명에 비해 상당한 것을 제공하지 않는 것 같습니다.
- 도서관 없이도 책이 존재할 수 있습니다. 나쁜 예!
- 여기 직원 목록은 조직 개체의 일부입니다. 어떻게 집계가 될 수 있습니까?
- 연관이 집계와 어떻게 다른가요?
- 이 답변이 마음에 듭니다. 마침내 집계와 구성의 차이점이 무엇인지 제대로 설명했습니다.
답변
집계는 간단합니다. 구슬 가방처럼 수집
구성은 상자의 경첩처럼 내부 / 기능적 종속성을 의미합니다.
자동차는 승객을 모 읍니다. 자동차의 기능을 손상시키지 않고 승하차합니다.
타이어는 구성품입니다. 하나를 제거하면 자동차가 더 이상 제대로 작동하지 않습니다.
[참고 : 스페어 타이어는 집합체입니다! ]
답변
나는 항상 구도를 “필요한 것”으로 간주합니다. 즉, 자동차는 필요한 것 엔진을 사용하고 집계를 “목적과 관련된 것”으로 간주합니다. 따라서 자동차 비유를 유지하면서 내 집계는 자동차와 승객을 함께 모으는 여정을 나타내는 것일 수 있습니다. 여정은 자동차를 소유하지 않거나 승객 여러분, 저는 특정 시나리오와 관련된 데이터를 집계하고 있습니다. 여행이 끝나면 차와 승객은 계속됩니다. 자동차가 종료되면 자동차와 엔진은 일반적으로 함께 파괴됩니다.
답변
이 간단한 예는 어떻습니까? :
객체 배열은 컴포지션입니다. 객체에 대한 포인터 배열은 집계입니다.
첫 번째 항목을 삭제하면 해당 내용이 함께 사라집니다. 두 번째 항목은 반면 포인터가 삭제 될 때 각 개체를 삭제하는 특정 메서드가 없으면 멤버 존재에 영향을주지 않고 사라질 수 있습니다.
코멘트
- 이것은 ‘ 이전 11 개의 답변에서 이루어지고 설명 된 점에 대해 실질적인 내용을 추가하지 않는 것 같습니다.
- 정중하게 동의하지 않습니다, @gnat. 이것은 방법에 대한 유용한 예입니다. 사람들은 사례를 통해 더 잘 배웁니다.(포인터 멤버가 집계 일 가능성이 있고 오브젝트 멤버가 컴포지션 일 가능성이 있다는 내 이해를 확인하기 위해 여기에 왔습니다. 이것이 바로이를 해결하는 유일한 대답입니다.)
Answer
의미 상 모든 세트는 하위 집합으로 구성됩니다. 따라서 :
-
집계는 이러한 하위 집합이 아버지 집합과 독립적으로 존재하는 경우입니다. 모니터를 컴퓨터에서 분리하여 다른 모니터에 연결할 수 있습니다.
-
구성은 이러한 하위 집합이 아버지 세트의 존재에 따라 달라지는 경우입니다. 잎은 나무의 일부이거나 간은 신체의 일부입니다.
이 개념은 개념적으로 두 개체 또는 클래스 간의 종속성 종류에 대해 설명합니다. 프로그램에서 직접, 집계에서, 아버지 개체가 삭제 될 때 집계 개체도 삭제되어야합니다. 컴포지션에 대한 동일한 시나리오에서 합성 아들 개체가 지속 된 다음 아버지 개체가 분배됩니다.
답글 남기기