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

  1. Clase Base (Padre o Superclase): La clase de la cual se heredan propiedades y métodos.
  2. Clase Derivada (Hija o Subclase): La clase que hereda de la clase base.
  3. Palabra Clave : base: Utilizada para llamar al constructor de la clase base desde la clase derivada.
  4. 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

  1. Clase Animal: Define propiedades comunes (Name, Age) y métodos (Eat, Sleep) que serán heredados.
  2. Clase Dog: Hereda de Animal y añade una propiedad específica (Breed) y un método (Bark).
  3. Uso en Main: Se crea una instancia de Dog, 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

  1. Clase Base Vehicle:

    • Propiedades: Make, Model, Year
    • Métodos: Start(), Stop()
  2. Clase Derivada Car:

    • Propiedades: NumberOfDoors
    • Métodos: Honk()
  3. Clase Derivada Motorcycle:

    • Propiedades: HasSidecar
    • Métodos: RevEngine()

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 protected en lugar de private si 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.

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.

© Copyright 2024. Todos los derechos reservados