Powtórzenie – hierarchia pracowników
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 42 z 110.
Wyzwanie
ŁatwyStwórzmy kompletny system hierarchii pracowników, który łączy wszystkie koncepcje dziedziczenia z tego rozdziału. Utworzysz bazową klasę pracownika i rozszerzysz ją o wyspecjalizowane role, z których każda będzie miała własne, unikalne zachowania.
Podzielisz kod na dwa pliki:
employee.dart: Zdefiniuj tutaj hierarchię pracowników:- Bazowa klasa
Employeez właściwościamiString name,double salaryiint id. Dodaj konstruktor oraz metodęgetDetails(), która zwraca'[name] (ID: [id]) - Salary: $[salary]' - Klasa
Manager, która rozszerzaEmployeei dodaje właściwośćint teamSize. Użyj parametrów super dla dziedziczonych pól. NadpiszgetDetails(), aby zwracała szczegóły klasy nadrzędnej, a następnie', Team: [teamSize] members' - Klasa
Developer, która rozszerzaEmployeei dodaje właściwośćString language. NadpiszgetDetails(), aby zwracała szczegóły klasy nadrzędnej, a następnie', Specializes in [language]' - Klasa
TeamLead, która rozszerzaDeveloperi dodaje właściwośćint projectCount. NadpiszgetDetails(), aby rozbudować wersję z klasyDeveloperprzez dodanie', Leading [projectCount] projects'
- Bazowa klasa
main.dart: Zaimportuj plik z pracownikami i utwórz instancje każdego typu pracownika:- Utwórz obiekt
Employeeo nazwie'Alice', wynagrodzeniu50000.0i identyfikatorze101 - Utwórz obiekt
Managero nazwie'Bob', wynagrodzeniu75000.0, identyfikatorze102i wartości teamSize8 - Utwórz obiekt
Developero nazwie'Carol', wynagrodzeniu65000.0, identyfikatorze103i języku'Dart' - Utwórz obiekt
TeamLeado nazwie'David', wynagrodzeniu80000.0, identyfikatorze104, języku'Python'i wartości projectCount3 - Wypisz wynik wywołania
getDetails()dla każdego pracownika, po jednym wierszu
- Utwórz obiekt
Zwróć uwagę, jak TeamLead pokazuje dziedziczenie wielopoziomowe — rozszerza klasę Developer, która rozszerza klasę Employee. Każdy poziom dodaje własne szczegóły, zachowując jednocześnie informacje z klas nadrzędnych za pomocą super.
Oczekiwany wynik:
Alice (ID: 101) - Salary: $50000.0
Bob (ID: 102) - Salary: $75000.0, Team: 8 members
Carol (ID: 103) - Salary: $65000.0, Specializes in Dart
David (ID: 104) - Salary: $80000.0, Specializes in Python, Leading 3 projectsSpróbuj swoich sił
import 'employee.dart';
void main() {
// TODO: Utwórz obiekt Employee z imieniem 'Alice', pensją 50000.0 i id 101
// TODO: Utwórz obiekt Manager z imieniem 'Bob', pensją 75000.0, id 102 i teamSize 8
// TODO: Utwórz obiekt Developer z imieniem 'Carol', pensją 65000.0, id 103 i językiem 'Dart'
// TODO: Utwórz obiekt TeamLead z imieniem 'David', pensją 80000.0, id 104, językiem 'Python' i projectCount 3
// TODO: Wypisz getDetails() dla każdego pracownika, po jednym wierszu na pracownika
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatnościPoćwicz samodzielnie: Kompilator Dart online