Sobes.tech
Junior

Millised on erinevused pärimise ja koostise vahel objektorienteeritud programmeerimises?

sobes.tech AI

Vastus AI-lt

Pärilitus:

  • "on" suhe (is-a).
  • Päriliku klass pärib vanema klassi väljad ja meetodid.
  • Kasutatakse olemasolevate klasside spetsialiseeritud versioonide loomiseks.
  • Võib põhjustada range hierarhia ja mitmepäriliku päriluse probleeme.

Koostis:

  • "omab" suhe (has-a).
  • Klass sisaldab teiste klasside eksemplare oma väljadena.
  • Edastab ülesannete täitmise sisestatud objektidele.
  • Tagab paindlikkuse ja võimaluse muuta komponente.

Näide Java:

// Pärilitus
class Vehicle { // Põhiklass
    void start() { /* ... */ }
}

class Car extends Vehicle { // Pärib Vehicle-st
    // Spetsiaalsed Car meetodid
}

// Koostis
class Engine { // Koostisosa
    void start() { /* ... */ }
}

class AnotherCar { // Klass, mis kasutab koostist
    private Engine engine; // Sisaldab Engine eksemplari

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

    void start() {
        engine.start(); // Delegatsioon
    }
}

Erinevused on esitatud tabelina:

Kriteerium Pärilitus Koostis
Suhe "on" (is-a) "omab" (has-a)
Rangus Rohkem rangem Paindlikum
Taaskasutus Klassihierarhia kaudu Objektide eksemplaride kaudu
Käitumise muutmine Meetodite üle kirjutamise kaudu Muudab sisalduvaid objekte
Rakendamine Spetsialiseerimine, funktsionaalsuse laiendamine Osadest koostamine

Koostis on tavaliselt eelistatum, kuna see pakub suuremat paindlikkust ja väiksemat sõltuvust klasside vahel.