Work in progress... Relazione programmatica (responsabilità multipla) Stanza 0..1 occupazione 0..1 Persona A cosa serve Centralizzare il controllo dell'occupazione di una stanza fuori da essa, in modo da evitare che per errore una persona possa
occupare una stanza già occupata. Se richiedo l'eliminazione di una stanza non occupata effettivamente dalla persona che voglio rimuovere, o che non rispetta un vincolo, questa operazione non va a buon fine Il controllo di inserimento è esterno quindi posso controllare che la stessa persona non stia già occupando un'altra stanza. Il controllo della rimozione è esterno. Quello che sto togliendo è ciò che è effettivamente collegato? (equals) Se non ci fosse Io darei la responsabilità di occupare una stanza ad una persona (persona ha link a stanza). Se voglio inserire una persona in una stanza chiederei alla stanza se è occupata (stanza ha il riferimento alla persona che la occupa), quindi se contiene essa stessa un riferimento ad una persona, se non la contiene, la inserisco. MA SE LA PERSONA OCCUPA GIA'UN ALTRA STANZA??? ERRORE (ho una persona che occupa 2 stanze e io non lo so) Se voglio rimuovere una persona da una stanza, vedo se è dentro, e se si, la tolgo. MA SONO SICURO CHE LA PERSONA CHE RIMUOVO E'EFFETTIVAMENTE NELLA STANZA??? Scenario base Una stanza può essere o no, occupata da una persona ed una persona può occupare o meno un stanza. Classi coinvolte Persona
Stanza
TipoLinkOccupazione
AssociazioneOccupazione
Classe Stanza/Persona
-inserisciLinkOccupasione(AssociazioneOccupazione ass)
-eliminaLinkOccupazione(AssociazioneOccupazione ass)
-TipoLinkOccupazione, che ritorna appunto esso
Classe AssociazioneOccpupazione Note Costruttore privato
-getTipoLink, che ritorna TipoLinkOccupazione
-inserisci(TipoLinkOccupazione)
-elimina(TipoLinkOccupazione)
Classe TipoLinkOccupazioine Note Costruttore privato
-equals (su oggetti ma non attributi) |