OOP의 구성이 무엇인지 이해하지만 집계가 무엇인지에 대한 명확한 아이디어를 얻을 수 없습니다. 누군가 설명 할 수 있습니까?
OOP의 구성이 무엇인지 이해하지만 집계가 무엇인지에 대한 명확한 아이디어를 얻을 수 없습니다. 누군가 설명 할 수 있습니까?
답변:
간단한 규칙 :
예 1 :
회사는 사람들의 집합입니다. 회사는 계정 구성입니다. 회사가 사업을 중단하면 해당 계정은 존재하지 않지만 직원은 계속 존재합니다.
예 2 : (매우 단순화)
텍스트 편집기는 버퍼 (구성)를 소유합니다. 텍스트 편집기는 파일 (집계)을 사용합니다. 텍스트 편집기가 닫히면 버퍼는 파괴되지만 파일 자체는 파괴되지 않습니다.
에서 http://en.wikipedia.org/wiki/Object_composition
집계는 소유권을 의미하지 않는다는 점에서 일반적인 구성과 다릅니다. 컴포지션에서 소유 오브젝트가 파괴되면 포함 된 오브젝트도 파괴됩니다. 집계에서 이것은 반드시 사실이 아닙니다. 예를 들어, 대학에는 다양한 부서 (예 : 화학)가 있으며 각 부서에는 여러 명의 교수가 있습니다. 대학이 문을 닫으면 해당 부서는 더 이상 존재하지 않지만 해당 부서의 교수는 계속 존재합니다. 따라서 대학은 부서 구성으로 볼 수 있지만 부서에는 교수가 모여 있습니다. 또한 교수는 둘 이상의 부서에서 일할 수 있지만 부서는 둘 이상의 대학에 속할 수 없습니다.
따라서 컴포지션과의 소유권 관계가 있지만 소유자가있는 경우 소유 한 개체도 소멸됩니다. 집계 (및 포함 된 개체)는 독립적으로 존재할 수 있습니다.
-
업데이트 : 사과-이 답변은 뒤늦게 너무 단순합니다.
c.batt는 그의 답변에서 우수한 정의를 제공합니다. 집계 vs 구성
하나의 설명이 없습니다. 저자마다 집계에 따라 다른 의미가 있습니다. 대부분은 실제로 특정 내용을 의미하지는 않습니다.
작곡은 협회입니다
집계는 협회입니다
구성이 강력한 연관성 (포함 된 오브젝트의 수명이 컨테이너 오브젝트에 전적으로 의존하는 경우이를 강력한 연관이라고 함)
집계는 약한 연결 (포함 된 개체의 수명이 컨테이너 개체에 의존하지 않는 경우 약한 연결이라고 함)
예:
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);
}
}
컴포지션 (혼합)은 간단한 개체 또는 데이터 형식을보다 복잡한 개체로 결합하는 방법입니다. 컴포지션은 많은 기본 데이터 구조의 중요한 구성 요소입니다.
집계 (수집)는 소유권을 의미하지 않는다는 점에서 일반적인 구성과 다릅니다. 컴포지션에서 소유 오브젝트가 파괴되면 포함 된 오브젝트도 파괴됩니다. 집계에서 이것은 반드시 사실이 아닙니다
╔═══════════╦═════════════════════════╦═══════════════════════╗
║ ║ 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 표기법
구성 : 엔진은 자동차의 일부이므로 엔진 간의 관계는 구성입니다. 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;
}
집계 : 조직에는 Person이 직원으로 있으므로 관계는 집계입니다. 다음은 Java 클래스 측면에서 어떻게 보이는지입니다.
public class Organization {
private List employees;
}
public class Person {
private String name;
}
의미 적으로 모든 세트는 서브 세트로 구성됩니다. 따라서:
이러한 하위 집합이 아버지 집합과 독립적으로 존재할 때 집계됩니다. 모니터를 컴퓨터에서 분리하여 다른 컴퓨터에 연결할 수 있습니다.
구성은 이러한 하위 집합이 아버지 집합의 존재에 따라 달라집니다. 잎은 나무의 일부이거나 간은 신체의 일부입니다.
이 개념들은 개념적으로 두 객체 또는 클래스 사이의 의존성에 대해 이야기합니다. 아버지 개체가 처리 할 때 프로그램에서 직접 집계에서 집계 개체도 함께 배치해야합니다. 컴포지션의 동일한 시나리오에서 복합 아들 객체가 지속되고 아버지 객체가 분배됩니다.
이 간단한 예는 어떻습니까?
객체 배열은 컴포지션입니다. 객체에 대한 포인터 배열은 집계입니다.
첫 번째 것을 삭제하면 내용이 사라집니다. 반면에 두 번째 객체는 포인터가 삭제 될 때 각 객체를 삭제하는 특정 방법이 없으면 멤버 존재에 영향을 미치지 않고 사라질 수 있습니다.