E-Learning-Plattform
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 107 von 110.
Aufgabe
EinfachLassen Sie uns eine E-Learning-Plattform bauen, die alle OOP-Konzepte vereint, die Sie in diesem Kurs gemeistert haben. Sie werden ein System erstellen, das Benutzer, Kurse und Einschreibungen unter Verwendung von abstrakten Klassen, Vererbung, Mixins und Kapselung verwaltet.
Ihre Plattform wird über fünf Dateien organisiert sein:
user.dart: Erstellen Sie eine abstrakte KlasseUsermit privaten Feldern für_id(String) und_name(String) sowie öffentlichen Gettern. Fügen Sie eine abstrakte MethodeString getRole()hinzu, die Unterklassen implementieren müssen. Überschreiben SietoString(), um[role] name (id)zurückzugeben, wobei role vongetRole()stammt.student.dart: Erstellen Sie eine KlasseStudent, dieUsererweitert. Studenten sollten einProgressTracking-Mixin verwenden (in dieser Datei definiert), das eine private Ganzzahl_completedLessons(beginnend bei 0) mit einem Getter bereitstellt, sowie die MethodencompleteLesson()zum Inkrementieren undgetProgressReport(), dieCompleted X lessonszurückgibt. Die KlasseStudentsolltegetRole()implementieren, umStudentzurückzugeben.instructor.dart: Erstellen Sie eine KlasseInstructor, dieUsererweitert. Instruktoren haben eine private Liste_coursesCreated(Liste von Strings, die Kurstitel darstellen). Fügen Sie eine MethodecreateCourse(String title)hinzu, die den Titel zur Liste hinzufügt und den Titel zurückgibt. Implementieren SiegetRole(), umInstructorzurückzugeben. Fügen Sie einen GettercourseCounthinzu, der die Anzahl der erstellten Kurse zurückgibt.enrollment.dart: Erstellen Sie eine KlasseEnrollment, die die Einschreibung eines Studenten in einen Kurs verfolgt. Sie sollte einestudentId(String), einencourseName(String) und einen privaten Boolean_isCompleted(Standardwert false) mit einem Getter haben. Fügen Sie eine MethodemarkComplete()hinzu, die den Abschluss auf true setzt. Überschreiben SietoString(), umstudentId enrolled in "courseName" - Status: CompletedoderStatus: In Progressbasierend auf dem Abschlussstatus zurückzugeben.main.dart: Bringen Sie alles zusammen. Erstellen Sie einen Instruktor (I001,Dr. Smith) und lassen Sie ihn zwei Kurse erstellen:Dart FundamentalsundAdvanced OOP. Geben Sie den Instruktor und seine Kursanzahl alsCourses created: Xaus. Erstellen Sie eine Studentin (S001,Alice), geben Sie sie aus, lassen Sie sie dann 3 Lektionen abschließen und geben Sie ihren Fortschrittsbericht aus. Erstellen Sie eine Einschreibung für Alice inDart Fundamentals, geben Sie diese aus, markieren Sie sie als abgeschlossen und geben Sie sie erneut aus.
Erwartete Ausgabe:
[Instructor] Dr. Smith (I001)
Courses created: 2
[Student] Alice (S001)
Completed 3 lessons
S001 enrolled in "Dart Fundamentals" - Status: In Progress
S001 enrolled in "Dart Fundamentals" - Status: CompletedProbier es selbst
import 'user.dart';
import 'student.dart';
import 'instructor.dart';
import 'enrollment.dart';
void main() {
// TODO: Erstelle einen Instructor mit der id "I001" und dem Namen "Dr. Smith"
// TODO: Lasse den Instructor zwei Kurse erstellen: "Dart Fundamentals" und "Advanced OOP"
// TODO: Gib den Instructor aus (verwendet toString())
// TODO: Gib "Courses created: X" aus, wobei X der courseCount ist
// TODO: Erstelle einen Student mit der id "S001" und dem Namen "Alice"
// TODO: Gib den Student aus
// TODO: Lasse den Student 3 Lektionen abschließen (rufe completeLesson() 3-mal auf)
// TODO: Gib den Fortschrittsbericht des Students aus
// TODO: Erstelle eine Einschreibung (enrollment) für Alice (S001) in "Dart Fundamentals"
// TODO: Gib die Einschreibung aus
// TODO: Markiere die Einschreibung als abgeschlossen
// TODO: Gib die Einschreibung erneut aus
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienBibliotheken & ImportsEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenInstanzvariablenKonstruktor-GrundlagenWiederholung – Einfacher Taschenrechner4Null-Sicherheit
Einführung in Null-SicherheitNullable vs. Non-NullableDie ? und ! OperatorenLate-Schlüsselwort & Null-SicherheitNull-aware OperatorenNull-Sicherheit in KlassenZusammenfassung – Benutzerprofil-System7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrfache InterfacesRückblick – Shape Calculator10Collections & Generics
Überblick über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische ConstraintsIterable & IteratorZusammenfassung – Generische Speicherung13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungExtension MethodsCallable ClassesSealed Classes (Dart 3)Records (Dart 3)Patterns & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
Standard-KonstruktorBenannte KonstruktorenInitialisierungslistenKonstante KonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenZusammenfassung – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _ Präfix-KonventionSichtbarkeit auf Library-EbeneGetter & Setter im DetailInformation HidingRückblick – Schülerdatensätze8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas on-Schlüsselwort in MixinsMixin vs. VererbungMixin vs. InterfaceZusammenfassung - Tiersystem11Spezielle Methoden
toString() überschreibenhashCode & == überschreibenComparable-Interfacecall()-MethodenoSuchMethod überschreibenZusammenfassung – Eigene Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster3Klasseneigenschaften
Instanz- vs. statische MemberFinal & Const FelderLate-VariablenStatische Methoden & FelderGetter und SetterZusammenfassung – Bankkonto-Manager6Vererbung
Grundlagen der VererbungDas super-SchlüsselwortMethoden überschreibenDie @override-AnnotationDas final-Klassen-SchlüsselwortKonstruktoren & VererbungRückblick – Mitarbeiter-Hierarchie9Polymorphismus
Polymorphismus-GrundlagenPolymorphismus über InterfacesTypprüfung zur LaufzeitDie is & as OperatorenDas covariant SchlüsselwortZusammenfassung – Payment Processor