Classi Libro e Utente
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 57 di 65.
Sfida
FacileAggiungi le classi Book e User, ciascuna nel proprio file, e fai in modo che la biblioteca le memorizzi. Mantieni tutto ciò che hai scritto nel passaggio precedente.
Book in book.gd:
- Il costruttore accetta
title,authoreisbn(tuttiString) e li memorizza in proprietà con gli stessi nomi. availableinizia cometrueeborrower_idinizia come""._to_string()restituisceTITLE by AUTHOR (ISBN: ISBN) - Available, conNot Availablealla fine quandoavailableèfalse.
User in user.gd:
- Il costruttore accetta
user_ideuser_namee li memorizza. borrowed_isbnsè unArray[String]che inizia vuoto._to_string()restituisceUser: NAME (ID: ID) - Books borrowed: N, doveNè la dimensione diborrowed_isbns.
In library.gd, modifica books in un Array[Book] e users in un Array[User], e aggiungi i metodi add_book(book: Book) e add_user(user: User), che vi aggiungono gli elementi.
Un libro memorizza l'identificativo dell'utente che lo ha preso in prestito, mentre un utente memorizza i libri tramite il loro ISBN. Se il libro memorizzasse l'oggetto User e l'utente memorizzasse l'oggetto Book, i due si manterrebbero reciprocamente in vita e Godot li segnalerebbe come perdite di memoria alla fine del programma.
Il codice fornito in main.gd è cambiato: i campi sono ora separati da |. I comandi sono book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (imposta direttamente le proprietà del libro e dell'utente), books e users (stampa ogni libro o utente) e show. Per questo input:
Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
showl'output è:
Dune by Frank Herbert (ISBN: 111) - Not Available
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 1
Riverside Library (books: 1, users: 2)Il tuo codice va in book.gd, user.gd e library.gd. main.gd contiene il codice fornito per input/output e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Codice di input/output fornito: lascialo così com'è
var library := Library.new(OS.read_string_from_stdin())
var line := OS.read_string_from_stdin()
while line != "":
var parts := line.split(" ", true, 1)
var fields: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
match parts[0]:
"book":
library.add_book(Book.new(fields[0], fields[1], fields[2]))
"user":
library.add_user(User.new(fields[0], fields[1]))
"lend":
for book in library.books:
if book.isbn == fields[0]:
book.available = false
book.borrower_id = fields[1]
for user in library.users:
if user.user_id == fields[1]:
user.borrowed_isbns.append(fields[0])
"books":
for book in library.books:
print(book)
"users":
for user in library.users:
print(user)
"show":
print(library)
line = OS.read_string_from_stdin()
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online