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.
Desafío
FácilVamos 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 llamadaIShapeen el espacio de nombresShapes. Cada forma debe ser capaz de calcular su área y describirse a sí misma. Declara dos métodos:CalculateArea()que devuelve undouble, yGetDescription()que devuelve unstring.Circle.cs: Crea una claseCircleen el espacio de nombresShapesque implementeIShape. Un círculo tiene una propiedadRadius(double) establecida a través de su constructor. La fórmula del área esMath.PI * Radius * Radius. La descripción debe devolver"Circle with radius {Radius}".Rectangle.cs: Crea una claseRectangleen el espacio de nombresShapesque implementeIShape. Un rectángulo tiene las propiedadesWidthyHeight(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 referenciasIShape. 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.00Observa 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
1Fundamentos de OOP
Archivos externosNamespaces y directivasIntro a clases y objetosLa palabra clave 'this'Métodos y parámetrosCampos vs PropiedadesConstructoresInicializadores de objetosResumen - Calculadora simple4Herencia
Sintaxis básica de herencia (:)La palabra clave 'base'Palabras clave Virtual y OverrideClases selladas (Sealed)La clase base 'object'Resumen: Jerarquía de empleados7Características avanzadas
Sobrecarga de operadoresIndexadores (this[])Sobrescritura de ToString()Métodos de extensiónResumen - Lista personalizada10Patrones de diseño - Parte 1
Introducción a los patrones de diseñoSingleton Thread-SafePatrón FactoryPatrón Observer (Eventos)Patrón Strategy2Propiedades y miembros estáticos
Propiedades autoimplementadasPropiedades de solo lectura y escrituraCampos y métodos estáticosClases estáticasMiembros con cuerpo de expresión5Polimorfismo e Interfaces
Polimorfismo: Compilación vs. EjecuciónInterfaz vs. Clase AbstractaInterfaces MúltiplesInterfaces ExplícitasUpcasting y DowncastingRepaso: Calculadora de Figuras8Conceptos avanzados de POO
Composición sobre herenciaGenéricos (clases y métodos)Delegados y eventosAtributos y ReflexiónIDisposable y la sentencia usingFundamentos de Inyección de dependencias11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Arquitectura de clases
Datos de instancia vs. estáticosPalabras clave 'readonly' y 'const'Campos de respaldoResumen - Gestor de cuentas bancarias6Encapsulamiento
Modificadores de accesoPropiedades para el encapsulamientoImplementación de ocultamiento de datosPatrones de inmutabilidadRepaso - Registros de estudiantes