Rückblick – Schülerdatensätze
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 35 von 110.
Aufgabe
EinfachLassen Sie uns ein System für Schülerdatensätze erstellen, das alle Konzepte der Kapselung zusammenführt, die Sie in diesem Kapitel gelernt haben. Sie werden eine Student-Klasse erstellen, die sensible akademische Daten ordnungsgemäß schützt und gleichzeitig kontrollierten Zugriff über Getter, Setter und berechnete Eigenschaften bietet.
Sie werden Ihren Code in zwei Dateien organisieren:
student.dart: Definieren Sie eineStudent-Klasse, die akademische Datensätze mit ordnungsgemäßer Kapselung verwaltet:- Ein
final String id- die Schüler-ID sollte sich nach der Erstellung niemals ändern - Ein öffentlicher
String name- Namen können aktualisiert werden - Eine private
List<int> _grades- die rohe Notenliste sollte geschützt sein - Ein Konstruktor, der die id, den Namen und eine initiale Liste von Noten entgegennimmt
- Ein Getter
gradeCount, der zurückgibt, wie viele Noten aufgezeichnet wurden - Ein berechneter Getter
average, der den Durchschnitt aller Noten berechnet und alsdoublezurückgibt (geben Sie0.0zurück, wenn keine Noten vorhanden sind) - Ein berechneter Getter
letterGrade, der eine Note als Buchstaben basierend auf dem Durchschnitt zurückgibt:'A'für 90+,'B'für 80-89,'C'für 70-79,'D'für 60-69 und'F'für unter 60 - Eine Methode
addGrade(int grade), die nur Noten zwischen 0 und 100 (einschließlich) akzeptiert. Wenn gültig, fügen Sie die Note hinzu und geben SieGrade [grade] added for [name]aus. Wenn ungültig, geben SieInvalid grade: [grade]aus - Eine Methode
getHighestGrade(), die die höchste Note zurückgibt, oder0, wenn keine Noten vorhanden sind - Eine Methode
displayRecord(), die die akademische Zusammenfassung des Schülers anzeigt
- Ein
main.dart: Importieren Sie Ihre Student-Klasse und demonstrieren Sie die Kapselung in Aktion:- Erstellen Sie einen Schüler mit der id
'STU001', dem Namen'Emma'und den initialen Noten[85, 92, 78] - Rufen Sie
displayRecord()auf - Fügen Sie eine Note von
95hinzu - Versuchen Sie, eine ungültige Note von
150hinzuzufügen - Fügen Sie eine Note von
88hinzu - Rufen Sie
displayRecord()auf - Geben Sie
Highest grade: [highest]aus
- Erstellen Sie einen Schüler mit der id
Die Methode displayRecord() sollte in diesem Format drucken:
===== Student Record =====
ID: [id]
Name: [name]
Grades Recorded: [gradeCount]
Average: [average]
Letter Grade: [letterGrade]Erwartete Ausgabe:
===== Student Record =====
ID: STU001
Name: Emma
Grades Recorded: 3
Average: 85.0
Letter Grade: B
Grade 95 added for Emma
Invalid grade: 150
Grade 88 added for Emma
===== Student Record =====
ID: STU001
Name: Emma
Grades Recorded: 5
Average: 87.6
Letter Grade: B
Highest grade: 95Probier es selbst
import 'student.dart';
void main() {
// TODO: Erstelle einen Studenten mit der ID 'STU001', dem Namen 'Emma' und den Anfangsnoten [85, 92, 78]
// TODO: Rufe displayRecord() auf
// TODO: Füge eine Note von 95 hinzu
// TODO: Versuche, eine ungültige Note von 150 hinzuzufügen
// TODO: Füge eine Note von 88 hinzu
// TODO: Rufe displayRecord() auf
// TODO: Gib "Highest grade: [highest]" 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Übe selbstständig: Online-Dart-Compiler