Rückblick – Studierendendaten
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 35 von 110.
Aufgabe
EinfachLass uns ein System für Schülerdatensätze erstellen, das alle in diesem Kapitel erlernten Konzepte der Kapselung zusammenführt. Du erstellst eine Student-Klasse, die sensible akademische Daten ordnungsgemäß schützt und gleichzeitig kontrollierten Zugriff durch Getter, Setter und berechnete Eigenschaften ermöglicht.
Du organisierst deinen Code in zwei Dateien:
student.dart: Definiere eineStudent-Klasse, die akademische Datensätze mit ordnungsgemäßer Kapselung verwaltet:- Eine
final String id– die Schüler-ID sollte sich nach der Erstellung niemals ändern - Ein öffentliches
String name– Namen können aktualisiert werden - Eine private
List<int> _grades– die rohe Notenliste sollte geschützt werden - Einen Konstruktor, der die ID, den Namen und eine anfängliche Notenliste entgegennimmt
- Einen Getter
gradeCount, der zurückgibt, wie viele Noten erfasst wurden - Einen berechneten Getter
average, der den Durchschnitt aller Noten berechnet und alsdoublezurückgibt (gib0.0zurück, wenn keine Noten vorhanden sind) - Einen berechneten Getter
letterGrade, der basierend auf dem Durchschnitt eine Buchstabennote 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 weniger als 60 - Eine Methode
addGrade(int grade), die nur Noten zwischen 0 und 100 (einschließlich) akzeptiert. Wenn die Note gültig ist, füge sie hinzu und gibGrade [grade] added for [name]aus. Wenn sie ungültig ist, gibInvalid 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
- Eine
main.dart: Importiere deine Student-Klasse und demonstriere die Kapselung in der Praxis:- Erstelle einen Schüler mit der ID
'STU001', dem Namen'Emma'und den Anfangsnoten[85, 92, 78] - Rufe
displayRecord()auf - Füge die Note
95hinzu - Versuche, die ungültige Note
150hinzuzufügen - Füge die Note
88hinzu - Rufe
displayRecord()auf - Gib
Highest grade: [highest]aus
- Erstelle einen Schüler mit der ID
Die Methode displayRecord() sollte in diesem Format ausgeben:
===== 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 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