0Pricing
Dart Academy · Lekcja

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

  1. Klasy abstrakcyjne i metody abstrakcyjne
  2. Niejawne interfejsy i implements
  3. Polimorfizm dzięki wspólnym typom
  4. Kompozycja zamiast dziedziczenia
← Powrót do Dart Academy