Herencia y Polimorfismo en Programación Orientada a Objetos

Clase 3 de 35Curso de C# con .Net Core 2.1

Resumen

La herencia en C# permite un diseño más limpio y mantenible: reduces código redundante, centralizas comportamientos en una clase base y controlas quién puede instanciar u heredar. Aquí verás cómo crear un objeto base reutilizable, corregir errores de namespace y GUID, y aplicar clases abstractas y clases selladas en Visual Studio Code con debug y build.

¿Qué es herencia y cómo se aplica en c#?

La herencia replica la idea real: un “padre” transmite atributos y métodos a sus “hijos**.** Un objeto padre puede exponer todo o reservar comportamientos para que el hijo los implemente. Esto habilita la sobreescritura de métodos: por ejemplo, definir un método caminar y exigir que cada hijo lo implemente a su manera.

  • Centraliza campos comunes: Unique ID y Nombre se mueven a un objeto base.
  • Define la inicialización del ID en un único lugar: dentro del constructor.
  • Elimina duplicados: Alumno, Asignatura, Curso, Escuela y Evaluación heredan y borran sus copias locales.

Ejemplo de objeto base con inicialización desde el constructor:

using System; // Base reutilizable para todos los objetos del dominio. abstract class ObjetoEscuelaBase { public string Nombre { get; set; } public Guid UniqueId { get; } public ObjetoEscuelaBase() { UniqueId = Guid.NewGuid(); } }

Clases que heredan y simplifican su código:

class Alumno : ObjetoEscuelaBase { // Propiedades específicas, por ejemplo: evaluaciones. } class Asignatura : ObjetoEscuelaBase { } class Curso : ObjetoEscuelaBase { } class Escuela : ObjetoEscuelaBase { } class Evaluacion : ObjetoEscuelaBase { }

Validación práctica con debug: se ejecuta, se recorre la inicialización, se crean entidades y se imprimen resultados. Si aparecen errores, se revisa el editor y se corrigen.

¿Cómo controlar instanciación y herencia con clases abstractas y selladas?

Para evitar usos incorrectos, se definen modificadores que expresan la intención del diseño.

  • Clase abstracta: se puede heredar, pero no instanciar. Ideal para “solo idea” o contrato base.
  • Clase sellada: se puede instanciar, pero no heredar. Útil cuando no debe extenderse.

Aplicación directa:

  • El objeto base se marca como abstracto: nadie puede crear “nuevo ObjetoEscuelaBase”, pero todos pueden heredar de él.
  • EscuelaEngine se marca sellada: se puede instanciar para operar el motor, pero no permite subclases.
abstract class ObjetoEscuelaBase { /* ... */ } sealed class EscuelaEngine { // Lógica de orquestación del dominio. } // Error de compilación: no se puede heredar de una clase sellada. // class Dummy : EscuelaEngine { } // Herencia permitida desde la base abstracta. class Dummy : ObjetoEscuelaBase { }

Este control evita mal uso del modelo: la base es una idea compartida, el engine es una implementación cerrada.

¿Qué problemas comunes se resolvieron y qué sigue con polimorfismo?

Durante la ejecución aparecieron errores visibles en el editor. La solución se centró en dependencias y espacios de nombres.

  • Falta de namespace para GUID: se agrega la directiva correspondiente y se corrigen puntos y comas sobrantes.
  • Namespace incorrecto en la base: se ajusta para alinear a “Core Escuela” y desaparecen los errores.
  • Verificación por consola:
dotnet build
  • Prueba con debug: se recorre la carga de Escuela, Cursos, Asignaturas y Evaluaciones; luego se imprime el resultado.

Habilidades y conceptos reforzados:

  • Refactorización por herencia: mover atributos y constructores al padre.
  • Inicialización en el constructor: asignar el Unique ID una sola vez.
  • Sobreescritura de métodos: reservar comportamientos para que cada hijo los implemente.
  • Clases abstractas y selladas: controlar instanciación y extensibilidad.
  • Diagnóstico de errores: corregir namespaces, compilar con build y validar con debug.
  • Polimorfismo (avance): un Alumno puede tratarse como ObjetoEscuelaBase, pero no al revés. Se profundizará con ejemplos prácticos.

¿Con qué casos aplicarías herencia, clases abstractas o selladas en tu proyecto? Comparte tus dudas y ejemplos para analizarlos juntos.