Klasy książki i użytkownika
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 57 z 65.
Wyzwanie
ŁatwyDodaj klasy Book i User, każdą w osobnym pliku, i spraw, aby biblioteka je przechowywała. Zachowaj wszystko, co napisałeś w poprzednim kroku.
Book w pliku book.gd:
- Konstruktor przyjmuje
title,authoriisbn(wszystkie typuString) i zapisuje je we właściwościach o tych samych nazwach. availablema początkowo wartośćtrue, aborrower_id—""._to_string()zwracaTITLE by AUTHOR (ISBN: ISBN) - Available, a na końcuNot Available, gdyavailablema wartośćfalse.
User w pliku user.gd:
- Konstruktor przyjmuje
user_idiuser_namei zapisuje je. borrowed_isbnsto tablicaArray[String], która początkowo jest pusta._to_string()zwracaUser: NAME (ID: ID) - Books borrowed: N, gdzieNto rozmiarborrowed_isbns.
W pliku library.gd zmień books na Array[Book], a users na Array[User], i dodaj metody add_book(book: Book) oraz add_user(user: User), które dodają elementy do tych tablic.
Książka zapamiętuje wypożyczającego ją użytkownika za pomocą jego identyfikatora, a użytkownik zapamiętuje książki za pomocą ich ISBN-ów. Gdyby książka przechowywała obiekt User, a użytkownik obiekt Book, nawzajem utrzymywaliby się przy życiu, a Godot zgłosiłby wyciek pamięci po zakończeniu programu.
Dostarczony kod w pliku main.gd uległ zmianie: pola są teraz rozdzielone znakiem |. Dostępne polecenia to book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (ustawia bezpośrednio właściwości książki i użytkownika), books i users (wypisują każdą książkę lub każdego użytkownika) oraz show. Dla tego wejścia:
Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
showwynikiem jest:
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)Twój kod umieść w plikach book.gd, user.gd i library.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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()
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online