2012-03-10 10 views
15

Ho una domanda sulle associazioni, per essere esatti mi chiedo circa le molteplicità, capisco quelli, ma per esempio se avrei:UML associazione molteplicità

---------   --------- 
|   |1  * |   | 
|CLASS |----------| STUDENT | 
|   |   |   | 
---------   --------- 

dose che significa che in qualsiasi momento durante esistenza del sistema ci deve essere almeno 1 studente assegnato alla classe, o quelle molteplicità dovrebbero essere vere, se il sistema funziona normalmente.

Sto facendo questa domanda, perché mi chiedevo il momento della creazione di un oggetto. Per prima cosa creiamo una classe vuota, quindi la popoliamo con gli studenti. Per qualche tempo la classe è vuota, ma solo durante la creazione e il popolamento, quindi ha almeno uno studente. Perché se cambiassi da 1 a 0..1 suggerirei che ci può essere una classe vuota, non è falsa (questo momento di popolamento), ma in seguito non voglio permettere lezioni senza studenti.

MODIFICA: modificato da 0 .. * a 0..1, dovrebbe essere come è ora, mi dispiace per la confusione.

risposta

9

dose che significa che in QUALSIASI punto dell'esistenza del sistema ci deve essere almeno 1 studente assegnato alla classe, o che tali molteplicità dovrebbero essere vere, se il sistema funziona normalmente.

Questa è una buona domanda. Significa che, quando il sistema è in uno stato stabile, ogni studente DEVE essere associato esattamente a una classe. Ciò a sua volta solleva un'altra domanda: cosa costituisce uno "stato stabile"? UML in generale non lo formalizza. Intuitivamente, significa che quando non ci sono attività in corso che stanno modificando attivamente lo stato. Alcuni profili di UML mettono più rigore su questo. Ad esempio, l'UML eseguibile dice che il sistema può violare i vincoli di cardinalità mentre l'azione di uno stato è in esecuzione. Tuttavia, quando l'azione di stato completa, deve lasciare il sistema in uno stato valido, vale a dire dove tutti i vincoli di cardinalità sono soddisfatti.

I database forniscono una buona analogia qui. I vincoli di DB (come non le chiavi esterne nulle &) devono rimanere true quando il sistema è stabile. Durante l'esecuzione di una transazione i vincoli possono essere temporaneamente violati. Tuttavia, al termine della transazione, deve lasciare il db in uno stato valido.

Così, per il vostro esempio come mostrato:

  • E 'valido per una Classe di esistere senza gli studenti, quando il sistema è stabile (* dice 0 o più - in modo Classe non hanno bisogno di alcun Studenti)
  • Non è valido per uno Studente esistere senza essere assegnato ad una Classe quando il sistema è stabile ('1' significa esattamente uno). Quindi, qualunque sia la "transazione" creata, lo Studente deve anche associare lo Studente a una Classe.

hth.

+0

Grazie per la risposta :) – Andna

+0

Prego - buona domanda. – sfinnie

0

No, il simbolo * indica che non c'è almeno uno studente in ogni classe in qualsiasi momento. Ma dall'altra parte, guardando da Studente a Classe, la molteplicità significa che ogni studente è nello esattamente nella classe.

Per motivi di modellazione, è possibile modificare anche la molteplicità 1 in *, ma ciò dipende dal contesto.

+0

Ok, ma che dire di questo "in qualsiasi momento", questo esclude anche la situazione che ho descritto (creazione di un oggetto), o sono quelle situazioni ommited? – Andna

+0

E circa * - Penso che significhi lo stesso di 0 .. *, almeno quello che dice in "UML distillato" – Andna

+0

@Andna dipende da come il tuo editor UML interpreta il tuo input ... dovresti essere in grado di ispezionare il diagramma e vedere i limiti attuali superiori e inferiori per ciascun endpoint. –

1

dose che significa che in qualsiasi momento durante l'esistenza del sistema ci deve essere almeno 1 studente assegnato alla classe di

E significa che c'è esattamente una classe assegnato a più studenti.

Ogni estremità dell'associazione ha un limite di molteplicità superiore e un limite di molteplicità inferiore, ma la maggior parte degli editor UML mostrerà solo un valore se i limiti superiore e inferiore sono uguali. Se si desidera consentire (zero o uno) a molti, è possibile scrivere in questo modo:

0..1  * 
----------- 

cosa si ha realmente probabilmente vuole qui è una relazione molti-a-molti ... gli studenti possono essere in molte classi e le classi possono contenere molti studenti.

+0

circa 2 anni dopo , la tua risposta ha risposto alla mia domanda :) ecco perché ci sono 4 valori in molteplicità. in ibernazione, modelliamo questo modello solo uno-a-molti, uno a uno, ma solo 2 valori. – lovespring