2011-03-14 5 views
7

di solito inserisce associazioni di aggregazione tra le interfacce?L'aggregazione dell'interfaccia nei diagrammi di classe UML

Esempio:

Example Diagram

Qui, sento che un'aggregazione è ridondante. Quello tra le interfacce è più importante, perché è quello che useranno i clienti delle classi. BMW e LuxuryWheel saranno sempre utilizzati tramite ICar e IWheel. Tuttavia, ICar non aggrega realmente IWheel, poiché è un'interfaccia e non contiene alcuna logica effettiva. BMW aggrega chiaramente LuxuryWheel ma è quasi un dettaglio di implementazione.

Come si modellerà questo? Esiste un modo in UML per contrassegnare un'aggregazione (o un'associazione) come astratta o da implementare?

risposta

9

Se si guarda al UML spec, troverete che in 7.3.24:

In particolare, un'associazione tra interfacce implica che una conforme associazione deve esistere tra implementazioni delle interfacce.

Quindi, sì, è possibile disegnare aggregazioni tra le interfacce, ma il diagramma potrebbe non corrispondere esattamente a ciò che si aspetta.

+0

7.3.24 sembra pertinente. Se leggo quella sezione (e guardo l'esempio) mi sembra che non si modella esplicitamente l'associazione tra le classi concrete. Sono impliciti attraverso l'associazione tra le interfacce. Ciò significa che l'associazione tra BMW e LuxuryWheel è superflua. – TheFogger

+0

@TheFogger: bene, questa è la domanda ... se il "deve esistere" nelle specifiche significa che DOVREBBE essere nel modello, quindi PERCHÉ hai l'associazione tra le interfacce, DEVI avere l'associazione tra l'istanza di ICar (BMW) e IWheel (LuxuryWheel). D'altra parte, a volte non sono molto sicuro delle descrizioni in linguaggio naturale delle specifiche UML, e direi che ti sei avventurato in una di quelle aree grigie. Forse dovresti usare una classe astratta ACar che ha un'aggregazione di AWheels invece di interfacce. Questo è ciò che la maggior parte delle persone sarebbe a proprio agio. – ShiDoiSi