Newsgroup: it.scienza.informatica
Titolo: copia e clona

Qualcuno mi spiegherebbe che differenza c'è tra copia e clonazione nella
OOP?
Grazie
--
Marco[:]|
\-----------------------------------------------------\
/         Marco Carosio                               /
\      aka "Captain Harlock"                        \
/                                                              /
\  e-m@il : 
marcoc...@libero.it
             \
/                
elmi...@infinito.it
                  /
\                                                              \
/  home:    
http://utenti.tripod.it/~mcarosio
   /
\__________________________________\
=========================================
Yo man! Whaz di b3st way t0 hack 
www.nasa.gov
 ????
Ehy c'mon, explain me man!!!
=========================================

 Grazie
mmh, per una definizione 'robusta' dovrei consultare i sacri testi,
pero' se ti accontenti di una definizione 'andante' ...
l'istruzione a := b, se a e b sono 'riferimenti' a oggetti (o
'puntatori' a oggetti), fa in modo che a e b facciano riferimento allo
stesso oggetto, oppure, in altre parole, che gli oggetti riferiti da a e
b siano _identici_ .
Invece l'istruzione a := clone(b) fa in modo che a e b facciano
riferimento ad oggetti 'uguali' (con valori uguali 'campo per campo') ma
NON identici ('occupano zone diverse di memoria').
Per esempio in Smalltalk tutti gli assegnamenti sono 'per rifermento'
(ad eccezione di quelli dei numeri interi) e quindi per avere due
oggetti uguali ma non identici e' necessario utilizzare il messaggio
'copy'.
In Eiffel parte di questo meccanismo e' incluso nel sistema di gestione
dei tipi : i tipi 'expanded' hanno una semantica di assegnamento 'per
copia' e non 'per riferimento', per i tipi 'non expanded' e' possibile
comunque usare copy o clone.
In C++ ... non mi ricordo piu' ... (e lascio la palla a qualcuno che
magari ha tempo di consultare Meyer, Stroustroup, ... et al.)

Grazie
Ci provo...
Un oggetto e` una entita` dotata di stato,comportamento e identita`...
Sorvolo su stato e comportamento, quello che e` importante e`
l'identita` che e` unica e immutabile (ad una prima analisi puoi
approssimarla con l'indirizzo di memoria in cui risiede l'oggetto
ma non e` un paragone molto accettabile).
Il punto e` che due oggetti istanza di una stessa classe e aventi uguale
valore dello stato sono uguali solo se sono lo stesso oggetto (cosi` 
come due gemelli pur essendo identici non sono la stessa persona).
In sostanza l'uguaglianza tra oggetti nella OOP comprende
necessariamente anche l'identita`. Nella maggioranza dei contesti
non e` necessario considerare l'identita` per cui spesso l'uguaglianza
e` verificata solo relativamente allo stato (e implicitamente al 
comportamento). A questo punto due oggetti sono uguali se sono
l'uno la copia (dello stato e del comportamento) dell'altro
(o se preferisci l'uno il clone dell'altro).
Ovvero il termine clonazione (per quello che ne so) esclude
la copia dell'identita` (che nella OOP e` impossibile per definizione).
Paolo
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

Salve
"Qualcuno mi spiegherebbe che differenza c'è tra copia e clonazione nella
OOP?
Grazie"
In sintesi la copia crea due riferimenti alla stessa struttura mentre la
clonazione crea due strutture distinte ergo se faccio
A b = new A(par_list)
A c = b
ho che b e c puntano allo stesso oggetto mentre se la clase A ha il metodo
clone che ti devi scrivere tu in generale posso usare 
A c = b.clone()
e ottengo due oggetti distinti che solo all'inizio sono uguali ma che poi vivono
di vita propria...
Cheers
Yuri

 che poi vivono di vita propria...
I due oggetti non sono mai uguali, neanche all'inizio per via 
dell'identita`, e` corretto dire che e` uguale il valore dello stato.
Inoltre la creazione di un ulteriore riferimento all'oggetto non
credo possa essere considerata una operazione di copia
dell'oggetto (impossibile per definizione). Insomma
IMO parlare di copia di un oggetto non ha senso per
via dell'identita`, si puo` parlare solo di clonazione o
creazione di un ulteriore riferimento.
