Classes de Livros e Usuários
Parte da seção Programação Orientada a Objetos do Journey de Dart da Coddy. Lição 102 de 110.
Desafio
FácilNa lição anterior, você criou uma classe Book com propriedades básicas e um método toString(). Agora é hora de expandir seu sistema de biblioteca adicionando uma classe User para representar os membros da biblioteca que podem pegar livros emprestados.
Você precisará criar um novo arquivo e atualizar seus arquivos existentes:
book.dart: aprimore sua classeBookexistente adicionando uma propriedadeisAvailable(booleano) que tenha como padrãotrue. Isso controlará se um livro pode ser emprestado.user.dart: crie uma nova classeUserpara representar os membros da biblioteca. Cada usuário deve ter umid(String), umname(String) e uma listaborrowedBooksque contenha objetosBook. Inclua um construtor que inicialize o id e o name, com uma lista vazia para os livros emprestados. SubstituatoString()para retornar o formatoUser [id]: name (X books borrowed), em que X é a quantidade de livros emprestados.main.dart: importe os arquivos de livro e usuário. Crie um livro com ISBN978-0-13-468599-1, títuloThe Pragmatic Programmere autorDavid Thomas. Crie um usuário com idU001e nomeAlice Johnson. Imprima o livro e, em seguida, imprima se ele está disponível usando o formatoAvailable: trueouAvailable: false. Imprima o usuário. Depois, adicione o livro à lista de livros emprestados do usuário, defina oisAvailabledo livro comofalsee imprima o usuário novamente para mostrar a contagem atualizada de livros.
Isso estabelece a relação entre livros e usuários sobre a qual você se baseará ao implementar o sistema completo de empréstimos na próxima lição!
Saída esperada:
[978-0-13-468599-1] The Pragmatic Programmer by David Thomas
Available: true
User U001: Alice Johnson (0 books borrowed)
User U001: Alice Johnson (1 books borrowed)Experimente você mesmo
import 'book.dart';
// TODO: Importar user.dart
void main() {
// TODO: Criar um livro com ISBN '978-0-13-468599-1', title 'The Pragmatic Programmer' e author 'David Thomas'
// TODO: Criar um usuário com id 'U001' e name 'Alice Johnson'
// TODO: Imprimir o livro
// TODO: Imprimir se o livro está disponível usando o formato: Available: true/false
// TODO: Imprimir o usuário
// TODO: Adicionar o livro à lista borrowedBooks do usuário
// TODO: Definir o isAvailable do livro como false
// TODO: Imprimir o usuário novamente para mostrar a contagem de livros atualizada
}
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