Nesta avaliação, você deverá implementar um sistema simples de gerenciamento de biblioteca utilizando TypeScript e os conceitos de Programação Orientada a Objetos. Crie os arquivos necessários para implementar as classes e interfaces solicitadas, seguindo os requisitos abaixo.
Propriedades: id (number), titulo (string), ano (number) Método abstrato: exibirDetalhes(): string
Livro: com propriedades adicionais como autor (string), editora (string), numeroPaginas (number) Revista: com propriedades adicionais como edicao (number), periodicidade (string)
- Propriedades privadas: _id (number), _nome (string), _email (string), _telefone (string), _itensEmprestados (Item[])
- Getters e setters adequados para todas as propriedades, com validação no setter de email
- Método para emprestar um item emprestarItem(item: Item): boolean
- Método para devolver um item devolverItem(id: number): boolean
Método pesquisar(termo: string): boolean
- Mantém um array de itens (Item[])
- Implementa um método que utilize polimorfismo: buscarItens(termo: string): Item[] que retorna todos os itens que correspondem ao termo de busca
Crie uma classe LivroDigital que herda de Livro:
- Propriedades adicionais: formato (string), tamanhoMB (number), linkDownload (string)
- Sobrescreva o método exibirDetalhes() para incluir as informações específicas
No arquivo principal (index.ts):
- Crie instâncias de pelo menos 2 livros, 1 revista e 1 livro digital
- Crie 2 usuários
- Realize operações de empréstimo e devolução
- Demonstre o polimorfismo usando o método de busca da biblioteca
- Item.ts - Para a classe abstrata Item
- Livro.ts e Revista.ts - Para as classes que herdam de Item
- LivroDigital.ts - Para a classe que herda de Livro
- Usuario.ts - Para a classe Usuario
- Biblioteca.ts - Para a classe Biblioteca
- index.ts - Arquivo principal para demonstrar o funcionamento
- Implementação correta de abstração (10%)
- Uso adequado de herança (10%)
- Encapsulamento correto (15%)
- Aplicação de polimorfismo (15%)
- Uso adequado de interfaces (10%)
- Implementação dos métodos solicitados (20%)
- Funcionamento correto do sistema (10%)
- Organização e clareza do código (10%)