Admin-Interface
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 105 von 110.
Aufgabe
EinfachIn der vorherigen Lektion haben Sie Ihrer Library-Klasse eine Suchfunktion hinzugefügt. Lassen Sie uns nun eine Admin-Schnittstelle erstellen, die es privilegierten Benutzern ermöglicht, den Bestand der Bibliothek zu verwalten – also neue Bücher hinzuzufügen und vorhandene zu entfernen.
Sie werden eine neue Admin-Klasse einführen und Ihre Library um administrative Funktionen erweitern:
book.dart: Lassen Sie Ihre bestehendeBook-Klasse unverändert.user.dart: Lassen Sie Ihre bestehendeUser-Klasse unverändert.admin.dart: Erstellen Sie eine neueAdmin-Klasse, die Bibliotheksadministratoren repräsentiert. Ein Admin hat eineid(String) und einenname(String). Überschreiben SietoString(), umAdmin [id]: namezurückzugeben.library.dart: Fügen Sie IhrerLibrary-Klasse administrative Funktionen hinzu:- Fügen Sie eine Liste hinzu, um registrierte Admins zu speichern
registerAdmin(Admin admin)– fügt einen Admin zur Bibliothek hinzuaddBookAsAdmin(String adminId, Book book)– wenn der Admin existiert, fügt das Buch hinzu und gibtadminId added "title"aus. Wenn der Admin nicht existiert, geben SieUnauthorizedaus.removeBook(String adminId, String isbn)– wenn der Admin existiert und das Buch existiert, entfernen Sie das Buch aus der Bibliothek und geben SieadminId removed "title"aus. Wenn der Admin nicht existiert, geben SieUnauthorizedaus. Wenn das Buch nicht existiert, geben SieBook not foundaus.getBookCount()– gibt die Gesamtzahl der Bücher in der Bibliothek zurück
main.dart: Demonstrieren Sie die Admin-Schnittstelle. Erstellen Sie eineLibraryund registrieren Sie einen Admin (A001,Sarah Admin). Verwenden Sie den Admin, um drei Bücher hinzuzufügen:978-0-13-468599-1,The Pragmatic Programmer,David Thomas978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford978-0-13-235088-4,Clean Code,Robert Martin
Total books: Xaus. Versuchen Sie dann, ein Buch mit einer nicht registrierten Admin-IDA999hinzuzufügen. Entfernen Sie das zweite Buch mit dem registrierten Admin. Geben Sie die endgültige Anzahl der Bücher aus.
Erwartete Ausgabe:
A001 added "The Pragmatic Programmer"
A001 added "JavaScript: The Good Parts"
A001 added "Clean Code"
Total books: 3
Unauthorized
A001 removed "JavaScript: The Good Parts"
Total books: 2Probier es selbst
import 'book.dart';
import 'user.dart';
import 'library.dart';
import 'admin.dart';
void main() {
// TODO: Erstelle eine Library
// TODO: Erstelle und registriere einen Admin (A001, Sarah Admin)
// TODO: Verwende den Admin, um drei Bücher hinzuzufügen:
// - 978-0-13-468599-1, The Pragmatic Programmer, David Thomas
// - 978-0-596-51774-8, JavaScript: The Good Parts, Douglas Crockford
// - 978-0-13-235088-4, Clean Code, Robert Martin
// TODO: Gib die Anzahl der Bücher als "Total books: X" aus
// TODO: Versuche, ein Buch mit einer nicht registrierten Admin-ID A999 hinzuzufügen
// TODO: Entferne das zweite Buch (978-0-596-51774-8) unter Verwendung des registrierten Admins
// TODO: Gib die endgültige Anzahl der Bücher 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