Classi Libro e Utente
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 102 di 110.
Sfida
FacileNella lezione precedente, hai creato una classe Book con proprietà di base e un metodo toString(). Ora è il momento di ampliare il tuo sistema di biblioteca aggiungendo una classe User per rappresentare i membri della biblioteca che possono prendere in prestito i libri.
Dovrai creare un nuovo file e aggiornare quelli esistenti:
book.dart: migliora la classeBookesistente aggiungendo una proprietàisAvailable(booleano) che per impostazione predefinita ètrue. Questa proprietà servirà a tenere traccia della disponibilità di un libro per il prestito.user.dart: crea una nuova classeUserper rappresentare i membri della biblioteca. Ogni utente deve avere unid(String), unname(String) e un elencoborrowedBooksche contiene oggettiBook. Includi un costruttore che inizializzi l'id e il nome, con un elenco vuoto per i libri presi in prestito. SovrascrivitoString()in modo che restituisca il formatoUser [id]: name (X books borrowed), dove X è il numero di libri presi in prestito.main.dart: importa sia il file dei libri sia quello degli utenti. Crea un libro con ISBN978-0-13-468599-1, titoloThe Pragmatic Programmere autoreDavid Thomas. Crea un utente con idU001e nomeAlice Johnson. Stampa il libro, poi stampa se è disponibile usando il formatoAvailable: trueoppureAvailable: false. Stampa l'utente. Poi aggiungi il libro all'elenco dei libri presi in prestito dall'utente, impostaisAvailabledel libro sufalsee stampa di nuovo l'utente per mostrare il conteggio aggiornato dei libri.
In questo modo stabilisci la relazione tra libri e utenti, su cui potrai basarti per implementare il sistema completo di prestito nella prossima lezione!
Risultato previsto:
[978-0-13-468599-1] The Pragmatic Programmer by David Thomas
Available: true
User U001: Alice Johnson (0 books borrowed)
User U001: Alice Johnson (1 books borrowed)Provalo tu
import 'book.dart';
// TODO: Importa user.dart
void main() {
// TODO: Crea un libro con ISBN '978-0-13-468599-1', titolo 'The Pragmatic Programmer' e autore 'David Thomas'
// TODO: Crea un utente con id 'U001' e nome 'Alice Johnson'
// TODO: Stampa il libro
// TODO: Stampa se il libro è disponibile usando il formato: Available: true/false
// TODO: Stampa l'utente
// TODO: Aggiungi il libro alla lista borrowedBooks dell'utente
// TODO: Imposta isAvailable del libro su false
// TODO: Stampa di nuovo l'utente per mostrare il numero aggiornato 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