La herencia es uno de los pilares fundamentales de la Programación Orientada a Objetos (POO). Permite crear nuevas clases basadas en clases existentes, promoviendo la reutilización del código y la creación de jerarquías de clases más organizadas y manejables.
Conceptos Clave
- Clase Base (Padre o Superclase): La clase de la cual se heredan propiedades y métodos.
- Clase Derivada (Hija o Subclase): La clase que hereda de la clase base.
- Palabra Clave
: base: Utilizada para llamar al constructor de la clase base desde la clase derivada. - Modificadores de Acceso: Controlan la visibilidad de los miembros de la clase base en la clase derivada (
public,protected,private).
Ejemplo Práctico
Definición de una Clase Base
public class Animal
{
public string Name { get; set; }
public int Age { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
public void Sleep()
{
Console.WriteLine($"{Name} is sleeping.");
}
}Definición de una Clase Derivada
public class Dog : Animal
{
public string Breed { get; set; }
public void Bark()
{
Console.WriteLine($"{Name} is barking.");
}
}Uso de la Herencia
class Program
{
static void Main(string[] args)
{
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Age = 3;
myDog.Breed = "Golden Retriever";
myDog.Eat(); // Heredado de Animal
myDog.Sleep(); // Heredado de Animal
myDog.Bark(); // Definido en Dog
Console.WriteLine($"My dog's name is {myDog.Name}, age is {myDog.Age}, and breed is {myDog.Breed}.");
}
}Explicación del Código
- Clase
Animal: Define propiedades comunes (Name,Age) y métodos (Eat,Sleep) que serán heredados. - Clase
Dog: Hereda deAnimaly añade una propiedad específica (Breed) y un método (Bark). - Uso en
Main: Se crea una instancia deDog, se asignan valores a las propiedades heredadas y específicas, y se llaman tanto a los métodos heredados como a los propios.
Ejercicio Práctico
Ejercicio 1: Crear una Jerarquía de Clases
-
Clase Base
Vehicle:- Propiedades:
Make,Model,Year - Métodos:
Start(),Stop()
- Propiedades:
-
Clase Derivada
Car:- Propiedades:
NumberOfDoors - Métodos:
Honk()
- Propiedades:
-
Clase Derivada
Motorcycle:- Propiedades:
HasSidecar - Métodos:
RevEngine()
- Propiedades:
Solución
Definición de la Clase Base Vehicle
public class Vehicle
{
public string Make { get; set; }
public string Model { get; set; }
public int Year { get; set; }
public void Start()
{
Console.WriteLine($"{Make} {Model} is starting.");
}
public void Stop()
{
Console.WriteLine($"{Make} {Model} is stopping.");
}
}Definición de la Clase Derivada Car
public class Car : Vehicle
{
public int NumberOfDoors { get; set; }
public void Honk()
{
Console.WriteLine($"{Make} {Model} is honking.");
}
}Definición de la Clase Derivada Motorcycle
public class Motorcycle : Vehicle
{
public bool HasSidecar { get; set; }
public void RevEngine()
{
Console.WriteLine($"{Make} {Model} is revving its engine.");
}
}Uso de las Clases
class Program
{
static void Main(string[] args)
{
Car myCar = new Car();
myCar.Make = "Toyota";
myCar.Model = "Corolla";
myCar.Year = 2020;
myCar.NumberOfDoors = 4;
myCar.Start();
myCar.Honk();
myCar.Stop();
Motorcycle myMotorcycle = new Motorcycle();
myMotorcycle.Make = "Harley-Davidson";
myMotorcycle.Model = "Street 750";
myMotorcycle.Year = 2019;
myMotorcycle.HasSidecar = false;
myMotorcycle.Start();
myMotorcycle.RevEngine();
myMotorcycle.Stop();
}
}Retroalimentación y Consejos
-
Errores Comunes:
- Olvidar llamar al constructor de la clase base si se necesita inicializar propiedades específicas.
- Intentar acceder a miembros privados de la clase base desde la clase derivada.
-
Consejos:
- Utiliza
protecteden lugar deprivatesi necesitas que los miembros de la clase base sean accesibles en las clases derivadas. - Aprovecha la herencia para evitar la duplicación de código y mantener una estructura de clases más limpia y manejable.
- Utiliza
Conclusión
La herencia en C# permite crear jerarquías de clases que promueven la reutilización del código y la organización lógica de las funcionalidades. Al entender y aplicar correctamente la herencia, puedes construir aplicaciones más robustas y mantenibles. En el siguiente tema, exploraremos el polimorfismo, que es otra característica clave de la POO y que se complementa perfectamente con la herencia.
Curso de Programación en C#
Módulo 1: Introducción a C#
- Introducción a C#
- Configuración del Entorno de Desarrollo
- Programa Hola Mundo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
Módulo 2: Estructuras de Control
Módulo 3: Programación Orientada a Objetos
- Clases y Objetos
- Métodos
- Constructores y Destructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Conceptos Avanzados de C#
- Interfaces
- Delegados y Eventos
- Genéricos
- Colecciones
- LINQ (Consulta Integrada en el Lenguaje)
- Programación Asíncrona
Módulo 5: Trabajando con Datos
Módulo 6: Temas Avanzados
- Reflexión
- Atributos
- Programación Dinámica
- Gestión de Memoria y Recolección de Basura
- Multihilo y Programación Paralela
Módulo 7: Construcción de Aplicaciones
Módulo 8: Mejores Prácticas y Patrones de Diseño
- Estándares de Codificación y Mejores Prácticas
- Patrones de Diseño
- Pruebas Unitarias
- Revisión y Refactorización de Código
