Kloning (programmering)

Inom datavetenskap hänvisar kloning till att göra en exakt kopia av ett objekt , ofta under paradigmet instansbaserad programmering , eller objektorienterad programmering ( OOP).

Grunda kopior

I de flesta programmeringsspråk (undantag inkluderar: Ruby ), lagrar primitiva typer som double , float , int , long , etc. helt enkelt sina värden någonstans i datorns minne (ofta call stack ). Genom att använda enkel tilldelning kan du kopiera innehållet i variabeln till en annan:

Kopiera primitiva typer i Java eller C++:

   
   0

   int  original  =  42  ;  int  copy  =  ;  kopia  =  original  ; 

Många OOP-programmeringsspråk (inklusive Java , D , ECMAScript och C# ) använder sig av objektreferenser. Objektreferenser, som liknar pekare på andra språk, tillåter att objekt skickas runt på adress så att hela objektet inte behöver kopieras.

Ett Java-exempel, när du "kopierar" ett objekt med en enkel tilldelning:

    
   

    Objekt  original  =  nytt  Objekt  ();  Objektkopiering  =  null  ;  _  kopia  =  original  ;  // kopierar inte objekt utan endast dess referens 

Objektet är inte duplicerat, variablerna 'original' och 'copy' hänvisar faktiskt till samma objekt. I C++, motsvarande kod

    
   
   Objekt  *  original  =  nytt  objekt  ();  Objekt  *  kopia  =  NULL  ;  kopia  =  original  ; 

gör det tydligt att det är en pekare till objektet som kopieras, inte själva objektet.


Kloning

Processen att faktiskt göra en annan exakt kopia av objektet istället för bara dess referens kallas kloning. På de flesta språk kan språket eller biblioteken underlätta någon form av kloning. I Java innehåller klassen Object metoden clone() , som kopierar objektet och returnerar en referens till det kopierade objektet. Eftersom det är i Object kommer alla klasser som definieras i Java att ha en klonmetod tillgänglig för programmeraren (även om den måste åsidosättas på varje nivå som den används för att fungera korrekt).

Klona ett objekt i Java:

    
   

    Object  originalObj  =  nytt  objekt  ();  Objekt  copyObj  =  null  ;  copyObj  =  originalObj  .  klon  ();  // duplicerar objektet och tilldelar den nya referensen till 'copyObj' 

C++-objekt beter sig i allmänhet som primitiva typer, så för att kopiera ett C++-objekt kan man använda operatorn ' = ' (tilldelning). Det finns en standardtilldelningsoperatör för alla klasser, men dess effekt kan ändras genom användning av operatörsöverbelastning . Det finns faror när du använder denna teknik (se skivning ). En metod för att undvika skivning kan vara att implementera en liknande lösning som Java clone() -metoden för klasserna och använda pekare. (Observera att det inte finns någon inbyggd clone()- metod)

Ett C++-exempel på objektkloning:

 
   Objekt  originalObj  ;  Object  copyObj  (  originalObj  );  // skapar en kopia av originalObj som heter copyObj 

Ett C++-exempel på objektkloning med hjälp av pekare (för att undvika skivning se ):

    
   

     Objekt  *  originalObj  =  nytt  objekt  ;  Objekt  *  copyObj  =  nullptr  ;  copyObj  =  nytt  objekt  (  *  originalObj  );  // skapar en kopia av originalObj och tilldelar dess adress till copyObj