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