Podsumowanie – system zwierząt
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 56 z 110.
Wyzwanie
ŁatwyStwórzmy kompletny system zwierząt, który łączy wszystko, czego nauczysz się o mixinach! Utworzysz bazową klasę Animal, mixiny zachowań wykorzystujące słowo kluczowe on oraz konkretne klasy zwierząt, które łączą te możliwości na różne sposoby.
Podzielisz swój kod na trzy pliki:
animal.dart: Zdefiniuj klasę bazową, po której będą dziedziczyć wszystkie zwierzęta:- Klasa
Animalz właściwościąString namei konstruktorem - Metoda
describe(), która wyświetla[name] is an animal
- Klasa
behaviors.dart: Zaimportuj plik ze zwierzętami i utwórz trzy mixiny zachowań, z których każdy będzie ograniczony do klasyAnimalza pomocą słowa kluczowegoon:- Mixin
Swimmingz metodąswim(), która wyświetla[name] is swimming - Mixin
Flyingz metodąfly(), która wyświetla[name] is flying - Mixin
Walkingz metodąwalk(), która wyświetla[name] is walking
- Mixin
main.dart: Zaimportuj oba pliki i utwórz trzy klasy zwierząt, które łączą dziedziczenie z różnymi kombinacjami mixinów:- Klasa
Duck, która dziedziczy poAnimali używa wszystkich trzech mixinów (Swimming, Flying, Walking) - Klasa
Fish, która dziedziczy poAnimali używa tylko mixinuSwimming - Klasa
Bird, która dziedziczy poAnimali używa mixinówFlyingorazWalking
- Utwórz obiekt
Ducko nazwie'Donald', wywołajdescribe(), a następnieswim(),fly()iwalk() - Wyświetl pusty wiersz
- Utwórz obiekt
Fisho nazwie'Nemo', wywołajdescribe(), a następnieswim() - Wyświetl pusty wiersz
- Utwórz obiekt
Birdo nazwie'Tweety', wywołajdescribe(), a następniefly()iwalk()
- Klasa
Każdy mixin może uzyskać dostęp do właściwości name dzięki ograniczeniu on Animal, co zapewnia bezpieczeństwo typów i jednocześnie umożliwia elastyczne łączenie zachowań.
Oczekiwany wynik:
Donald is an animal
Donald is swimming
Donald is flying
Donald is walking
Nemo is an animal
Nemo is swimming
Tweety is an animal
Tweety is flying
Tweety is walkingSpróbuj swoich sił
import 'animal.dart';
import 'behaviors.dart';
// TODO: Utwórz klasę Duck, która dziedziczy po Animal i używa domieszek Swimming, Flying, Walking
class Duck {
// TODO: Zaimplementuj klasę Duck
}
// TODO: Utwórz klasę Fish, która dziedziczy po Animal i używa tylko domieszki Swimming
class Fish {
// TODO: Zaimplementuj klasę Fish
}
// TODO: Utwórz klasę Bird, która dziedziczy po Animal i używa domieszek Flying i Walking
class Bird {
// TODO: Zaimplementuj klasę Bird
}
void main() {
// TODO: Utwórz obiekt klasy Duck o nazwie 'Donald'
// Wywołaj describe(), swim(), fly(), walk()
// TODO: Wypisz pustą linię
// TODO: Utwórz obiekt klasy Fish o nazwie 'Nemo'
// Wywołaj describe(), swim()
// TODO: Wypisz pustą linię
// TODO: Utwórz obiekt klasy Bird o nazwie 'Tweety'
// Wywołaj describe(), fly(), walk()
}
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