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.