Recapitulação - Contador e Utilitário
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 19 de 87.
Desafio
FácilVamos construir um sistema completo que combina uma classe Counter para rastrear instâncias com uma classe utilitária MathUtils - reunindo tudo o que você aprendeu sobre variáveis estáticas, métodos estáticos, blocos estáticos e constantes.
Você criará três arquivos para organizar seu código:
Counter.java: Crie uma classe que rastreia quantas instâncias foram criadas:- Uma variável estática privada para contar o total de instâncias
- Uma variável de instância privada
idque armazena o identificador exclusivo de cada contador - Um construtor que incrementa a contagem total e atribui a contagem atual como o id desta instância
- Um método
getId()que retorna o id exclusivo deste contador - Um método estático
getTotalCount()que retorna quantos objetos Counter foram criados
MathUtils.java: Crie uma classe utilitária apenas com membros estáticos (nunca instanciada):- Uma constante pública
PIcom o valor3.14159 - Uma constante pública
HALFcom o valor0.5 - Um método estático
square(int n)que retorna n ao quadrado - Um método estático
cube(int n)que retorna n ao cubo - Um método estático
circleArea(double radius)que retorna PI * radius * radius
- Uma constante pública
Main.java: Demonstre ambas as classes trabalhando juntas. Você receberá duas entradas: um número para operações matemáticas e uma contagem de quantos objetos Counter devem ser criados. Imprima o seguinte:Square: [value]Cube: [value]Circle area (radius=[number]): [value](área formatada para 2 casas decimais)- Para cada Counter criado, imprima:
Counter [id] created - Finalmente:
Total counters: [count]
Você receberá duas entradas: um número (int) para os cálculos matemáticos e uma contagem (int) de quantos objetos Counter devem ser criados.
Lembre-se de acessar os membros estáticos através do nome da classe (como MathUtils.PI e Counter.getTotalCount()) e use String.format("%.2f", value) para formatar valores decimais.
Experimente você mesmo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
int count = scanner.nextInt();
// TODO: Use os métodos estáticos de MathUtils para calcular e imprimir:
// - Square: [value]
// - Cube: [value]
// - Circle area (radius=[number]): [value] (formatado para 2 casas decimais)
// TODO: Crie a quantidade 'count' de objetos Counter
// Para cada Counter criado, imprima: Counter [id] created
// TODO: Imprima o número total de contadores criados
// Total counters: [count]
}
}
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 Personalizada2Modificadores 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