Biblioteca
Um catálogo em terminal para explorar contratos e polimorfismo.
Fluxo resumido a partir da implementação revisada. Os detalhes e limites estão nas seções abaixo; esta visualização não é screenshot de produção ou prova de desempenho medido.
Objetivo do exercício
Biblioteca implementa um gerenciador de catálogo e estoque no terminal. Livros físicos e e-books compartilham operações de exibição e atualização, enquanto o menu permite cadastrar, listar, vender e excluir itens.
O foco é aprender organização de objetos e contratos de software em um domínio pequeno. É um exercício de programação, não um sistema completo de empréstimos ou gestão bibliotecária institucional.
Interface comum e tipos concretos
ILivro define atributos e métodos esperados. LivroFisico e Ebook implementam o contrato; o e-book acrescenta tamanho de arquivo, mantendo uma interface utilizável pelo gerenciador.
A lista de ILivro permite tratar objetos diferentes pelas mesmas operações. A exibição usa o comportamento de cada classe, tornando o polimorfismo observável sem condicionar todas as ações ao tipo concreto.
Regras de catálogo e estoque
GerenciadorLivraria busca itens por ISBN e recusa cadastro duplicado. Venda consulta estoque e atualiza a quantidade quando a condição implementada é satisfeita; exclusão remove o item encontrado.
Esses métodos centralizam regras em vez de repeti-las no menu. Ainda é necessário validar quantidades positivas, limites e dados obrigatórios; tipagem não impede automaticamente toda entrada inválida no terminal.
CLI e interação síncrona
readline-sync recebe opções e valores em um loop de menu. Cada opção chama uma operação e apresenta seu resultado, mantendo a interação legível para quem acompanha o exercício.
A leitura é bloqueante e adequada ao fluxo local demonstrativo. Uma API ou interface gráfica precisaria de outro adapter de entrada, sem necessariamente reescrever todas as regras do catálogo.
Persistência e limites atuais
Os itens ficam em um array do gerenciador e exemplos são inseridos ao iniciar. O estado existe apenas durante o processo; não há banco, arquivo persistente ou controle simultâneo de múltiplos usuários.
Essa limitação mantém o exercício focado em OOP. Separar persistência por interface seria uma evolução coerente, permitindo testes e armazenamento sem misturar SQL ao menu.
Aprendizado e verificação futura
O projeto demonstra classes, interfaces, coleções, busca, controle de fluxo e contratos de domínio. A revisão inspecionou o programa sem atribuir cobertura automatizada inexistente.
Próximos passos incluem testes de duplicação, venda e estoque insuficiente, validação de entradas e separação entre regra e console. O repositório público documenta a base desse aprendizado.