Associazione di oggetti nella classe statica UML durante la creazione ma non la memorizzazione?

6

Diciamo che ho una classe factory che crea alcune serie di tipi concreti. Ho documentato tutte queste classi in un diagramma di classi statiche UML. Come comunichi la relazione tra la classe di fabbrica e i tipi che crea? Normalmente useresti l'aggregazione o la composizione, tranne per il fatto che la fabbrica non memorizza effettivamente quegli oggetti creati come parte del proprio stato (la mia comprensione è che questo è un requisito). In passato ho fatto una linea tratteggiata con una freccia con una nota che dice "usa" o "crea". Qual è una buona regola generale qui?

    
posta void.pointer 28.11.2016 - 18:10
fonte

2 risposte

6

Hai notato correttamente che non c'è composizione o aggregazione nel caso della fabbrica. Fortunatamente, ci sono molti altri tipi di relazione:

Source: https://en.wikipedia.org/wiki/File:Uml_classes_en.svg by Yanpas, used under a CC-BY-SA 4.0 license.

Il tipo più generale di relazione è la relazione "associazione" ("link"). Nel tuo caso, è una relazione diretta: la fabbrica utilizza il prodotto, quindi la freccia punta dalla fabbrica al prodotto. Io uso la relazione "associazione" ogni volta che una classe chiamerebbe metodi sull'altra. Un costruttore è effettivamente un metodo statico, quindi funziona. L'aggregazione e la composizione sono tipi più specifici di aggregazione e introducono un senso di proprietà che non è applicabile qui.

Anche una dipendenza sarebbe possibile, ma denota una relazione più debole. Le associazioni mostrano collegamenti effettivamente presenti nel codice. Se la fabbrica in qualsiasi momento contiene un riferimento al prodotto, è in atto un'associazione - mostra che è possibile navigare nel collegamento (chiamando un metodo). Una relazione di dipendenza è più simile a una relazione in fase di progettazione e non fa alcuna dichiarazione sulla struttura di runtime del sistema.

In ogni caso, puoi annotare la relazione con uno stereotipo UML. Lo stereotipo <<use>> sarebbe abbastanza generale e <<create>> si adatterebbe meglio.

Per riassumere, mi aspetterei qualcosa del genere:

    
risposta data 28.11.2016 - 18:39
fonte
5

In un diagramma di classe, puoi documentare tutti i tipi di dipendenze, con la linea e la freccia puntate: tra l'altro c'è la dipendenza da <<create>> :

Ilprincipioèchelafontedipendedall'obiettivo.Anzi,e'ilcasodellatuafabbrica.LafabbricadipendedalProdottochecrea:seunprodottocambia,c'èilrischiocheanchelafabbricapossaesseremodificata(esempio:nuovoargomentonelcostruttore).Nonènecessarioilcontrariovero:unProdottopotrebbeinlineadiprincipioessereindipendentedallaFabbricachelocrea.

Comehaigiustamentesottolineato, associazioni , aggregazioni e composizioni sono relazioni strutturali. Ciò significa che esiste un modo durevole per rappresentare la relazione tra gli oggetti di queste classi (ad es. Memoria, puntatore / riferimenti, funzioni di mappatura, ecc ...).

Lettura web aggiuntiva:

risposta data 28.11.2016 - 18:40
fonte

Leggi altre domande sui tag