Visão Geral do Projeto e Modelagem UML
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 77 de 87.
Desafio
FácilVamos dar o pontapé inicial no projeto do Sistema de Gerenciamento de Biblioteca construindo a base — as classes de entidade principais das quais tudo o mais dependerá. Este primeiro desafio foca na criação de classes Book e User bem estruturadas que seguem o design UML da lição.
Você organizará seu código em três arquivos:
Book.java: Crie a classeBookque representa um livro da biblioteca. Cada livro deve ter campos privados paraisbn(String),title(String),author(String) eisAvailable(boolean, com valor padrãotrue). Inclua um construtor que aceite isbn, title e author. Forneça métodos getter apropriados para todos os campos e um setter paraisAvailable. Adicione um métodogetDetails()que retorne uma string formatada:[isbn] title by author.User.java: Crie a classeUserrepresentando um membro da biblioteca. Cada usuário deve ter campos privados paraid(String) ename(String). Inclua um construtor que aceite ambos os valores e forneça métodos getter para cada campo. Adicione um métodotoString()que retorne:User[id]: name.Main.java: Reúna suas classes para demonstrar que elas funcionam corretamente. Você receberá quatro entradas: o ISBN de um livro, título, autor e, em seguida, o ID e o nome de um usuário.Crie um
Bookcom as três primeiras entradas e umUsercom as duas últimas entradas. Imprima os detalhes do livro usandogetDetails(), depois imprima se o livro está disponível no formatoAvailable: trueouAvailable: false. Por fim, imprima o usuário usando seu métodotoString().
Você receberá cinco entradas em ordem: ISBN (String), title (String), author (String), user ID (String) e user name (String).
Por exemplo, com as entradas 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 e Alice Smith, sua saída seria:
[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
User[U001]: Alice SmithEssas classes fundamentais servirão como os blocos de construção para todo o Sistema de Gerenciamento de Biblioteca. Nas próximas lições, você as estenderá com funcionalidades de empréstimo, recursos de busca e muito mais!
Experimente você mesmo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Ler informações do livro
String isbn = scanner.nextLine();
String title = scanner.nextLine();
String author = scanner.nextLine();
// Ler informações do usuário
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// TODO: Criar um objeto Book com isbn, title, e author
// TODO: Criar um objeto User com userId e userName
// TODO: Imprimir os detalhes do livro usando getDetails()
// TODO: Imprimir se o livro está disponível (formato: "Available: true" ou "Available: false")
// TODO: Imprimir o usuário usando toString()
}
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosCampos (Atributos)Método ConstrutorSobrecarga de ConstrutorRecapitulação - Calculadora Simples4Herança
Herança Básica (extends)A Palavra-chave superSobrescrita de Método (@Override)Encadeamento de ConstrutoresA Classe ObjectHerança Simples e MultinívelPor que não há Herança Múltipla de ClassesRecapitulação - Hierarquia de Funcionários7Métodos Especiais e a Classe Object
Método toString()equals() e hashCode()Método clone()compareTo() e ComparableInterface ComparatorRecapitulação - Ordenação Personalizada10Tratamento de Exceções em POO
Hierarquia de Classes de ExceçãoExceções PersonalizadasErros Checked vs UncheckedPadrão Try With ResourcesRecapitulação - Usuário Validado13Projeto: Gerenciamento de Biblioteca
Visão Geral do Projeto e Modelagem UMLClasses Livro e Usuário2Modificadores de Acesso e Encapsulamento
Visão Geral dos Níveis de AcessoMétodos Getter e SetterOcultação de InformaçõesA Palavra-chave finalRecapitulação - Gerenciador de Conta Bancária5Polimorfismo
Fundamentos de Sobrecarga de MétodosSobrescrita de Métodos (Tempo de Execução)Upcasting e DowncastingO Operador instanceofClasses e Métodos AbstratosRecapitulação - Calculadora de Formas8Conceitos Avançados de OOP
Composição vs HerançaAgregação vs ComposiçãoClasses Internas, Aninhadas e AnônimasEnums e Métodos de EnumRecords (Java 16+)Classes Seladas (Java 17+)11Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão BuilderPadrão ObserverPadrão Strategy3Propriedades de Classe e Membros Estáticos
Variáveis de Instância vs EstáticasMétodos EstáticosBlocos EstáticosConstantes (static final)Recapitulação - Contador e Utilitário6Interfaces e Classes Abstratas
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesDefault e Static em InterfacesClasses Abstratas vs InterfacesInterfaces FuncionaisRecapitulação - Sistema de Pagamento9Generics
Introdução a GenericsClasses GenéricasMétodos GenéricosParâmetros de Tipos DelimitadosWildcards (?, extends, super)Recapitulação - Container Genérico12Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Iterator