Questo è un esempio di Composizione o Aggregazione?

0

Comprendo il concetto alla base di Composition ('ha a') in cui la classe contenuta viene distrutta al termine della classe del contenitore. Allo stesso modo, ottengo l'aggregazione, che è una relazione "più sciolta" tra due classi, e la chiusura di un oggetto non dispone interamente dell'altro.

Il punto strong, per me, è in realtà scegliere queste relazioni in forma codificata.

Prendi ad esempio:

class Location   {
public Troll myTroll;
public Cave myCave;

public Location()
{
  myTroll = null;
  myCave = null;
}    
}
  • La posizione della classe viene istanziata in un'altra classe chiamata Simulazione. È usato come una matrice 2D di tipo Location, in cui potrei avere un troll o una grotta, ecc.

  • Nella classe Simulation, ci sono costruttori per creare nuove Cave e creare nuovi Troll. per esempio.

    private Location[,] Landscape;
    
    Landscape[x, y].Cave = new Cave();
    
    Landscape[x, y].Troll = new Troll();
    

Si può definire una relazione tra Location e Troll e Cave dal frammento sopra? Considero che Simulation e Troll e Cave siano un esempio di Composizione, ma è la Location a darmi il problema.

La mia tendenza, anche se molto dilettantesca, è di cercare generalmente l'istanziazione della classe, cioè. la nuova () Parola chiave, e questo mi direbbe se la sua composizione. (So che questo è un approccio errato)

    
posta user3396486 18.10.2016 - 01:46
fonte

1 risposta

4

Il problema nel tuo esempio è la classe stessa. Implica che ogni località abbia un troll e una grotta, il che è sicuramente scorretto. Di conseguenza, tu (e chiunque altro) farebbe fatica a determinare la relazione, poiché il punto di partenza stesso è fuorviante. Tornando a una descrizione più formale, se abbiamo una proprietà Has-A completa (composizione) o Uses-A 'Belongs-to' association (aggregazione), non funziona qui.

Un design migliore avrebbe ereditato la grotta dalla posizione ( Is-A ) e il troll ha un riferimento a una posizione ( Has-A ) - che è l'aggregazione.

    
risposta data 18.10.2016 - 02:00
fonte

Leggi altre domande sui tag