카테고리 보관물: 소프트웨어

소프트웨어

집계 대 구성 무엇인지 이해하지만 집계가 무엇인지에 대한 명확한

OOP의 구성이 무엇인지 이해하지만 집계가 무엇인지에 대한 명확한 아이디어를 얻을 수 없습니다. 누군가 설명 할 수 있습니까?



답변

간단한 규칙 :

  1. A “소유자”B = 구성 : B는 A가없는 시스템에서 의미 나 목적이 없습니다.
  2. A “사용”B = 집계 : B는 A와 독립적으로 (개념적으로) 존재합니다.

예 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;
}

출처


답변

집계는 구슬처럼 간단한 컬렉션입니다.

구성은 상자의 경첩과 같은 내부 / 기능적 종속성을 의미합니다.

자동차는 승객을 모으고; 그들은 자동차의 기능을 손상시키지 않고 들어오고 나갑니다

타이어는 구성 요소입니다. 하나를 제거하면 자동차가 더 이상 제대로 작동하지 않습니다

[참고 : 스페어 타이어는 골재입니다!]


답변

나는 항상 ‘필요한 a’, 즉 자동차 엔진을 필요로하는 구성을 보고, 집계를 ‘목적과 관련된 것’으로 본다. 따라서 자동차 비유를 유지하면서 자동차와 승객을 모으는 여행을 대표 할 수도 있습니다. 여행은 자동차 또는 승객을 소유하지 않으며 특정 시나리오와 관련된 데이터를 집계하고 있습니다. 여행이 완료되면 자동차와 승객은 계속 운행합니다. 자동차가 끝나면 자동차와 엔진은 일반적으로 함께 파괴됩니다.