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.
Nome pattern | Creator |
---|---|
Problema | Chi crea l'oggetto A? |
Soluzione | La 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.
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.
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.