Relacja „ma” a relacja „jest”
Część sekcji Programowanie obiektowe ścieżki JavaScript w Coddy. Lekcja 47 z 56.
W programowaniu obiektowym istnieją dwa główne rodzaje relacji między obiektami: „ma” (kompozycja) i „jest” (dziedziczenie). Dziedziczenie tworzy hierarchie rodzic-dziecko, natomiast kompozycja buduje obiekty przez łączenie mniejszych, wyspecjalizowanych komponentów.
Najpierw zrozummy relację „jest rodzajem” poprzez dziedziczenie:
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// Dog "is-a" Animal - relacja dziedziczenia
class Dog extends Animal {
bark() {
console.log(`${this.name} says woof!`);
}
}Teraz przyjrzyjmy się relacji „ma” poprzez kompozycję:
class Engine {
start() {
console.log("Engine started");
}
}
// Car "has-a" Engine — relacja kompozycji
class Car {
constructor() {
this.engine = new Engine(); // Kompozycja
}
startCar() {
this.engine.start();
console.log("Car is running");
}
}Kluczowa różnica:
- „jest” (dziedziczenie): Pies JEST zwierzęciem
- „ma” (kompozycja): Samochód MA silnik
Wyzwanie
Masz podane klasy komponentów (Processor, Memory) oraz większość klasy Computer. Twoje zadanie to uzupełnić konstruktor w pliku computer.js:
- Utwórz właściwość
processorprzy użyciu klasyProcessor - Utwórz właściwość
memoryprzy użyciu klasyMemory - Przekaż processorSpeed do konstruktora klasy Processor, a memorySize do konstruktora klasy Memory
Spróbuj swoich sił
import { Computer } from './computer.js';
const myComputer = new Computer(3.5, 16);
myComputer.start();Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Obiekty i słowo kluczowe this
Szybka powtórka: obiektyDodawanie metod do obiektówZrozumienie słowa kluczowego thisFunkcje konstruktoraSłowo kluczowe newWyzwanie podsumowujące7Dziedziczenie i słowo kluczowe extends
DziedziczenieRelacja „jest rodzajem”Słowo kluczowe extendsMetoda super()Dziedziczenie właściwości i metodWyzwanie podsumowujące10Polimorfizm
Czym jest polimorfizm?Nadpisywanie odziedziczonych metodUżywanie superWyzwanie podsumowujące13Kompozycja a dziedziczenie
Relacja „ma” a relacja „jest”Ograniczenia głębokiego dziedziczeniaTworzenie obiektów2Organizowanie kodu
Czym są moduły?Eksportowanie za pomocą exportImportowanie za pomocą importEksporty domyślne a nazwane5Enkapsulacja i dostęp
EnkapsulacjaPubliczne i prywatne pola klasyMetody prywatneWyzwanie podsumowujące8Organizowanie kodu OOP
Organizowanie klas w moduły11Projekt: Renderer kształtów
Konfiguracja: klasa Shape i eksportDziedziczenie klasy CircleNadpisywanie i metoda obliczania polaStatyczny licznik kształtów14System zarządzania biblioteką
Projektowanie bibliotekiKlasa Book z kompozycjąWalidacja autora książki9Metody i właściwości statyczne
Poziom klasy a poziom instancjiWłaściwości statyczneStatyczne metody pomocniczeWyzwanie podsumowującePoćwicz samodzielnie: Kompilator JavaScript online