Kompozycja zamiast dziedziczenia
Wybieranie projektów typu has-a, gdy pasują
Kompozycja zamiast dziedziczenia to bezpłatna lekcja Dart Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Dart Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Dart Academy zawiera 4 lekcji w sumie.
Dwa sposoby ponownego użycia kodu
Zachowanie można ponownie wykorzystać przez dziedziczenie albo przez przechowywanie innego obiektu. Drugie podejście nazywa się kompozycją.
is-a a has-a
Dziedziczenie modeluje relację is-a: Circle jest Shape. Kompozycja modeluje relację has-a: Car ma obiekt Engine.
Klasa złożona
W kompozycji przechowują Państwo pomocniczy obiekt jako pole i przekazują mu zadania zamiast po nim dziedziczyć.
class Car {
final Engine engine = Engine();
}Delegowanie zachowania
Klasa zewnętrzna przekazuje wywołania swojemu wewnętrznemu obiektowi. Takie delegowanie pozwala ponownie używać logiki bez dziedziczenia.
class Car {
final engine = Engine();
void start() => engine.ignite();
}Problem kruchej klasy bazowej
Głębokie hierarchie dziedziczenia są podatne na błędy. Zmiana w klasie nadrzędnej może po cichu zepsuć odległe podklasy — to pułapka znana jako krucha klasa bazowa.
Elastyczność w czasie działania
Kompozycja pozwala wymienić wewnętrzny obiekt w dowolnym momencie. Dziedziczenie jest ustalone raz, ale pole można zmieniać.
class Car {
Engine engine;
Car(this.engine);
}Połączenie z interfejsami
Kompozycję można połączyć z interfejsami: należy zależeć od abstrakcyjnego typu Engine, aby dowolny pasujący silnik można było łatwo podłączyć.
abstract class Engine {
void ignite();
}Łatwiejsze testowanie
Ponieważ części są oddzielnymi obiektami, w testach można przekazać obiekt zastępczy. Kompozycja ułatwia naturalne stosowanie mocków.
var car = Car(FakeEngine());Unikanie dziedziczenia niewłaściwych elementów
Podklasy dziedziczą każdego członka, nawet takiego, którego nie powinny udostępniać. Kompozycja udostępnia tylko to, co zdecydują się Państwo delegować.
Kiedy dziedziczenie nadal wygrywa
Dziedziczenie sprawdza się przy wyraźnej relacji is-a i wspólnej tożsamości. Po kompozycję należy sięgać, gdy relacja jest w rzeczywistości typu has-a.
Praktyczna zasada
Domyślnie należy preferować kompozycję, a z dziedziczenia korzystać oszczędnie. Dzięki temu projekty pozostają luźno powiązane i łatwe do późniejszej zmiany. 🧩
Szybkie sprawdzenie
Jedno krótkie pytanie dotyczące kompozycji.
Podsumowanie
Kompozycja modeluje relację has-a przez przechowywanie innych obiektów i delegowanie im zadań. Pozostaje elastyczna i łatwa do testowania, podczas gdy dziedziczenie pasuje do wyraźnych relacji is-a. 👍
Często zadawane pytania
Czy lekcja „Kompozycja zamiast dziedziczenia” jest bezpłatna?
Tak — pełny tekst „Kompozycja zamiast dziedziczenia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Dart Academy, przejdź na CoddyKit PRO. Kurs Dart Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Kompozycja zamiast dziedziczenia”?
Wybieranie projektów typu has-a, gdy pasują Ćwiczysz Dart Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Dart Academy?
Nie wymagamy żadnego doświadczenia. Dart Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Kompozycja zamiast dziedziczenia”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Dart Academy?
Tak. Każda lekcja Dart Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Klasy abstrakcyjne i metody abstrakcyjne
- Niejawne interfejsy i implements
- Polimorfizm dzięki wspólnym typom
- Kompozycja zamiast dziedziczenia