Menu
Coddy logo textTech

Recapitulação - Calculadora de Formas

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy. Lição 30 de 70.

challenge icon

Desafio

Fácil

Vamos criar uma calculadora de formas que reúne tudo o que você aprendeu sobre interfaces e polimorfismo. Você criará um sistema no qual diferentes formas podem ser processadas uniformemente por meio de uma interface comum, demonstrando o poder do polimorfismo em tempo de execução.

Você organizará seu código em quatro arquivos:

  • IShape.cs: Defina uma interface chamada IShape no namespace Shapes. Toda forma deve ser capaz de calcular sua área e descrever a si mesma. Declare dois métodos: CalculateArea(), que retorna um double, e GetDescription(), que retorna uma string.
  • Circle.cs: Crie uma classe Circle no namespace Shapes que implemente IShape. Um círculo tem uma propriedade Radius (double) definida por meio de seu construtor. A fórmula da área é Math.PI * Radius * Radius. A descrição deve retornar "Circle with radius {Radius}".
  • Rectangle.cs: Crie uma classe Rectangle no namespace Shapes que implemente IShape. Um retângulo tem as propriedades Width e Height (ambas double) definidas por meio de seu construtor. A área é simplesmente a largura multiplicada pela altura. A descrição deve retornar "Rectangle {Width}x{Height}".
  • Program.cs: No arquivo principal, crie um círculo e um retângulo usando valores de entrada e, em seguida, armazene-os em um array de referências IShape. Percorra o array e, para cada forma, imprima sua descrição seguida de sua área arredondada para duas casas decimais. Isso demonstra como você pode processar formas completamente diferentes por meio da mesma interface!

Você receberá três entradas:

  • Raio do círculo (double)
  • Largura do retângulo (double)
  • Altura do retângulo (double)

Imprima a saída neste formato para cada forma:

{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}

Por exemplo, se as entradas forem 5, 4 e 6, a saída deverá ser:

Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00

Observe como seu loop não precisa saber se está lidando com um círculo ou um retângulo — ele simplesmente chama os métodos da interface e deixa o polimorfismo cuidar do restante. Essa é a elegância de programar para interfaces!

Experimente você mesmo

using System;
using Shapes;

class Program
{
    public static void Main(string[] args)
    {
        // Ler valores de entrada
        double circleRadius = Convert.ToDouble(Console.ReadLine());
        double rectWidth = Convert.ToDouble(Console.ReadLine());
        double rectHeight = Convert.ToDouble(Console.ReadLine());
        
        // TODO: Criar um objeto Circle com o raio fornecido
        
        // TODO: Criar um objeto Rectangle com a largura e altura fornecidas
        
        // TODO: Criar um array de IShape contendo ambas as formas
        
        // TODO: Percorrer o array e para cada forma:
        // - Imprimir a descrição usando GetDescription()
        // - Imprimir "Area: " seguido por CalculateArea() arredondado para 2 casas decimais
    }
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C# online