Sistema di prestito
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 103 di 110.
Sfida
FacileNella lezione precedente, hai creato le classi Book e User con proprietà di base. Ora è il momento di creare un vero sistema di prestito con una classe Library che gestisce l'intero processo di prestito.
Creerai un nuovo file e aggiornerai i file esistenti per implementare la logica dei prestiti:
book.dart: mantieni la classeBookesistente conisbn,title,author,isAvailableetoString().user.dart: mantieni la classeUseresistente conid,name,borrowedBooksetoString().library.dart: crea una nuova classeLibraryche gestisce libri e utenti. Dovrebbe avere due liste: una perbookse una perusers. Includi i metodi per:addBook(Book book)- aggiunge un libro alla raccolta della bibliotecaregisterUser(User user)- aggiunge un utente alla bibliotecaborrowBook(String isbn, String userId)- trova il libro e l'utente, quindi, se il libro esiste ed è disponibile e l'utente esiste, contrassegna il libro come non disponibile, lo aggiunge ai libri presi in prestito dall'utente e stampauserId borrowed "title". Se il libro non esiste, stampaBook not found. Se il libro non è disponibile, stampaBook not available. Se l'utente non esiste, stampaUser not found.returnBook(String isbn, String userId)- trova il libro e l'utente, quindi, se entrambi esistono e l'utente ha quel libro, contrassegna il libro come disponibile, lo rimuove dai libri presi in prestito dall'utente e stampauserId returned "title". Se il libro non esiste, stampaBook not found. Se l'utente non esiste, stampaUser not found.
main.dart: importa tutti i file e mostra il funzionamento del sistema di prestito. Crea unaLibrary, aggiungi due libri (978-0-13-468599-1,The Pragmatic Programmer,David Thomase978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford) e registra un utente (U001,Alice Johnson). Poi:- Presta il primo libro ad Alice
- Prova a prestare di nuovo lo stesso libro (dovrebbe fallire)
- Presta il secondo libro ad Alice
- Stampa Alice per mostrare il numero di libri che ha preso in prestito
- Restituisci il primo libro
- Stampa di nuovo Alice per mostrare il conteggio aggiornato
Output previsto:
U001 borrowed "The Pragmatic Programmer"
Book not available
U001 borrowed "JavaScript: The Good Parts"
User U001: Alice Johnson (2 books borrowed)
U001 returned "The Pragmatic Programmer"
User U001: Alice Johnson (1 books borrowed)Provalo tu
import 'book.dart';
import 'user.dart';
import 'library.dart';
void main() {
// TODO: Crea un'istanza di Library
// TODO: Crea due libri:
// - Book 1: isbn '978-0-13-468599-1', title 'The Pragmatic Programmer', author 'David Thomas'
// - Book 2: isbn '978-0-596-51774-8', title 'JavaScript: The Good Parts', author 'Douglas Crockford'
// TODO: Aggiungi entrambi i libri alla biblioteca
// TODO: Crea un utente con id 'U001' e nome 'Alice Johnson'
// TODO: Registra l'utente nella biblioteca
// TODO: Fai prendere in prestito il primo libro ad Alice
// TODO: Prova a prendere in prestito di nuovo lo stesso libro (l'operazione dovrebbe fallire con 'Book not available')
// TODO: Fai prendere in prestito il secondo libro ad Alice
// TODO: Stampa Alice per mostrare il numero di libri che ha preso in prestito
// TODO: Restituisci il primo libro
// TODO: Stampa di nuovo Alice per mostrare il conteggio aggiornato
}
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