Classes Livre et Utilisateur
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 57 sur 65.
Défi
FacileAjoutez les classes Book et User, chacune dans son propre fichier, et faites en sorte que la bibliothèque les stocke. Conservez tout ce que vous avez écrit à l’étape précédente.
Book dans book.gd :
- Le constructeur prend
title,authoretisbn(tous de typeString) et les stocke dans des propriétés portant les mêmes noms. availablevauttrueau départ etborrower_idvaut""au départ._to_string()renvoieTITLE by AUTHOR (ISBN: ISBN) - Available, avecNot Availableà la fin lorsqueavailablevautfalse.
User dans user.gd :
- Le constructeur prend
user_idetuser_nameet les stocke. borrowed_isbnsest unArray[String]qui est vide au départ._to_string()renvoieUser: NAME (ID: ID) - Books borrowed: N, oùNcorrespond à la taille deborrowed_isbns.
Dans library.gd, remplacez books par un Array[Book] et users par un Array[User], puis ajoutez les méthodes add_book(book: Book) et add_user(user: User), qui ajoutent les éléments à ces tableaux.
Un livre mémorise l'identifiant de son emprunteur, et un utilisateur mémorise les livres à l'aide de leur ISBN. Si le livre stockait l'objet User et que l'utilisateur stockait l'objet Book, ils se maintiendraient mutuellement en vie et Godot signalerait une fuite à la fin du programme.
Le code fourni dans main.gd a changé : les champs sont maintenant séparés par |. Les commandes sont book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (cette commande définit directement les propriétés du livre et de l'utilisateur), books et users (affichent chaque livre ou utilisateur), ainsi que show. Pour cette entrée :
Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
showla sortie est :
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)Votre code doit être écrit dans book.gd, user.gd et library.gd. main.gd contient le code fourni pour les entrées et sorties et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d'entrée/sortie fourni : conservez-le tel quel
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()
Toutes les leçons de Programmation orientée objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes11Projet : Gestion de bibliothèque
Présentation du projetClasses Livre et Utilisateur3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne