Interfaccia amministratore
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 105 di 110.
Sfida
FacileNella lezione precedente, hai aggiunto la funzionalità di ricerca alla tua classe Library. Ora creiamo un'interfaccia di amministrazione che consenta agli utenti privilegiati di gestire l'inventario della biblioteca, aggiungendo nuovi libri e rimuovendo quelli esistenti.
Introdurrai una nuova classe Admin e arricchirai la tua Library con funzionalità amministrative:
book.dart: mantieni invariata la classeBookesistente.user.dart: mantieni invariata la classeUseresistente.admin.dart: crea una nuova classeAdminche rappresenta gli amministratori della biblioteca. Un amministratore ha unid(String) e unname(String). SovrascrivitoString()in modo che restituiscaAdmin [id]: name.library.dart: aggiungi funzionalità amministrative alla tua classeLibrary:- Aggiungi una lista per memorizzare gli amministratori registrati
registerAdmin(Admin admin)- aggiunge un amministratore alla bibliotecaaddBookAsAdmin(String adminId, Book book)- se l'amministratore esiste, aggiunge il libro e stampaadminId added "title". Se l'amministratore non esiste, stampaUnauthorized.removeBook(String adminId, String isbn)- se l'amministratore esiste e il libro esiste, rimuove il libro dalla biblioteca e stampaadminId removed "title". Se l'amministratore non esiste, stampaUnauthorized. Se il libro non esiste, stampaBook not found.getBookCount()- restituisce il numero totale di libri nella biblioteca
main.dart: mostra l'interfaccia di amministrazione. Crea unaLibrarye registra un amministratore (A001,Sarah Admin). Usa l'amministratore per aggiungere tre libri: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: X. Poi prova ad aggiungere un libro con l'id di un amministratore non registratoA999. Rimuovi il secondo libro usando l'amministratore registrato. Stampa il numero finale dei libri.
Output previsto:
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: 2Provalo tu
import 'book.dart';
import 'user.dart';
import 'library.dart';
import 'admin.dart';
void main() {
// TODO: Crea una Library
// TODO: Crea e registra un admin (A001, Sarah Admin)
// TODO: Usa l'admin per aggiungere tre libri:
// - 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: Stampa il numero di libri nel formato "Total books: X"
// TODO: Prova ad aggiungere un libro con l'id admin A999 non registrato
// TODO: Rimuovi il secondo libro (978-0-596-51774-8) usando l'admin registrato
// TODO: Stampa il numero finale di libri
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online