Recapitulação - Calculadora de Formas
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy. Lição 33 de 87.
Desafio
FácilVamos criar uma calculadora de formas que reúne todos os conceitos de polimorfismo que você aprendeu neste capítulo. Você criará uma classe abstrata Shape com subclasses concretas e, em seguida, usará o polimorfismo para calcular e exibir áreas de maneira uniforme.
Você organizará seu código em quatro arquivos:
Shape.java: crie uma classe abstrata que sirva como base para todas as formas. Toda forma tem um camponame(String). Inclua um construtor para inicializá-lo, um método gettergetName()e um método abstratogetArea()que retorne um double. Adicione também um métododescribe()que retorne:[name]: [area](em que area é formatada com 2 casas decimais usandoString.format("%.2f", getArea())).Circle.java: crie uma classe concreta que estenda Shape. Os círculos têm um camporadius(double). Usesuperpara passar "Circle" como nome. ImplementegetArea()para retornar a área usandoMath.PI * radius * radius.Rectangle.java: crie outra classe concreta que estenda Shape. Os retângulos têm os camposwidtheheight(ambos double). Passe "Rectangle" como nome para o construtor da classe pai. ImplementegetArea()para retornar width multiplicado por height.Main.java: crie uma calculadora de formas que demonstre o polimorfismo em ação. Você receberá três entradas: um raio para o círculo, uma largura e uma altura para o retângulo.Crie um Circle e um Rectangle e, em seguida, armazene-os em um array de referências
Shape. Percorra o array e, para cada forma, imprima sua descrição usando o métododescribe().Após o loop, calcule e imprima a área total de todas as formas no formato:
Total area: [sum](também formatada com 2 casas decimais). Use um loop separado ou um acumulador para somar as áreas chamandogetArea()em cada referência de forma.
Você receberá três entradas: o raio do círculo (double), a largura do retângulo (double) e a altura do retângulo (double).
Sua saída deve exibir três linhas — uma descrição para cada forma, seguida pela área total. Observe como você pode tratar diferentes formas de maneira uniforme por meio do tipo abstrato Shape, enquanto cada forma calcula sua área à sua própria maneira!
Experimente você mesmo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Ler as entradas
double radius = scanner.nextDouble();
double width = scanner.nextDouble();
double height = scanner.nextDouble();
// TODO: Criar um objeto Circle usando o radius
// TODO: Criar um objeto Rectangle usando width e height
// TODO: Criar um array de referências Shape e armazenar ambas as formas nele
// TODO: Percorrer o array e imprimir a descrição de cada forma usando describe()
// TODO: Calcular a área total de todas as formas
// Use um loop ou acumulador para somar as áreas chamando getArea() em cada forma
// TODO: Imprimir a área total com o formato: "Total area: [sum]"
// Use String.format("%.2f", totalArea) para formatação
}
}
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 IteratorPratique por conta própria: Compilador de Java online