Sobes.tech
Junior — Middle

Ի՞նչն է տարբերվում օբյեկտի ամբողջական կրկնօրինակումից և նրա մակերեսային պատճենից։

sobes.tech AI

Պատասխան AI-ից

Ամբողջական կրկնօրինակում (deep copy) և մակերեսային պատճենը (shallow copy) տարբեր են ներսում գտնվող օբյեկտների կրկնօրինման մակարդակով:

  • Մակերեսային պատճեն ստեղծում է նոր օբյեկտ, բայց այն դաշտերը, որոնք հղումներ են այլ օբյեկտների, պատճենվում են որպես հղումներ։ Այսինքն, ներսի օբյեկտները չեն կրկնօրինվում, այլ բաժանվում են սկզբնաղբյուրի և պատճենի միջև:

  • Ամբողջական կրկնօրինակում ստեղծում է նոր օբյեկտ և ռեկուրսիվ կերպով պատճենում բոլոր ներսի օբյեկտները, ստեղծելով լիովին անկախ պատճեն:

Java-ի օրինակ՝

import java.util.ArrayList;
import java.util.List;

class Person implements Cloneable {
    String name;
    List<String> hobbies;

    public Person(String name, List<String> hobbies) {
        this.name = name;
        this.hobbies = hobbies;
    }

    // Մակերեսային պատճեն
    public Person shallowCopy() throws CloneNotSupportedException {
        return (Person) this.clone();
    }

    // Ամբողջական կրկնօրինակում
    public Person deepCopy() {
        List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
        return new Person(this.name, hobbiesCopy);
    }
}

Այս օրինակով, մակերեսային պատճենում, hobbies ցանկը կիսվում է սկզբնաղբյուրի և պատճենի միջև, իսկ խորքային պատճենում՝ ստեղծվում է նոր ցանկ։