Buch- und Benutzerklassen
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 57 von 65.
Aufgabe
EinfachFüge die Klassen Book und User hinzu, jeweils in einer eigenen Datei, und sorge dafür, dass die Bibliothek sie speichert. Behalte alles bei, was du im vorherigen Schritt geschrieben hast.
Book in book.gd:
- Der Konstruktor nimmt
title,authorundisbn(alle vom TypString) entgegen und speichert sie in Eigenschaften mit denselben Namen. availablehat anfangs den Werttrueundborrower_idanfangs den Wert""._to_string()gibtTITLE by AUTHOR (ISBN: ISBN) - Availablezurück; wennavailableden Wertfalsehat, steht am EndeNot Available.
User in user.gd:
- Der Konstruktor nimmt
user_idunduser_nameentgegen und speichert sie. borrowed_isbnsist einArray[String], das anfangs leer ist._to_string()gibtUser: NAME (ID: ID) - Books borrowed: Nzurück, wobeiNdie Größe vonborrowed_isbnsist.
Ändere in library.gd books zu einem Array[Book] und users zu einem Array[User], und füge die Methoden add_book(book: Book) und add_user(user: User) hinzu, die die Elemente an die jeweiligen Arrays anhängen.
Ein Buch speichert den Ausleiher anhand der ID des Benutzers, und ein Benutzer speichert Bücher anhand ihrer ISBN. Wenn das Buch das User-Objekt und der Benutzer das Book-Objekt speichern würde, würden sie sich gegenseitig am Leben halten und Godot würde sie beim Beenden des Programms als Speicherlecks melden.
Der bereitgestellte Code in main.gd wurde geändert: Die Felder sind jetzt durch | getrennt. Die Befehle sind book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (damit werden die Eigenschaften des Buchs und des Benutzers direkt gesetzt), books und users (gibt jedes Buch bzw. jeden Benutzer aus) sowie show. Für diese Eingabe:
Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
showlautet die Ausgabe:
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)Dein Code gehört in book.gd, user.gd und library.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
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()
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler