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 construir uma calculadora de formas que reúne tudo o que você aprendeu sobre interfaces e polimorfismo. Você criará um sistema onde 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. Cada forma deve ser capaz de calcular sua área e descrever a si mesma. Declare dois métodos: CalculateArea() retornando um double, e GetDescription() retornando uma string.
  • Circle.cs: Crie uma classe Circle no namespace Shapes que implementa IShape. Um círculo possui uma propriedade Radius (double) definida através 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 implementa IShape. Um retângulo possui as propriedades Width e Height (ambas double) definidas através de seu construtor. A área é simplesmente a largura vezes a altura. A descrição deve retornar "Rectangle {Width}x{Height}".
  • Program.cs: No seu 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 através 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 deve 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 resto. Esta é 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