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

Construyamos una calculadora de formas que reúna todo lo que has aprendido sobre interfaces y polimorfismo. Crearás un sistema en el que diferentes formas puedan procesarse de manera uniforme mediante 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. Toda forma debe poder 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 mediante 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 de tipo double), establecidas mediante su constructor. El área es simplemente el ancho multiplicado por la altura. La descripción debe devolver "Rectangle {Width}x{Height}".
  • Program.cs: En tu archivo principal, crea un círculo y un rectángulo usando los valores de entrada y, después, guárdalos 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 mediante la misma interfaz!

Recibirás tres entradas:

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

Imprime la salida con 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 que tu bucle no necesita saber si está trabajando 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 orientándose a 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

Practica por tu cuenta: Compilador de C# online