Interface Administrativa
Parte da seção Programação Orientada a Objetos do Journey de Dart da Coddy — lição 105 de 110.
Desafio
FácilNa lição anterior, você adicionou a funcionalidade de busca à sua classe Library. Agora, vamos criar uma interface de administrador que permite que usuários privilegiados gerenciem o inventário da biblioteca - adicionando novos livros e removendo os existentes.
Você introduzirá uma nova classe Admin e aprimorará sua Library com recursos administrativos:
book.dart: Mantenha sua classeBookexistente inalterada.user.dart: Mantenha sua classeUserexistente inalterada.admin.dart: Crie uma nova classeAdminque represente os administradores da biblioteca. Um administrador possui umid(String) e umname(String). Sobrescreva o métodotoString()para retornarAdmin [id]: name.library.dart: Adicione funcionalidades administrativas à sua classeLibrary:- Adicione uma lista para armazenar administradores registrados
registerAdmin(Admin admin)- adiciona um administrador à bibliotecaaddBookAsAdmin(String adminId, Book book)- se o administrador existir, adiciona o livro e imprimeadminId added "title". Se o administrador não existir, imprimeUnauthorized.removeBook(String adminId, String isbn)- se o administrador existir e o livro existir, remove o livro da biblioteca e imprimeadminId removed "title". Se o administrador não existir, imprimeUnauthorized. Se o livro não existir, imprimeBook not found.getBookCount()- retorna o número total de livros na biblioteca
main.dart: Demonstre a interface administrativa. Crie umaLibrarye registre um administrador (A001,Sarah Admin). Use o administrador para adicionar três livros:978-0-13-468599-1,The Pragmatic Programmer,David Thomas978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford978-0-13-235088-4,Clean Code,Robert Martin
Total books: X. Em seguida, tente adicionar um livro com um id de administrador não registradoA999. Remova o segundo livro usando o administrador registrado. Imprima a contagem final de livros.
Saída esperada:
A001 added "The Pragmatic Programmer"
A001 added "JavaScript: The Good Parts"
A001 added "Clean Code"
Total books: 3
Unauthorized
A001 removed "JavaScript: The Good Parts"
Total books: 2Experimente você mesmo
import 'book.dart';
import 'user.dart';
import 'library.dart';
import 'admin.dart';
void main() {
// TODO: Criar uma Biblioteca
// TODO: Criar e registrar um administrador (A001, Sarah Admin)
// TODO: Usar o administrador para adicionar três livros:
// - 978-0-13-468599-1, The Pragmatic Programmer, David Thomas
// - 978-0-596-51774-8, JavaScript: The Good Parts, Douglas Crockford
// - 978-0-13-235088-4, Clean Code, Robert Martin
// TODO: Imprimir a contagem de livros como "Total books: X"
// TODO: Tentar adicionar um livro com um id de administrador não registrado A999
// TODO: Remover o segundo livro (978-0-596-51774-8) usando o administrador registrado
// TODO: Imprimir a contagem final de livros
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosBibliotecas e ImportaçõesIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosVariáveis de InstânciaFundamentos de ConstrutoresRecapitulação - Calculadora Simples4Null Safety
Introdução ao Null SafetyNullable vs Non-NullableOs Operadores ? e !Palavra-chave Late e Null SafetyOperadores Null-AwareNull Safety em ClassesRecapitulação - Sistema de Perfil de Usuário7Classes Abstratas e Interfaces
Classes AbstratasMétodos AbstratosInterfaces em DartInterfaces ImplícitasImplementando vs EstendendoMúltiplas InterfacesRecapitulação - Calculadora de Formas10Coleções e Generics
Visão Geral de List, Set e MapColeções Type-SafeClasses GenéricasMétodos GenéricosRestrições de GenericsIterable e IteratorRecapitulação - Armazenamento Genérico13Conceitos Avançados de POO
Composição vs HerançaMétodos de ExtensãoClasses ChamáveisClasses Seladas (Dart 3)Records (Dart 3)Patterns & Matching (3.0)Enums com Métodos16Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário2Construtores em Dart
Construtor PadrãoConstrutores NomeadosListas de InicializaçãoConstrutores ConstantesConstrutores FactoryConstrutores de RedirecionamentoRecapitulação - Shape Builder5Encapsulamento
Membros Públicos vs PrivadosA Convenção do Prefixo _Privacidade em Nível de BibliotecaAprofundamento em Getters & SettersOcultação de InformaçãoRecapitulação - Registros de Estudantes8Mixins
Introdução aos MixinsCriando MixinsUsando Múltiplos MixinsPalavra-chave on em MixinsMixin vs HerançaMixin vs InterfaceRecapitulação - Sistema Animal11Métodos Especiais
Sobrescrita de toString()Sobrescrita de hashCode & ==Interface ComparableMétodo call()Sobrescrita de noSuchMethodRecapitulação - Coleção Personalizada14Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy3Propriedades de Classe
Membros de Instância vs EstáticosCampos Final & ConstVariáveis LateMétodos e Campos EstáticosGetters e SettersRecapitulação - Gerenciador de Conta Bancária6Herança
Herança BásicaA Palavra-chave superSobrescrita de MétodoA Anotação @overrideA Palavra-chave final para ClassesConstrutores e HerançaRecapitulação - Hierarquia de Funcionários9Polimorfismo
Fundamentos do PolimorfismoPolimorfismo via InterfacesVerificação de Tipos em Tempo de ExecuçãoOs Operadores is & asPalavra-chave CovariantRecapitulação - Processador de Pagamentos12POO Assíncrona
Futures e async/awaitFundamentos de StreamsStream ControllersConstrutores AssíncronosAsync em Métodos de ClasseRecapitulação - Data Fetcher15Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Repository