Классы книг и пользователей
Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 57 из 65.
Задание
ЛегкоДобавь классы Book и User, каждый в отдельном файле, и сделай так, чтобы библиотека хранила их. Сохрани всё, что ты написал на предыдущем шаге.
Book в book.gd:
- Конструктор принимает
title,authorиisbn(все типаString) и сохраняет их в свойствах с такими же именами. availableизначально имеет значениеtrue, аborrower_id—""._to_string()возвращаетTITLE by AUTHOR (ISBN: ISBN) - Available, а еслиavailableимеет значениеfalse, в конце выводитсяNot Available.
User в user.gd:
- Конструктор принимает
user_idиuser_nameи сохраняет их. borrowed_isbns— этоArray[String], изначально пустой._to_string()возвращаетUser: NAME (ID: ID) - Books borrowed: N, гдеN— размерborrowed_isbns.
В library.gd измени тип books на Array[Book], а users — на Array[User], и добавь методы add_book(book: Book) и add_user(user: User), которые добавляют элементы в соответствующие массивы.
Книга запоминает своего читателя по идентификатору пользователя, а пользователь запоминает книги по их ISBN. Если бы книга хранила объект User, а пользователь — объект Book, они поддерживали бы жизнь друг друга, и Godot сообщал бы об утечке памяти при завершении программы.
Предоставленный код в main.gd изменился: теперь поля разделяются символом |. Команды: book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (команда напрямую задаёт свойства книги и пользователя), books и users (выводят все книги или пользователей), а также show. Для такого ввода:
Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
showвывод будет таким:
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)Твой код нужно разместить в book.gd, user.gd и library.gd. В main.gd находится предоставленный код ввода и вывода, его нельзя редактировать.
Попробуйте сами
extends Node
func _ready():
# Предоставленный код ввода-вывода: оставьте его без изменений
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()
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript