La herència és un dels pilars fonamentals de la programació orientada a objectes (OOP). Permet crear una nova classe (classe derivada) que hereta els membres (propietats, mètodes, etc.) d'una classe existent (classe base). Això facilita la reutilització del codi i la creació de jerarquies de classes.

Conceptes Clau

  1. Classe Base (Superclasse): La classe de la qual s'hereten els membres.
  2. Classe Derivada (Subclasse): La classe que hereta els membres de la classe base.
  3. Membres Heretats: Propietats, mètodes i altres membres que es transmeten de la classe base a la classe derivada.
  4. Modificadors d'Accés: Controlen la visibilitat dels membres heretats (public, protected, private).

Sintaxi Bàsica

// Definició de la classe base
public class Animal
{
    public string Nom { get; set; }
    public void Menjar()
    {
        Console.WriteLine("L'animal està menjant.");
    }
}

// Definició de la classe derivada
public class Gos : Animal
{
    public void Bordar()
    {
        Console.WriteLine("El gos està bordant.");
    }
}

Explicació del Codi

  1. Classe Base Animal:

    • Té una propietat Nom.
    • Té un mètode Menjar().
  2. Classe Derivada Gos:

    • Hereta la propietat Nom i el mètode Menjar() de la classe Animal.
    • Defineix un mètode addicional Bordar().

Exemple Pràctic

public class Program
{
    public static void Main(string[] args)
    {
        Gos meuGos = new Gos();
        meuGos.Nom = "Rex";
        meuGos.Menjar();
        meuGos.Bordar();
    }
}

Sortida Esperada

L'animal està menjant.
El gos està bordant.

Exercicis Pràctics

Exercici 1: Crear una Jerarquia de Classes

  1. Descripció: Crea una classe base Vehicle amb propietats Marca i Model, i un mètode Conduir(). Després, crea una classe derivada Cotxe que afegeixi una propietat NombreDePortes i un mètode TocarClaxon().

  2. Solució:

public class Vehicle
{
    public string Marca { get; set; }
    public string Model { get; set; }

    public void Conduir()
    {
        Console.WriteLine("El vehicle està conduint.");
    }
}

public class Cotxe : Vehicle
{
    public int NombreDePortes { get; set; }

    public void TocarClaxon()
    {
        Console.WriteLine("El cotxe està tocant el claxon.");
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Cotxe meuCotxe = new Cotxe();
        meuCotxe.Marca = "Toyota";
        meuCotxe.Model = "Corolla";
        meuCotxe.NombreDePortes = 4;
        meuCotxe.Conduir();
        meuCotxe.TocarClaxon();
    }
}

Exercici 2: Herència i Polimorfisme

  1. Descripció: Crea una classe base Empleat amb una propietat Nom i un mètode Treballar(). Després, crea dues classes derivades Enginyer i Dissenyador que sobreescriguin el mètode Treballar() per mostrar missatges específics.

  2. Solució:

public class Empleat
{
    public string Nom { get; set; }

    public virtual void Treballar()
    {
        Console.WriteLine("L'empleat està treballant.");
    }
}

public class Enginyer : Empleat
{
    public override void Treballar()
    {
        Console.WriteLine("L'enginyer està dissenyant un sistema.");
    }
}

public class Dissenyador : Empleat
{
    public override void Treballar()
    {
        Console.WriteLine("El dissenyador està creant un disseny.");
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Empleat[] empleats = new Empleat[2];
        empleats[0] = new Enginyer { Nom = "Anna" };
        empleats[1] = new Dissenyador { Nom = "Joan" };

        foreach (Empleat empleat in empleats)
        {
            Console.WriteLine($"{empleat.Nom} està treballant:");
            empleat.Treballar();
        }
    }
}

Sortida Esperada

Anna està treballant:
L'enginyer està dissenyant un sistema.
Joan està treballant:
El dissenyador està creant un disseny.

Errors Comuns i Consells

  1. Oblidar el Modificador virtual o override:

    • Quan es vol sobreescriure un mètode de la classe base, assegura't que el mètode de la classe base estigui marcat com virtual i el mètode de la classe derivada com override.
  2. No Inicialitzar Propietats Heretades:

    • Recorda que les propietats heretades de la classe base també han de ser inicialitzades si és necessari.
  3. Confusió amb els Modificadors d'Accés:

    • Utilitza protected si vols que els membres siguin accessibles només dins de la classe base i les seves derivades.

Resum

En aquesta secció, hem après sobre la herència en C#, com crear classes base i derivades, i com utilitzar els membres heretats. També hem vist exemples pràctics i exercicis per reforçar els conceptes. La herència és una eina poderosa per a la reutilització del codi i la creació de jerarquies de classes, facilitant així el desenvolupament de programari modular i mantenible.

© Copyright 2024. Tots els drets reservats