Creator

Problema: chi crea un certo tipo di oggetti?
...

Nel caso di Monopoly: chi crea gli oggetti Square?
Un problema comune da affrontare nella progettazione a oggetti è: chi crea l'oggetto X? Si tratta di una responsabilità da assegnare. Nel caso di Java questa domanda vuol dire: chi deve fare la new Square(...)?

Ora qualsiasi oggetto, potenzialmente può creare un oggetto. Tuttavia per alcuni oggetti (in base al progetto) ricevere questa delega ha più senso che per altri.

Diciamo che esiste una classe arbitraria Dog che potrebbe creare l'oggetto Square. Tuttavia ci chiediamo, questa scelta si ripercuoterebbe come un salto rappresentazionale basso o no?

La scelta di far creare Square a Dog avrebbe come conseguenza un salto rappresentazionale non basso.
Dovrebbe essere, nel caso del Monopoly, l'oggetto Board a creare l'oggetto Square.

Tabella riassuntiva del pattern
...

Nome patternCreator
ProblemaChi crea l'oggetto A?
SoluzioneLa classe B dovrebbe essere responsabile di creare un'istanza di A se si verifica che:
a)B contiene A
b)B registra A
c)B utilizza strettamente A
d)B possiede i dati per l'inizializzazione di A

B e A fanno riferimento ad oggetto software, non a oggetti del modello di dominio.

Consiglio per iniziare la progettazione

Se la progettazione non è ancora cominciata, va guardato il modello di dominio per trarre ispirazione per definire le prime classi software.

Guardando il modello di dominio ci si rende conto che le istanze di Square sono contenute in Board. Ovviamente si tratta di un punto di vista concettuale (dominio), ma lo si può riflettere nel codice. Quindi se vogliamo un LRG (salto rappresentazionale basso), Board creerà Square, in accordo anche con la descrizione (in tabella) del pattern Creator.
Pasted image 20230516154145.png

Modellazione agile

Si ricordi che per la modellazione agile si devono creare, in parallelo, modelli complementari, dinamici e statici, degli oggetti. Pertanto viene disegnato sia un diagramma di sequenza che un diagramma delle classi entrambi parziali.

Si noti che quando una Board viene creata a sua volta crea una Square e in questo contesto non ci curiamo del fatto che una Board ha 40 Square.