Agregação versus composição

195

Eu entendo qual composição está em OOP, mas não consigo ter uma ideia clara do que é Aggregation. Alguém pode explicar?

    
por Vinoth Kumar C M 24.03.2011 / 05:25
fonte

9 respostas

291

Regras simples:

  1. A "possui" B = Composição: B não tem significado ou propósito no sistema sem A
  2. Um "usa" B = Agregação: B existe independentemente (conceitualmente) de A

Exemplo 1:

Uma empresa é uma agregação de pessoas. Uma empresa é uma composição de contas. Quando uma empresa deixa de fazer negócios, suas contas deixam de existir, mas seu pessoal continua existindo.

Exemplo 2: (muito simplificado)

Um editor de texto possui um buffer (composição). Um editor de texto usa um arquivo (agregação). Quando o Editor de Texto é fechado, o Buffer é destruído, mas o Arquivo em si não é destruído.

    
por 24.03.2011 / 15:57
fonte
35

De link

Aggregation differs from ordinary composition in that it does not imply ownership. In composition, when the owning object is destroyed, so are the contained objects. In aggregation, this is not necessarily true. For example, a university owns various departments (e.g., chemistry), and each department has a number of professors. If the university closes, the departments will no longer exist, but the professors in those departments will continue to exist. Therefore, a University can be seen as a composition of departments, whereas departments have an aggregation of professors. In addition, a Professor could work in more than one department, but a department could not be part of more than one university.

Então - enquanto você tem uma relação de propriedade com a composição, o objeto de propriedade também é destruído quando o proprietário está - uma agregação (e os objetos contidos) pode existir independentemente.

-

Atualização: Desculpas - esta resposta é muito simplista em retrospectiva.

c.batt fornece uma excelente definição em sua resposta: Agregação versus composição

    
por 12.04.2017 / 09:31
fonte
20

Não há uma explicação única. Diferentes autores significam coisas diferentes por agregação. A maioria não significa nada de específico.

    
por 24.03.2011 / 10:58
fonte
15
  • Composição é uma associação

  • A agregação é uma associação

  • Composição é uma associação strong (se a vida do objeto contido depende totalmente do objeto contêiner, isso é chamado de associação strong)

  • A agregação é uma associação fraca (se a vida do objeto contido não depende do objeto contêiner, ela é chamada de associação fraca)

Exemplo:

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);
    } 
}
    
por 09.07.2013 / 09:24
fonte
11

Composição (mistura) é uma maneira de combinar objetos simples ou tipos de dados em tipos mais complexos. As composições são um bloco de construção crítico de muitas estruturas de dados básicas

A agregação (coleção) difere da composição comum, pois não implica em propriedade. Na composição, quando o objeto proprietário é destruído, os objetos contidos também são. Em agregação, isso não é necessariamente verdade

╔═══════════╦═════════════════════════╦═══════════════════════╗
║           ║       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 ║
╚═══════════╩═════════════════════════╩═══════════════════════╝

Ambos denotam relação entre objeto e diferem apenas em sua força.

NotaçõesUMLparadiferentestiposdedependênciaentreduasclasses

Composição:comoomecanismofazpartedocarro,orelacionamentoentreelesécomposição.AquiestácomoelessãoimplementadosentreasclassesJava.

publicclassCar{//finalwillmakesureengineisinitializedprivatefinalEngineengine;publicCar(){engine=newEngine();}}classEngine{privateStringtype;}

Agregação:comoaorganizaçãotemPersoncomofuncionários,orelacionamentoentreeleséAgregação.AquiestácomoelesseparecememtermosdeclassesJava

publicclassOrganization{privateListemployees;}publicclassPerson{privateStringname;}

Fonte

    
por 01.07.2015 / 07:28
fonte
6

agregação é uma coleção simples, como um saco de bolinhas

composição implica dependências internas / funcionais, como as dobradiças em uma caixa

carros passageiros agregados; eles entram e saem sem quebrar a funcionalidade do carro

os pneus são componentes; remova um e o carro não funciona mais corretamente

[nota: o estepe é um agregado!]

    
por 24.03.2011 / 15:09
fonte
1

Eu sempre vejo a composição como 'precisa de um', ou seja, um carro precisa de um mecanismo , e eu vejo a agregação como 'coisas relacionadas para um propósito'. Então, permanecendo com a analogia do carro, minha agregação pode ser representar uma jornada que pode envolver a aproximação de um carro e passageiros. A viagem não possui o carro ou os passageiros, estou agregando dados relacionados a um cenário específico. Quando a viagem termina, o carro e os passageiros continuam. Quando um carro é terminado, o carro e seu motor são normalmente destruídos juntos.

    
por 24.03.2011 / 10:52
fonte
0

Semanticamente, todos os conjuntos são feitos de subconjuntos, certo? Portanto:

  • A agregação é quando esses subconjuntos existem independentemente do pai configurado. Como um monitor pode ser desconectado do computador para ser conectado a outro.

  • A composição é quando esses subconjuntos dependem da existência do conjunto pai. Como uma folha é uma parte de uma árvore ou fígado é uma parte de um corpo.

Esses conceitos falam sobre o tipo de dependência entre dois objetos ou classes, conceitualmente. Diretamente em um programa, em uma agregação, quando o objeto pai é descartado, os objetos agregados também devem ser descartados. No mesmo cenário para uma composição, objetos filho compostos persistirão, então o objeto pai dispensa.

    
por 08.08.2014 / 20:55
fonte
-2

Como sobre este exemplo simples:

Uma matriz de objetos é uma composição. Uma matriz de ponteiros para objetos é uma agregação.

Se eu excluir o primeiro, seu conteúdo desaparece com ele. O segundo, por outro lado, pode desaparecer sem afetar a existência de seus membros, a menos que exista um método específico que exclua cada objeto quando seu ponteiro for excluído.

    
por 05.09.2014 / 16:03
fonte