Herencia y Polimorfismo en Programación Orientada a Objetos
Clase 3 de 35 • Curso de C# con .Net Core 2.1
Contenido del curso
Etapa 5 – POO reutilicemos nuestro código
- 2

Herencia para reutilizar código C#
10:30 min - 3

Herencia y Polimorfismo en Programación Orientada a Objetos
Viendo ahora - 4

Polimorfismo en Programación Orientada a Objetos
13:17 min - 5

Casting en C#: cuándo funciona y cuándo falla
07:09 min - 6

Conversiones seguras en C# con is y as
12:44 min - 7

Sobrescribir ToString para depuración en C#
08:15 min
Etapa 6- Ajustes y funcionalidad
Etapa 7 – Preparando información para nuestros reportes
- 11

Manejo Avanzado de Métodos y Parámetros en Programación
15:43 min - 12

Manejo de Parámetros de Salida en Visual Studio Code
04:38 min - 13

Sobrecarga de Métodos para Parámetros de Salida Opcionales
05:51 min - 14

Optimización de Listas: Buenas Prácticas en C#
04:16 min - 15

Dictionary: cómo funciona en C#
11:14 min - 16

Diccionarios con polimorfismo en C#
10:48 min - 17

Uso de Constantes y Enumeraciones para Optimizar Diccionarios en C#
11:33 min - 18

Foreach anidado para diccionarios en C#
13:47 min - 19

Depuración de diccionarios en C#
09:37 min - 20

Parámetro opcional para controlar impresión en C#
11:47 min - 21

Cómo usar switch en lugar de if/else
14:30 min - 22

Números aleatorios y eventos en C#
12:52 min - 23

Diccionarios y Refactoring en Programación Básica
02:13 min
Etapa 8 – Consultas
- 24

Cómo crear un reporteador en C sharp
11:42 min - 25

Generación segura de reportes en sistemas de información
10:21 min - 26

Construcción de reportes con LINQ en C#
11:48 min - 27

Diccionario con evaluaciones por asignatura
08:32 min - 28

Tipos anónimos en LINQ para reportes complejos
10:52 min - 29

Cálculo del Promedio de Notas Agrupadas por Alumno y Asignatura
10:46 min - 30

Creación de Tipos de Datos Personalizados en Programación Avanzada
12:05 min - 31

Generación de Reportes con LINQ en C#
02:09 min
Etapa 9 – Creando una UI de Consola
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.