2011-10-20 13 views
8

Non sono sicuro di utilizzare correttamente association and aggregation or composition diamond.Diagramma classe UML Associazione vs (Aggregazione | Composizione) -Diamonds

Vorrei usare l'associazione per le interfacce, perché non posso istanziarle. Come lo fanno per esempio here. O per le classi statiche, la stessa ragione.

E i diamanti che uso solo per gli oggetti posso istanziare. Come le classi normali.

Ma non sono sicuro se questo è il modo corretto per differenziarli, perché se si check di nuovo, vedrete che non sono così specifici su di esso. In UML 2.3 specification non ho potuto uscire di più, quindi come lo stai usando?

E c'è una terza modalità, la freccia tratteggiata <>, ma non ho una colla quando utilizzare questo. Quindi potresti aiutarmi anche con quello?

risposta

16

Vorrei utilizzare l'associazione per le interfacce, perché non posso istanziarle. Come se lo facessero qui per esempio. O per le classi statiche, la stessa ragione.

E i diamanti che uso solo per gli oggetti posso istanziare. Come le classi normali.

Non è proprio così che funzionano. Le tre forme (Association, Aggregation and Composition) definiscono proprietà diverse su una relazione. Tutti e tre sono normalmente usati tra le classi anche se possono riguardare anche le interfacce. Associazione e composizione sono le due più facili:

  • L'associazione (senza diamante) è la forma più generale, che consente di definire la cardinalità e la navigabilità alle due estremità.
  • La composizione (diamante pieno) è una relazione di intera parte in cui "intero" (fine con il diamante nero) "contiene" la parte. Impone due restrizioni chiave:
    1. Può esserci solo un contenitore (ad esempio, la cardinalità a fine intera è esattamente 1);
    2. Impone una responsabilità del ciclo di vita per le parti nel suo complesso. Quindi il contenitore è responsabile della creazione e dell'eliminazione delle parti. Una parte non può continuare a esistere se il suo contenitore viene cancellato.

Aggregation (diamante vuoto) si trova da qualche parte nel mezzo. È un po 'come la composizione - tranne che non impone le proprietà sopra descritte. Io personalmente non lo uso. La semantica è troppo poco chiara perché valga la pena.

E c'è una terza modalità, la freccia tratteggiata <>, ma non ho una colla quando utilizzare questo.

Penso che tu intenda la relazione di dipendenza. È una forma di associazione più debole. Come esempio, assumere la seguente definizione di classe

class Foo { 

def bar(Baz: aParam) { 
    ... 
} 
} 

In questo caso tipo Foo ha una dipendenza dal tipo Baz dal suo uso nel metodo bar() firma. Tuttavia non c'è alcuna associazione tra loro (non può discutere sensibilmente per esempio la cardinalità della relazione tra un'istanza di Foo e un'istanza di Baz).

Dal punto di vista pratico direi:

  • è possibile utilizzare rette Associazioni per l'80% + dei rapporti è molto probabile che vogliono modellare
  • Composizione probabilmente rappresenta la maggior parte dei rimanenti scenari
  • La dipendenza può essere utile in alcune circostanze
  • È possibile ottenere abbastanza felicemente senza mai utilizzare l'aggregazione.

hth.

+0

prego. – sfinnie

0

Impostiamo i termini. L'aggregazione è un metaterm nello standard UML e significa ENTRAMBI composizione e aggregazione condivisa, semplicemente denominata condivisa. Troppo spesso viene chiamato in modo errato "aggregazione". È CATTIVO, perché anche la composizione è un'aggregazione. Come ho capito, intendi "condiviso".

Ulteriori dallo standard UML:

composito - Indica che la proprietà è aggregato modo composto, cioè, l'oggetto composto ha la responsabilità per l'esistenza e stoccaggio degli oggetti composti (parti).

Quindi, University per l'associazione cattedre è una composizione, perché cattedra non esiste fuori University (IMHO)

semantica precisa di aggregazione condivisa varia dal campo di applicazione e modellatore.

I.e., tutte le altre associazioni possono essere disegnate come aggregazioni condivise, se si segue solo alcuni dei propri principi o di qualcun altro. Guarda anche here.

Problemi correlati