Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Vamos construir 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 as á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. Cada forma possui um campo name (String). Inclua um construtor para inicializá-lo, um método getter getName() e um método abstrato getArea() que retorna um double. Adicione também um método describe() que retorna: [name]: [area] (onde a área é formatada para 2 casas decimais usando String.format("%.2f", getArea())).
  • Circle.java: Crie uma classe concreta que estenda Shape. Círculos têm um campo radius (double). Use super para passar "Circle" como o nome. Implemente getArea() para retornar a área usando Math.PI * radius * radius.
  • Rectangle.java: Crie outra classe concreta que estenda Shape. Retângulos têm campos width e height (ambos double). Passe "Rectangle" como o nome para o construtor pai. Implemente getArea() para retornar a largura multiplicada pela altura.
  • Main.java: Construa 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, depois armazene-os em um array de referências Shape. Percorra o array e, para cada forma, imprima sua descrição usando o método describe().

    Após o loop, calcule e imprima a área total de todas as formas com o formato: Total area: [sum] (também formatado para 2 casas decimais). Use um loop separado ou um acumulador para somar as áreas chamando getArea() 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 mostrar três linhas - uma descrição para cada forma seguida pela área total. Observe como você pode tratar diferentes formas uniformemente através do tipo abstrato Shape, enquanto cada forma calcula sua área de 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