Sobes.tech
Junior

Obyekt yönümlü proqramlaşdırmada irsiyyət və tərkib arasındakı fərqlər nələrdir?

sobes.tech Süni İntellekt

AI-dan cavab

Miras:

  • "-dır" (is-a) münasibəti.
  • Uşa sinfi, valide sinfinin sahələrini və metodlarını miras alır.
  • Mövcud sinflərin ixtisaslaşdırılmış versiyalarını yaratmaq üçün istifadə olunur.
  • Sərt ierarxiyalara və çoxlu irs problemlərinə səbəb ola bilər.

Tərkib:

  • "-ə malikdir" (has-a) münasibəti.
  • Sinif digər sinflərin nümunələrini sahələri kimi daxil edir.
  • Tapşırıqları daxilindəki obyektlərə həvalə edir.
  • Elastiklik və komponentlərin dəyişdirilməsi imkanını təmin edir.

Java nümunəsi:

// Miras
class Vehicle { // Əsas sinif
    void start() { /* ... */ }
}

class Car extends Vehicle { // Vehicle-dan irsən
    // Car üçün xüsusi metodlar
}

// Tərkib
class Engine { // Element
    void start() { /* ... */ }
}

class AnotherCar { // Tərkibdən istifadə edən sinif
    private Engine engine; // Engine nümunəsini daxil edir

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

    void start() {
        engine.start(); // Həvalə
    }
}

Fərqlər cədvəl şəklində təqdim oluna bilər:

Kriteriya Miras Tərkib
Münasibət "-dır" (is-a) "-ə malikdir" (has-a)
Sərtlik Daha sərt Daha elastik
Yenidən istifadə Sinif hierarxiyaları vasitəsilə Ob'ekt nümunələri vasitəsilə
Davranış dəyişməsi Metodların üst- yazılması Daxil olan obyektlərin dəyişdirilməsi
Tətbiq Xüsusiləşdirmə, funksionallığın genişləndirilməsi Yığım, hissələrdən qurma

Tərkib ümumiyyətlə mirasdan üstün sayılır, çünki daha çox elastiklik və sinflər arasında daha az asılılıq təmin edir.