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.
Desafio
FácilAdicione 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,authoreisbn(todosString) e os armazena em propriedades com os mesmos nomes. availablecomeça comotrueeborrower_idcomeça como""._to_string()retornaTITLE by AUTHOR (ISBN: ISBN) - Available, comNot Availableno final quandoavailableforfalse.
User em user.gd:
- O construtor recebe
user_ideuser_namee os armazena. borrowed_isbnsé umArray[String]que começa vazio._to_string()retornaUser: NAME (ID: ID) - Books borrowed: N, em queNé o tamanho deborrowed_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
showa 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
1Fundamentos da POO
Arquivos externosIntrodução à POOClasses vs. objetosA palavra-chave selfMétodosPropriedadesConstrutor (_init)Revisão - Calculadora simples4Polimorfismo
Revisitando a Sobrescrita de MétodosDuck TypingClasses e Métodos AbstratosDesign de InterfacesRevisão - Calculadora de Formas7Sinais
O que é um sinal?Declarando e emitindoConectando-se a sinaisSinais com argumentosRevisão - Sistema de saúde10Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite2Propriedades de Classe
Variáveis de Instância vs. EstáticasFunções EstáticasMétodos Setters de PropriedadeMétodos Getters de PropriedadePrivado por ConvençãoRecapitulando: Gerenciador de Conta Bancária5Encapsulamento
Membros públicos e privadosValidação com settersOcultação de informaçõesPropriedades somente para leituraRevisão - Sistema de registros de alunos8Conceitos Avançados de POO
Composição vs. HerançaClasses InternasNós como ComponentesRefCounted vs. NodeEnums em Classes11Projeto: Gestão de Biblioteca
Visão geral do projetoClasses de livros e usuários3Herança
Herança básicaA palavra-chave superSobrescrita de métodosCadeias de herançaVerificações de tipo com isRevisão - Hierarquia de funcionários6Métodos especiais
Introdução aos métodos virtuaisO método _to_stringIteradores personalizadosRevisão - Lista personalizada9Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de GDScript online