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ácilConstruyamos 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 llamadaIShapeen el espacio de nombresShapes. Toda forma debe poder 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 mediante 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 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 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 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.00Observa 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
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 estudiantesPractica por tu cuenta: Compilador de C# online