spx ha scritto:
-Una classe Controller con il metodo inserisci che riceve in input delle stringhe (nome,cognome ecc...), crea un oggetto Cliente ed invoca il metodo inserisci della classe DAO (descritta di seguito)
-Una classe DAO con il metodo inserisci che riceve in input un oggetto Cliente ed effettua l'inserimento nel database
Fin qui mi sembra tutto ben ragionevole.
spx ha scritto:
Entrambi i metodi inserisci (di Controller e DAO) restituiscono true se l'inserimento è andato a buon fine, false altrimenti.
Per carità .. non è sbagliato in assoluto ragionare in termini di valori di ritorno true/false. Ma generalmente
non si fa. In Java si ragiona con le eccezioni.
spx ha scritto:
quando viene invocato il metodo inserisci del Controller, questo crea un oggetto Cliente ed invoca il metodo inserisci del DAO. Una volta che il metodo del DAO termina, vorrei capire se anche quello del Controller termina subito dopo oppure se prima di terminare il Controller deve distruggere (mi riferisco dempre al sequence diagram) l'oggetto Cliente precedentemente creato.
Cerco di porla anche in un altro modo: cosa accade effettivamente durante l'esecuzione? Quando il metodo inserisci del Controller termina, l'oggetto Cliente viene distrutto subito o semplicemente rimane privo di riferimenti e viene poi liberato dal garbage collector?
Partiamo da un aspetto: in Java il recupero della memoria degli oggetti non più utilizzati è "automatico". Non è il programmatore che può chiedere di eliminare
subito un oggetto, non esiste un equivalente della free() del "C". E' il garbage collector che si occupa di questo.
Quando è che un oggetto viene preso in considerazione dal g.c.? Lo si può dire in modo semplice: un oggetto diventa "eleggibile" per il garbage collection quando non è più "raggiungibile". Attenzione, che si parla di raggiungibilità, non di essere solo referenziato.
Due oggetti possono referenziarsi reciprocamente tra di loro ed essere entrambi NON raggiungibili. In questo caso il g.c. è perfettamente in grado di reclamare entrambi gli oggetti.
Il concetto di raggiungibilità non è difficile. Se a partire da una serie di "radici" NON è possibile tracciare un cammino che porta direttamente/indirettamente ad un oggetto, allora quell'oggetto
non è raggiungibile. Altrimenti, se è raggiungibile, il g.c. non lo può/deve toccare in alcun modo. Le radici di cui ho parlato sono, per dirlo semplicemente, sicuramente le seguenti: tutte le variabili reference allocate sugli stack-frame negli stack dei thread e tutte le variabili reference "di classe" (static) delle classi.
P.S. ci sarebbe altro da dire, magari con qualche esempio ma non ho purtroppo tempo ora di andare oltre. Vediamo innanzitutto se ti è chiaro quanto appena detto.