Come si annota l'istanza nei diagrammi delle classi UML?

7

Dato questo pseudo codice:

class B { }

class A : B
{
    int val;
};

alpha = new A();

Quale freccia disegno tra alpha e A in un diagramma di classe UML? E 'questo anche qualcosa che UML dovrebbe fare?

+-------+        +-------+        +-------+
| alpha | --??-- |   A   |------|>|   B   |
|       |        |       |        |       |
+-------+        +-------+        +-------+

Nel mio caso, desidero esprimere esplicitamente che alpha istanzia A . Quindi se non c'è modo in UML, mi limito a inventare un modo - che va bene, ma voglio sapere se UML può già esprimerlo. La mia situazione è che sto cercando di spiegare OOP ad un amico che è molto visivo. Pertanto, voglio provare a distinguere visivamente le due relazioni (ereditarietà e istanziazione) in modo che possa distinguerlo mentalmente.

    
posta Alexander Bird 15.08.2011 - 14:45
fonte

3 risposte

12

In un diagramma di classe, non mostri l'atto di istanziazione. Questo è qualcosa che mostrerebbe una sequenza o un diagramma di comunicazione. I diagrammi delle classi mostrano la struttura statica di un sistema.

Se una classe A "dipende da" una classe B, allora potresti guardare le relazioni di associazione e dipendenza. Dipendenza è il più debole dei due e viene solitamente usato se l'altra classe è un parametro di un metodo e non è memorizzato come variabile di istanza. L'associazione è più strong e significa che la classe A contiene un'istanza (o istanze) della classe B ed è ulteriormente rafforzata da la composizione e le relazioni di aggregazione.

Nel tuo esempio, alpha non fa parte di una classe. Se alpha era una variabile di istanza in qualche classe C , dovresti connettere C a A con un'associazione. Se si trattava di un parametro per un metodo o creato all'interno di un metodo di C e non memorizzato come variabile di istanza, dovresti utilizzare una linea di dipendenza per connettere C a A . In tutti i casi, hai la possibilità di specificare la direzionalità e la molteplicità.

Penso che un problema più grande è che sembra che tu stia associando UML a "diagramma di classe". La specifica UML 2.2 ha 14 tipi di diagrammi. Ci sono 7 diagrammi strutturali e 7 diagrammi comportamentali (suddivisi in 3 diagrammi di comportamento e 4 diagrammi di interazione). Ogni diagramma mostra una vista particolare del sistema. Alcuni aspetti del sistema sono mostrati meglio usando un particolare diagramma o, in alcuni casi, una serie di diagrammi. Se sei interessato, ti consiglio di consultare la voce di Wikipedia su UML e Distillato UML di Martin Fowler . Entrambe offrono grandi panoramiche sullo scopo, i punti di forza e i punti deboli dei vari tipi di diagrammi.

    
risposta data 15.08.2011 - 14:59
fonte
3

Sono d'accordo con @Thomas Owens che i diagrammi di classe in UML non sono pensati per mostrare le istanze in generale. Tuttavia, devo aggiungere che UML fornisce meccanismi per rappresentare l'istanza:

  • l'elemento InstanceSpecification fornisce un modo per modellare le istanze, come alpha nel tuo esempio.
  • la notazione delle dipendenze (una freccia tratteggiata con punta di freccia semplice), che scorre dall'istanza al suo tipo e ornata con lo stereotipo <<instanceOf>> , fornisce un modo per modellare la relazione di istanziazione tra un'istanza e i suoi classificatori.
risposta data 15.08.2011 - 19:00
fonte
2

C'è uno stereotipo speciale per tale dipendenza. Class INSTANTIATES Class2, se crea le sue istanze. Esiste nello standard UML. (Ho controllato 2.4.1 - contemporaneo e 2.5 - il prossimo.)

    
risposta data 27.01.2014 - 15:26
fonte

Leggi altre domande sui tag