Clonazione di un'istanza

di il
4 risposte

Clonazione di un'istanza

Salve a tutti del forum,
premesso che le classi hanno un metodo chiamato "clone", quest'ultimo metodo in realtà va implementato exnovo.

Esiste un metodo "clone" sicuro. Mi spiego, utilizzo istanze di una mia classe che altro non sono che contenitori di altre istanze create in runtime.

Grazie

4 Risposte

  • Re: Clonazione di un'istanza

    Per "metodo sicuro" mi riferisco ad una metodologia applicabile a prescindere dalla classe anche da un punto di vista teorico.

    In realtà, nei libri di java in mio possesso, parlano tutti di effettuare l'overload del metodo clone con un metodo che esegue:
    1) Creare un'istanza nuova (quindi indirizzo di memoria nuovo).
    2) Nell'istanza nuova, ad uno ad uno, risettare campi pubblici con valori della classe da clonare.
    3) E, ad uno ad uno, richiamare i metodi con gli stessi valori presenti nella classe da clonare.

    Questo metodo di cui sopra, secondo me, è facilmente applicabile su una classe semplice con pochi campi pubblici e pochi metodi. Ma nel caso di classi complesse che fanno uso di istanze al loro interno, diventa un po un problema.

    Altri testi riportano, invece di serializzare l'istanza, ossia salvare i dati dell'istanza ma non l'ho ancora studiata.

    Se c'è qualcuno che ha affrontato quest'argomento, preferirei più una spiegazione che un freddo codice.

    Grazie a tutti per aver letto.
  • Re: Clonazione di un'istanza

    Se non ho capito male il tuo problema sta nel dover clonare un oggetto che durante l'esecuzione del programma utilizza altri oggetti a cui si riferisce.

    Se è così è necessario ridefinire il metodo clone() clonando di conseguenza anche tutti gli oggetti a cui fa riferimento. Oppure cloni l'oggetto principale lasciando i riferimenti agli oggetti secondari senza clonare loro. Dipende da che ti serve.

    Nel primo caso effettui una copia 1 ad 1, quindi se hai un oggetto principale e 5 oggetti secondari, avrai tale struttura identica due volte in memoria. Altrimenti la seconda strategia clona solo l'oggetto principale e lascia i secondari i memoria, avendo così 2 oggetti principali e 5 secondari.
  • Re: Clonazione di un'istanza

    Ciao, grazie per aver risposto.

    Hai compreso perfettamente bene la cosa.

    Dalla tua risposta e da quello che ho letto nei vari manuali di Java, ho capito che i metodi come "clone" fanno parte della famiglia dei metodi strettamente legati all'oggetto del discorso (ossia non vi sono librerie o richiami standard di metodi) ma va implementato il metodo di volta in volta per ogni classe ad hoc.

    Grazie per la conferma!
  • Re: Clonazione di un'istanza

    Si, più precisamente ogni oggetto in Java eredita da Object che ha tra i propri metodi clone().

    Ovviamente se vuoi, puoi ridefinirlo o farne l'overriding tenendo però presente l'architettura delle tue classi e gli oggetti a cui si riferiscono. Inoltre tieni presente che per clonare l'intera infrastruttura devi ridefinire clone() anche per gli oggetti a cui ti riferisci.

    Ciao.
Devi accedere o registrarti per scrivere nel forum
4 risposte