Livros e Membros
Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 50 de 57.
Neste projeto, você construirá o núcleo de um sistema de biblioteca. Uma classe Library recebe comandos, um por linha, e responde a cada um deles. Ao longo de cinco etapas, ela aprende a adicionar livros e membros, emprestar e devolver livros, pesquisar no catálogo e imprimir um relatório.
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTO modelo de dados usa as ferramentas desta seção. Book é uma struct: um valor cujo borrower muda. Member é uma classe, porque a biblioteca e a lista de empréstimos de um membro referem-se à mesma pessoa. A biblioteca mantém ambos em dicionários privados, portanto apenas seus métodos podem alterá-los:
struct Book {
let id: Int
let title: String
var borrower: String? = nil
var isAvailable: Bool { borrower == nil }
}
var books: [Int: Book] = [:]
books[1] = Book(id: 1, title: "Dune")
books[1]!.borrower = "ada"
print(books[1]!.isAvailable)Saída:
falsehandle(_:) divide o comando e verifica sua primeira palavra. Cada ramificação retorna suas respostas como um array, portanto um comando como REPORT pode responder com várias linhas. O título de um livro pode conter espaços, então ele corresponde a tudo após o id:
let p = "ADD_BOOK 7 The Hobbit".split(separator: " ").map(String.init)
let id = Int(p[1])!
let title = p.dropFirst(2).joined(separator: " ")
print("\(id): \(title)")Saída:
7: The HobbitDesafio
FácilImplemente Library.handle(_:) para os dois primeiros comandos:
ADD_BOOK <id> <title>: armazene um novo livro disponível e respondaadded book 1: Dune; quando o id já estiver em uso, respondabook 1 exists.JOIN <name>: adicione um membro e respondawelcome ada; quando o nome já existir, respondaada is already a member.
O código fornecido passa cada linha de entrada para library.handle(_:) e imprime cada resposta retornada em sua própria linha. Os nomes dos membros são palavras únicas em minúsculas, os ids dos livros são números inteiros, e a entrada contém apenas os comandos descritos até o momento. Qualquer outro comando responde unknown command.
Seu código deve ficar em Book.swift, Member.swift e Library.swift. main.swift contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
// Código de entrada/saída fornecido: mantenha-o como está
var input: [String] = []
while let line = readLine() { input.append(line) }
let library = Library()
for line in input {
for reply in library.handle(line) { print(reply) }
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesMétodos e selfInicializadoresClasses são ReferênciasRevisão - Cartão da Biblioteca4Encapsulamento
Controle de AcessoSomente Leitura ExternaProtegendo o EstadoInicializadores que Podem FalharRevisão - Conta Bancária7Polimorfismo e Genéricos
PolimorfismoConversão de TiposFunções GenéricasTipos GenéricosRevisão - Calculadora de Formas2Structs e Tipos de Valor
StructsSemântica de ValorMétodos MutáveisStruct ou ClasseRecapitulação - Item de Inventário5Herança
SubclassesSobrescrita de métodosInicializadores e superfinal e hierarquiasRecapitulação - Hierarquia de funcionários8Protocolos Padrão
CustomStringConvertibleEquatableComparableHashableRecapitulação - Ordenação Personalizada11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Swift