Menu
CoddyTech

Classes de livros e usuários

Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 57 de 65.

challenge icon

Desafio

Fácil

Adicione as classes Book e User, cada uma em seu próprio arquivo, e faça com que a biblioteca as armazene. Mantenha tudo o que você escreveu na etapa anterior.

Book em book.gd:

  • O construtor recebe title, author e isbn (todos String) e os armazena em propriedades com os mesmos nomes.
  • available começa como true e borrower_id começa como "".
  • _to_string() retorna TITLE by AUTHOR (ISBN: ISBN) - Available, com Not Available no final quando available for false.

User em user.gd:

  • O construtor recebe user_id e user_name e os armazena.
  • borrowed_isbns é um Array[String] que começa vazio.
  • _to_string() retorna User: NAME (ID: ID) - Books borrowed: N, em que N é o tamanho de borrowed_isbns.

Em library.gd, altere books para um Array[Book] e users para um Array[User], e adicione os métodos add_book(book: Book) e add_user(user: User), que adicionam elementos a esses arrays.

Um livro guarda o id do usuário que o pegou emprestado, e um usuário guarda os livros pelo ISBN. Se o livro armazenasse o objeto User e o usuário armazenasse o objeto Book, um manteria o outro vivo, e o Godot os reportaria como vazamentos quando o programa terminasse.

O código fornecido em main.gd mudou: agora os campos são separados por |. Os comandos são book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (define diretamente as propriedades do livro e do usuário), books e users (imprime todos os livros ou usuários) e show. Para esta entrada:

Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
show

a saída é:

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)

Seu código deve ficar em book.gd, user.gd e library.gd. main.gd contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

extends Node

func _ready():
	# Código de entrada/saída fornecido: mantenha-o como está
	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()

Todas as lições de Programação orientada a objetos

Pratique por conta própria: Compilador de GDScript online