2010-04-24 15 views
7

Ho letto alcuni post sulle differenze tra queste 3 relazioni e penso di aver capito il punto.come vengono scritti l'associazione, l'aggregazione e la composizione?

Mi chiedo solo, sono tutti scritti così durante la codifica?

domanda 1: tutti e 3 sono solo un valore del tipo di oggetto in una variabile di istanza?

class A { 
    public $b = '' 

    public function __construct($object) { 
     $this->b = $object // <-- could be a association, aggregation or a composition relation? 
    } 
} 

domanda 2: deve essere una variabile di istanza o può essere statica?

class A { 
    public static $b = '' // <-- nothing changed? 

    public function __construct($object) { 
     $this->b = $object 
    } 
} 

domanda 3: c'è una differenza in cui l'oggetto è stato creato?

tendo a pensare che composizione oggetto viene creato all'interno dell'oggetto:

class A { 
    public $b = '' 

    public function __construct() { 
     $this->b = new Object // is created inside the object 
    } 
} 

e aggregazione/associazione viene fatto passare attraverso un costruttore o un altro metodo:

class A { 
    public $b = '' 

    public function __construct($object) { // passed through a method 
     $this->b = $object 
    } 
} 

domanda 4: perché/quando è importante saperlo. devo commentare un oggetto all'interno di un altro di quale relazione si tratta o lo fai in un diagramma UML?

qualcuno potrebbe far luce su queste domande.

grazie!

risposta

6

Hai ragione che questi sono in genere realizzati come riferimenti a oggetti, che naturalmente sono di solito solo campi membri di alcune classi. Questo è solo perché è naturale in un sistema orientato agli oggetti, questo può mappare ad altre cose in contesti diversi, ad es. chiavi esterne in un database relazionale.

Come menzionato da @erisco, le specifiche della relazione possono essere prese solo nel contesto del modello generale. Ad esempio, possiamo leggere una relazione di composizione tra un ordine d'acquisto e una riga d'ordine come questa (ad esempio): un ordine d'acquisto comprende una o più righe d'ordine.

Io di solito interpreto i tre si dà come segue:

  1. Association: Un sa di B, B ha un significato a sé stante.
  2. Aggregazione: A include B, B è esternamente identificabile e può esistere in base ai propri meriti.
  3. Composizione: A comprende B, B non è esternamente identificabile o non ha significato al di fuori di questa composizione.

Detto questo, ho visto questi utilizzati per significare più o meno tutto ciò che può essere sognato (e ci sono molto probabilmente le persone su così che non saranno d'accordo con la mia valutazione!) In modo da prendersi cura nell'interpretazione di qualcun altro diagrammi: -) Le convenzioni di cui sopra mi hanno servito bene ma YMMV.

Domanda 2: un riferimento statico fornirebbe un'associazione comune tra le istanze, ma è solo un modo per implementarlo e potrebbe sorprendere i consumatori.

+0

quindi il linguaggio stesso non può interpretare la relazione tra 2 oggetti. viene mostrato nel diagramma UML solo per noi programmatori per capire quali sono le relazioni tra questi oggetti giusto? perché mi stavo chiedendo se c'è un modo specifico di codificare queste relazioni, ma sembra non essere il caso. questa relazione dovrebbe essere digitata nel codice come commento o solo in UML? –

2

Wikipedia: Class Diagrams probabilmente ha le tue migliori definizioni. Nessuno dei tuoi esempi distingue tra associazione, aggregazione o composizione. Senza alcuna definizione di cosa sia A o di cosa sia B, non esiste una definizione di quale sia la loro relazione. Come si ottiene il riferimento all'altro oggetto è irrilevante per i diagrammi delle classi.

0

Come clearly stated in php.net:

Un Association è una composizione di parti costruite in modo indipendente e visibili esternamente. Quando associamo classi o oggetti, ognuno mantiene un riferimento a quelli a cui è associato.

Quando associamo le classi staticamente a, una classe conterrà un riferimento a un'istanza dell'altra classe.

Possiamo anche associare le istanze in fase di esecuzione da passando un riferimento in un costruttore (o qualsiasi altro metodo), che ci consente di modificare dinamicamente la relazione di associazione tra gli oggetti.

Problemi correlati