Menu
Coddy logo textTech

Repaso: Calculadora de Figuras

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 30 de 70.

challenge icon

Desafío

Fácil

Vamos a construir una calculadora de formas que reúna todo lo que has aprendido sobre interfaces y polimorfismo. Crearás un sistema donde diferentes formas pueden ser procesadas uniformemente a través de una interfaz común, demostrando el poder del polimorfismo en tiempo de ejecución.

Organizarás tu código en cuatro archivos:

  • IShape.cs: Define una interfaz llamada IShape en el espacio de nombres Shapes. Cada forma debe ser capaz de calcular su área y describirse a sí misma. Declara dos métodos: CalculateArea() que devuelve un double, y GetDescription() que devuelve un string.
  • Circle.cs: Crea una clase Circle en el espacio de nombres Shapes que implemente IShape. Un círculo tiene una propiedad Radius (double) establecida a través de su constructor. La fórmula del área es Math.PI * Radius * Radius. La descripción debe devolver "Circle with radius {Radius}".
  • Rectangle.cs: Crea una clase Rectangle en el espacio de nombres Shapes que implemente IShape. Un rectángulo tiene las propiedades Width y Height (ambas double) establecidas a través de su constructor. El área es simplemente el ancho por el alto. La descripción debe devolver "Rectangle {Width}x{Height}".
  • Program.cs: En tu archivo principal, crea un círculo y un rectángulo utilizando valores de entrada, luego almacénalos en un arreglo de referencias IShape. Recorre el arreglo y, para cada forma, imprime su descripción seguida de su área redondeada a dos decimales. ¡Esto demuestra cómo puedes procesar formas completamente diferentes a través de la misma interfaz!

Recibirás tres entradas:

  • Radio del círculo (double)
  • Ancho del rectángulo (double)
  • Alto del rectángulo (double)

Imprime la salida en este formato para cada forma:

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

Por ejemplo, si las entradas son 5, 4, y 6, la salida debería ser:

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

Observa cómo tu bucle no necesita saber si está tratando con un círculo o un rectángulo; simplemente llama a los métodos de la interfaz y deja que el polimorfismo se encargue del resto. ¡Esta es la elegancia de programar hacia interfaces!

Pruébalo tú mismo

using System;
using Shapes;

class Program
{
    public static void Main(string[] args)
    {
        // Leer los valores de entrada
        double circleRadius = Convert.ToDouble(Console.ReadLine());
        double rectWidth = Convert.ToDouble(Console.ReadLine());
        double rectHeight = Convert.ToDouble(Console.ReadLine());
        
        // TODO: Crear un objeto Circle con el radio dado
        
        // TODO: Crear un objeto Rectangle con el ancho y la altura dados
        
        // TODO: Crear un arreglo de IShape que contenga ambas formas
        
        // TODO: Recorrer el arreglo y para cada forma:
        // - Imprimir la descripción usando GetDescription()
        // - Imprimir "Area: " seguido de CalculateArea() redondeado a 2 decimales
    }
}

Todas las lecciones de Programación Orientada a Objetos