Classes Livro e Usuário
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: Melhore sua classeBookexistente adicionando uma propriedadeisAvailable(booleana) que tem como padrãotrue. Isso rastreará se um livro pode ser emprestado.user.dart: Crie uma nova classeUserpara representar os membros da biblioteca. Cada usuário deve ter umid(String),name(String) e uma listaborrowedBooksque contém objetosBook. Inclua um construtor que inicialize o id e o nome, com uma lista vazia para os livros emprestados. SobrescrevatoString()para retornar o formatoUser [id]: name (X books borrowed)onde X é a contagem de livros emprestados.main.dart: Importe os arquivos do livro e do 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. Em seguida, adicione o livro à lista de livros emprestados do usuário, defina oisAvailabledo livro comofalsee imprima o usuário novamente para mostrar a contagem de livros atualizada.
Isso estabelece o relacionamento entre livros e usuários que você desenvolverá ao implementar o sistema de empréstimo completo 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 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