Rückblick – Tiersystem
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 56 von 110.
Aufgabe
EinfachErstellen wir ein vollständiges Tiersystem, das alles zusammenführt, was du über Mixins gelernt hast! Du erstellst eine Animal-Basisklasse, Verhaltens-Mixins, die das Schlüsselwort on verwenden, und spezifische Tierklassen, die diese Fähigkeiten auf unterschiedliche Weise kombinieren.
Du organisierst deinen Code in drei Dateien:
animal.dart: Definiere deine Basisklasse, von der alle Tiere erben werden:- Eine
Animal-Klasse mit einerString name-Eigenschaft und einem Konstruktor - Eine Methode
describe(), die[name] is an animalausgibt
- Eine
behaviors.dart: Importiere die Tierdatei und erstelle drei Verhaltens-Mixins, die jeweils mithilfe des SchlüsselwortsAnimalaufonbeschränkt sind:- Ein
Swimming-Mixin mit einer Methodeswim(), die[name] is swimmingausgibt - Ein
Flying-Mixin mit einer Methodefly(), die[name] is flyingausgibt - Ein
Walking-Mixin mit einer Methodewalk(), die[name] is walkingausgibt
- Ein
main.dart: Importiere beide Dateien und erstelle drei Tierklassen, die Vererbung mit unterschiedlichen Mixin-Kombinationen verbinden:- Eine
Duck-Klasse, dieAnimalerweitert und alle drei Mixins verwendet (Swimming, Flying, Walking) - Eine
Fish-Klasse, dieAnimalerweitert und nur dasSwimming-Mixin verwendet - Eine
Bird-Klasse, dieAnimalerweitert und die MixinsFlyingundWalkingverwendet
- Erstelle eine
Ducknamens'Donald', rufedescribe()auf und danachswim(),fly()undwalk() - Gib eine leere Zeile aus
- Erstelle einen
Fishnamens'Nemo', rufedescribe()auf und danachswim() - Gib eine leere Zeile aus
- Erstelle einen
Birdnamens'Tweety', rufedescribe()auf und danachfly()undwalk()
- Eine
Jedes Mixin kann aufgrund der name-Einschränkung auf die on Animal-Eigenschaft zugreifen. Dadurch wird Typsicherheit gewährleistet und gleichzeitig eine flexible Kombination von Verhaltensweisen ermöglicht.
Erwartete Ausgabe:
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 walkingProbier es selbst
import 'animal.dart';
import 'behaviors.dart';
// TODO: Erstelle die Klasse Duck, die Animal erweitert und die Mixins Swimming, Flying und Walking verwendet
class Duck {
// TODO: Implementiere die Klasse Duck
}
// TODO: Erstelle die Klasse Fish, die Animal erweitert und nur das Mixin Swimming verwendet
class Fish {
// TODO: Implementiere die Klasse Fish
}
// TODO: Erstelle die Klasse Bird, die Animal erweitert und die Mixins Flying und Walking verwendet
class Bird {
// TODO: Implementiere die Klasse Bird
}
void main() {
// TODO: Erstelle eine Duck namens 'Donald'
// Rufe describe(), swim(), fly(), walk() auf
// TODO: Gib eine Leerzeile aus
// TODO: Erstelle einen Fish namens 'Nemo'
// Rufe describe(), swim() auf
// TODO: Gib eine Leerzeile aus
// TODO: Erstelle einen Bird namens 'Tweety'
// Rufe describe(), fly(), walk() auf
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienBibliotheken & ImportsEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort thisMethodenInstanzvariablenGrundlagen von KonstruktorenRückblick – Einfacher Taschenrechner4Null-Sicherheit
Einführung in die Null-SicherheitNullable vs. Non-NullableDie Operatoren ? und !Late-Schlüsselwort und Null-SicherheitNull-bewusste OperatorenNull-Sicherheit in KlassenRückblick – Benutzers профilsystem7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrere InterfacesZusammenfassung – Formrechner10Collections & Generics
Übersicht über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische EinschränkungenIterable & IteratorRückblick – Generischer Speicher13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungErweiterungsmethodenAufrufbare KlassenVersiegelte Klassen (Dart 3)Records (Dart 3)Muster & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
StandardkonstruktorBenannte KonstruktorenInitialisierungslistenKonstantenkonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenRückblick – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _-Präfix-KonventionBibliotheksweite SichtbarkeitTiefergehende Getter & SetterInformationsverbergungRückblick – Studierendendaten8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas Schlüsselwort „on“ in MixinsMixin vs. VererbungMixin vs. SchnittstelleRückblick – Tiersystem11Spezielle Methoden
toString()-ÜberschreibunghashCode- & ==-ÜberschreibungComparable-Schnittstellecall()-MethodenoSuchMethod-ÜberschreibungWiederholung – Benutzerdefinierte Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFabrikmusterBeobachtermusterStrategiemuster17Abschließende Herausforderungen
E-Learning-PlattformBankingsystemSpielcharaktersystemFahrzeugvermietung3Klassen-Eigenschaften
Instanz- vs. statische MemberFinal- und Const-FelderLate-VariablenStatische Methoden und FelderGetter und SetterRückblick – Bankkontoverwaltung6Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungDie Annotation @overrideDas Schlüsselwort final für KlassenKonstruktoren und VererbungZusammenfassung – Mitarbeiterhierarchie9Polymorphismus
Grundlagen des PolymorphismusPolymorphismus über InterfacesLaufzeit-TypüberprüfungDie Operatoren is & asCovariant-SchlüsselwortZusammenfassung – ZahlungsprozessorÜbe selbstständig: Online-Dart-Compiler