Sobes.tech
Junior

Ի՞նչ տարբերություններ կան օբյեկտային ծրագրավորման ժառանգության և կոմպոզիցիայի միջև։

sobes.tech AI

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

Երեսպատկեր:

  • "-ի" (is-a) հարաբերություն:
  • Որդու դասը ժառանգում է ծնողի դասի դաշտերը և մեթոդները:
  • Օգտագործվում է առկա դասերի մասնագիտացված տարբերակներ ստեղծելու համար:
  • Կարող է հանգեցնել խիստ հիերարխիաների և բազմակի ժառանգության խնդիրների:

Կազմավորում:

  • "-ի" (has-a) հարաբերություն:
  • Դասը պարունակում է այլ դասերի օրինակներ որպես իր դաշտեր:
  • Դատական գործառույթները հանձնարարում է պարունակվող օբյեկտներին:
  • Ներկայացնում է ճկունություն և բաղադրիչների փոխարինման հնարավորություն:

Java-ում օրինակ:

// Երեսպատկեր
class Vehicle { // Հիմնական դաս
    void start() { /* ... */ }
}

class Car extends Vehicle { // ժառանգում է Vehicle-ից
    // Car-ի հատուկ մեթոդներ
}

// Կազմավորում
class Engine { // Կոմպոնենտ
    void start() { /* ... */ }
}

class AnotherCar { // Դաս, որը օգտագործում է կազմավորումը
    private Engine engine; // պարունակում է Engine օրինակ

    AnotherCar(Engine engine) {
        this.engine = engine;
    }

    void start() {
        engine.start(); // Դատական
    }
}

Տարբերությունները ներկայացվում են աղյուսակով:

Կատեգորիա Երեսպատկեր Կազմավորում
հարաբերություն "-ի" (is-a) "-ի" (has-a)
Քաշքշուկ Ավելի խիստ Ավելի ճկուն
Հետագա օգտագործում Քլասների հիերարխիաներով Օբյեկտների օրինակներով
Կարգավորումների փոփոխություն Մեթոդների վերագրում պարունակվող օբյեկտների փոխարինում
Դիմում Մասնագիտացում, գործառնական ընդլայնում Ագրեգացիա, մասերից կառուցում

Ընդհանուր առմամբ, կազմավորումը նախընտրելի է ժառանգությունից, քանի որ այն ավելի մեծ ճկունություն և նվազ կախվածություն է ապահովում դասերի միջև: