C ++: associazione, aggregazione e composizione [chiuso]

4

Sto iniziando a studiare OOAD e ho difficoltà a trovare un esempio di codice C++ che illustra come Association , Aggregation e Composition sono implementati a livello di programmazione. (Ci sono diversi post ovunque ma si riferiscono a C # o java). Ho trovato un esempio o due, ma sono tutti in conflitto con le istruzioni del mio istruttore e sono confuso.

La mia comprensione è questa in:

  • Associazione: Foo ha un puntatore all'oggetto Bar come membro dati
  • Aggregation: Foo ha un puntatore all'oggetto Bar e i dati di Bar sono copiati in profondità in quel puntatore.
  • Composizione: Foo ha un oggetto Bar come membro dati.

Ed è così che l'ho implementato:

//ASSOCIATION
class Bar
{
    Baz baz;
};
class Foo
{
    Bar* bar;
    void setBar(Bar* _bar)
    {
        bar=_bar;
    }
};

//AGGREGATION
class Bar
{
    Baz baz;
};
class Foo
{
    Bar* bar;
    void setBar(Bar* _bar)
    {
        bar = new Bar;
        bar->baz=_bar->baz;
    }
};


//COMPOSTION
class Bar
{
    Baz baz;
};
class Foo
{
    Bar bar;
    Foo(Baz baz)
    {
        bar.baz=baz;
    }
};

È corretto? Se no, allora come dovrebbe essere fatto invece? Sarebbe gradito se mi dessi anche un riferimento di un codice da un libro (in modo che io possa discutere con il mio istruttore)

    
posta Talha5389 11.09.2014 - 10:44
fonte

1 risposta

4

Ci sono molti modi per mappare i concetti OO di associazione , aggregazione e composizione al codice C ++. Questo è particolarmente vero per aggregazione , perché non c'è nemmeno un consenso su cosa significhi esattamente.

La tua mappatura suggerisce la seguente semantica, che non è sbagliata:

  • Associazione : Foo ha un puntatore all'oggetto Bar come membro dati, senza gestire l'oggetto Bar - > Foo sa di Bar
  • Composizione : Foo ha un oggetto Bar come membro dati - > Foo contiene una barra. Non può esistere senza di esso.
  • Aggregation : Foo ha un puntatore all'oggetto Bar e gestisce la durata di quell'oggetto - > Foo contiene una barra, ma può anche esistere senza di essa.

Come affermato, l'aggregazione è difficile qui perché, anche all'interno di UML, il significato di aggregazione non è cristallino. Un altro possibile significato di aggregazione è "Foo contiene un oggetto Bar che è condiviso con altri oggetti". Questo sarebbe tipicamente rappresentato in codice C ++ per mezzo di un std::shared_pointer o boost::shared_pointer .
Il significato che il tuo istruttore attribuisce a aggregazione deve essere discusso con lui.

    
risposta data 11.09.2014 - 11:06
fonte

Leggi altre domande sui tag