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 pesquisa à sua classe Library. Agora vamos criar uma interface de administrador que permite que usuários com privilégios 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). SubstituatoString()para retornarAdmin [id]: name.library.dart: Adicione funcionalidades administrativas à sua classeLibrary:- Adicione uma lista para armazenar os 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, imprimaUnauthorized.removeBook(String adminId, String isbn)— se o administrador e o livro existirem, remove o livro da biblioteca e imprimeadminId removed "title". Se o administrador não existir, imprimaUnauthorized. Se o livro não existir, imprimaBook not found.getBookCount()— retorna o número total de livros na biblioteca
main.dart: Demonstre a interface de administrador. 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 o id de administrador não registradoA999. Remova o segundo livro usando o administrador registrado. Imprima a quantidade 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 OOP
Arquivos externosBibliotecas e importsIntrodução à OOPClasses vs. objetosA palavra-chave thisMétodosVariáveis de instânciaNoções básicas de construtoresRevisão - Calculadora simples4Segurança contra nulos
Introdução à segurança contra nulosAnulável vs. não anulávelOs operadores ? e !Palavra-chave Late e segurança contra nulosOperadores conscientes de nulosSegurança contra nulos em classesRecapitulação — Sistema de perfil de usuário7Classes Abstratas e Interfaces
Classes AbstratasMétodos AbstratosInterfaces em DartInterfaces ImplícitasImplementação vs. ExtensãoMúltiplas InterfacesRecapitulação - Calculadora de Formas10Coleções e Genéricos
Visão geral de List, Set e MapColeções com segurança de tiposClasses genéricasMétodos genéricosRestrições genéricasIterable e IteratorRecapitulação - Armazenamento genérico13Conceitos Avançados de OOP
Composição vs. HerançaMétodos de ExtensãoClasses ChamáveisClasses Seladas (Dart 3)Registros (Dart 3)Padrões e Correspondência (3.0)Enums com Métodos16Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses de Livros e Usuários2Construtores em Dart
Construtor padrãoConstrutores nomeadosListas de inicializaçãoConstrutores constantesConstrutores factoryConstrutores de redirecionamentoRevisão - Construtor de formas5Encapsulamento
Membros Públicos vs. PrivadosConvenção do Prefixo _Privacidade no Nível da BibliotecaAprofundamento em Getters e SettersOcultação de InformaçõesRecapitulação - Registros de Alunos8Mixins
Introdução a MixinsCriando MixinsUsando vários MixinsPalavra-chave on em MixinsMixin vs HerançaMixin vs InterfaceRecapitulação - Sistema de Animais11Métodos Especiais
Sobrescrita de toString()Sobrescrita de hashCode e ==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 e ConstVariáveis LateMétodos e Campos EstáticosGetters e SettersRecapitulação - Gerenciador de Contas Bancárias6Herança
Herança BásicaA Palavra-chave superSobrescrita de MétodosA Anotação @overrideA Palavra-chave final para ClassesConstrutores e HerançaRecapitulação - Hierarquia de Funcionários9Polimorfismo
Fundamentos do polimorfismoPolimorfismo por meio de interfacesVerificação de tipos em tempo de execuçãoOs operadores is e asPalavra-chave covarianteRecapitulação — Processador de pagamentos12OOP Assíncrona
Futures e async/awaitNoções básicas de StreamsControladores de StreamConstrutores assíncronosAsync em métodos de classeRecapitulação — Buscador de dados15Padrões de Projeto — Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão RepositoryPratique por conta própria: Compilador de Dart online