2009-04-08 21 views
22

In OOP, qual è la differenza tra la composizione (denotata da diamante riempito in UML) e l'associazione (denotata da diamante vuoto in UML) tra le classi. Sono un po 'confuso. Cos'è l'aggregazione? Posso avere un esempio convincente del mondo reale?Qual è la differenza tra relazione di composizione e associazione?

+3

Non si intende l'aggregazione anziché l'associazione? – Joey

+0

non sono diversi? –

+1

L'associazione non è uguale all'aggregazione; in UML, l'aggregazione è rappresentata con un diamante vuoto. – Rob

risposta

1

Di solito, composizione significa che la durata dell'oggetto contenuto è limitata da quella del contenitore, mentre l'associazione è un riferimento a un oggetto che può esistere indipendentemente.

Tuttavia, questa è solo la pratica che ho osservato. Odio ammetterlo, ma scavare attraverso le specifiche UML2 non è in cima alla mia lista di cose divertenti da fare!

1

Esistenza indipendente.

Una fattura è composta da elementi pubblicitari.

Che cos'è un elemento pubblicitario non presente in una fattura? È - beh - non è niente. Non può esistere indipendentemente.

D'altra parte, una fattura è associata a un cliente.

Il cliente ha un'esistenza indipendente, con o senza fattura.

Se le due cose hanno un'esistenza indipendente, possono essere associate.

Se una cosa non può esistere indipendentemente, allora fa parte di una composizione.

11

Possedere e utilizzare.

Composizione: l'oggetto con il riferimento possiede l'oggetto l'oggetto a cui fa riferimento ed è responsabile della sua "durata", della sua distruzione (e spesso creazione, sebbene possa essere inoltrata). Conosciuto anche come ha una relazione.

Associazione: l'oggetto con il riferimento utilizza l'oggetto a cui si fa riferimento, potrebbe non essere un utente esclusivo e non è responsabile per la durata dell'oggetto di cui fa riferimento. Conosciuto anche come utilizza una relazione.

L'OP commenti:

Si può fornire un esempio reale mondo. Inoltre, cos'è l'aggregazione? - Marc

Aggregazione: un'associazione che va da tutto a parte e che non può essere ciclica.

Esempi:

Composizione: un auto-ha un motore, una persona ha-un indirizzo. Fondamentalmente, deve avere, controlla la durata.

Associazione: un'Auto ha un Driver, qualche istanza di classe ha-un ErrorLogger. La durata non controllata, può essere condivisa.

Aggregazione: A DOM (modello oggetto documento, ovvero gli oggetti che compongono un albero di elementi HTML) Il nodo ha un (un array di) nodi figlio. Il nodo è il livello superiore (bene, più alto); esso "contiene" i suoi figli, non lo contengono.

+0

Puoi fornire un esempio reale. Inoltre, cos'è l'aggregazione? –

+1

L'auto-motore è aggregazione secondo Sommerville. La relazione has-a significa aggregazione e non composizione. La composizione è una parte della relazione. La "Persona ha un indirizzo" è anche un'aggregazione secondo http://www.c-sharpcorner.com/UploadFile/pcurnow/compagg07272007062838AM/compagg.aspx – Slazer

0

Composizione significa che una parte dello stato dell'entità è incapsulata da un altro tipo ma è parte concettualmente dello stato dell'entità. Ad esempio, potresti avere un tipo di indirizzo e un tipo di entità dipendente che include un indirizzo.

L'associazione indica che un tipo di entità è associato a un altro tipo di entità ma l'entità associata non è concettualmente parte dello stato dell'entità. Ad esempio, un dipendente può essere associato a un'azienda.

16

Qui andare un paio di esempi:

  • Io sono un dipendente di una società, e quindi mi sono associato a tale società. Io non ne faccio parte, né lo compongo, ma sono collegato ad esso, comunque.

  • Sono composto da organi che, a meno che non vengano trapiantati, moriranno con me. Questa è composizione, che è un legame molto forte tra gli oggetti. Fondamentalmente gli oggetti sono composti da altri oggetti. Il verbo dice tutto.

  • C'è anche un altro tipo di composizione meno legata, chiamata aggregazione. Un'aggregazione è quando gli oggetti sono composti da altri oggetti, ma i loro cicli di vita non sono necessariamente legati. Usando un esempio estremo, un giocattolo Lego è un'aggregazione di parti. Anche se il giocattolo può essere smontato, le sue parti possono essere ricomposte per creare un giocattolo diverso.

+6

+1 per l'esempio di lego ;-) – EricSchaefer

1

La composizione è una relazione più stretta dell'aggregazione. La composizione significa che qualcosa è così fortemente correlato a qualcos'altro che non possono sostanzialmente esistere indipendentemente, o se possono, vivono in contesti diversi.

Esempio di mondo reale: si definisce una finestra della GUI e quindi un campo di testo in cui scrivere qualcosa. Tra la classe che definisce la GUI e la classe che definisce il campo di testo c'è la composizione. Insieme, compongono un widget che può essere visto come un'entità a sé stante. Supponiamo di cancellare la finestra e di eliminare anche il campo di testo.

L'aggregazione è diversa, nel senso che il collegamento tra le due entità è temporaneo, instabile e occasionale. Un esempio reale. Supponiamo di avere un database di oggetti contenenti più istanze di dati. Ora si esegue un filtro per raccogliere le istanze di dati che obbediscono a un determinato criterio e le istanze risultanti vengono inserite in un elenco grafico in modo che l'utente possa vederle. Quando il widget grafico riceve gli oggetti, può formare un'aggregazione di queste entità e presentarle. Se l'utente chiude la finestra con l'elenco grafico e quest'ultimo viene eliminato, gli oggetti dati non devono essere cancellati. Forse vengono visualizzati da qualche altra parte, o ne hai ancora bisogno.

Inoltre, in generale, la composizione viene definita al momento della creazione. L'aggregazione viene invece definita successivamente nella durata dell'oggetto.

34

COMPOSIZIONE

Immaginate una società di software che si compone di diverse Business Unit (o dipartimenti) come bagagli BU, Networking BU. BU Automobile. La durata di vita di queste Business Unit è regolata dalla durata dell'organizzazione. In altre parole, queste Business Unit non possono esistere indipendentemente senza l'impresa. Questa è COMPOSIZIONE.(Vale a dire la società è composta da unità di business)

ASSOCIAZIONE

La società di software può avere ristoratori esterni che servono cibo ai dipendenti. Questi ristoratori NON fanno parte dell'azienda. Tuttavia, sono associati con l'azienda. I ristoratori possono esistere anche se la nostra azienda di software è chiusa. Possono servire un'altra impresa! Quindi la vita dei ristoratori non dipende dalla durata della ditta di software. Questo è tipico ASSOCIAZIONE

AGGREGAZIONE

consideri un'unità di produzione di autovetture. Possiamo pensare a Car come a un'entità intera e Car Wheel come parte della macchina. (a questo punto, può sembrare una composizione ... continua su) La ruota può essere creata settimane prima del tempo e può essere posizionata in un magazzino prima di essere posizionata su una macchina durante il montaggio. In questo esempio, l'istanza della classe Wheel vive chiaramente indipendentemente dall'istanza della classe Car. Quindi, a differenza della composizione, in aggregazione, i cicli di vita degli oggetti coinvolti non sono strettamente accoppiati.

+8

Quindi qual è la differenza tra associazione e aggregazione? – nawfal

+0

Bei esempi, ma potresti fornire una spiegazione generale? Capisco che la domanda non l'ha chiesto. Grazie. – chischaschos

+0

@nawfal, dall'esempio sopra sembra utilità indipendente di una parte senza intero – charany1

2

Credo che un esempio basato su codice possa aiutare a illustrare i concetti forniti dalle risposte di cui sopra.

import java.util.ArrayList; 

public final class AssoCia 
{ 
    public static void main(String args[]) 
    { 
     B b = new B(); 
     ArrayList<C> cs = new ArrayList(); 

     A a = new A(b, cs); 

     a.addC(new C()); 
     a.addC(new C()); 
     a.addC(new C()); 
     a.listC(); 
    } 
} 

class A 
{ 
    // Association - 
    // this instance has a object of other class 
    // as a member of the class. 
    private B b; 

    // Association/Aggregation - 
    // this instance has a collection of objects 
    // of other class and this collection is a 
    // member of this class 
    private ArrayList<C> cs; 

    private D d; 

    public A(B b, ArrayList<C> cs) 
    { 
     // Association 
     this.b = b; 

     // Association/Aggregation 
     this.cs = cs; 

     // Association/Composition - 
     // this instance is responsible for creating 
     // the instance of the object of the 
     // other class. Therefore, when this instance 
     // is liberated from the memory, the object of 
     // the other class is liberated, too. 
     this.d = new D(); 
    } 

    // Dependency - 
    // only this method needs the object 
    // of the other class. 
    public void addC(C c) 
    { 
     cs.add(c); 
    } 

    public void listC() 
    { 
     for (C c : cs) 
     { 
      System.out.println(c); 
     } 
    } 

} 

class B {} 

class C {} 

class D {} 
Problemi correlati