Introducció a l'Abstracció

L'abstracció és un dels quatre pilars de la programació orientada a objectes (POO), juntament amb l'encapsulació, l'herència i el polimorfisme. L'abstracció permet als programadors crear models simplificats de sistemes complexos, enfocant-se només en els detalls rellevants i amagant els detalls innecessaris.

Conceptes Clau

  • Abstracció: El procés de reduir la complexitat ocultant els detalls innecessaris i mostrant només les característiques essencials d'un objecte.
  • Classe Abstracta: Una classe que no es pot instanciar directament i que pot contenir mètodes abstractes (sense implementació) i mètodes concrets (amb implementació).
  • Mètode Abstracte: Un mètode declarat en una classe abstracta que no té implementació i que ha de ser implementat per les subclasses.

Creació de Classes Abstractes

En C#, una classe abstracta es defineix utilitzant la paraula clau abstract. Els mètodes abstractes dins d'una classe abstracta també es defineixen amb la paraula clau abstract.

Exemple de Classe Abstracta

using System;

abstract class Animal
{
    // Mètode abstracte (sense implementació)
    public abstract void FerSoroll();

    // Mètode concret (amb implementació)
    public void Dormir()
    {
        Console.WriteLine("L'animal està dormint.");
    }
}

class Gos : Animal
{
    // Implementació del mètode abstracte
    public override void FerSoroll()
    {
        Console.WriteLine("El gos fa: Guau Guau!");
    }
}

class Gat : Animal
{
    // Implementació del mètode abstracte
    public override void FerSoroll()
    {
        Console.WriteLine("El gat fa: Miau Miau!");
    }
}

class Program
{
    static void Main()
    {
        Animal gos = new Gos();
        gos.FerSoroll(); // Sortida: El gos fa: Guau Guau!
        gos.Dormir();    // Sortida: L'animal està dormint.

        Animal gat = new Gat();
        gat.FerSoroll(); // Sortida: El gat fa: Miau Miau!
        gat.Dormir();    // Sortida: L'animal està dormint.
    }
}

Explicació del Codi

  1. Classe Abstracta Animal:

    • Conté un mètode abstracte FerSoroll() que no té implementació.
    • Conté un mètode concret Dormir() que té una implementació.
  2. Classes Gos i Gat:

    • Hereten de la classe abstracta Animal.
    • Implementen el mètode abstracte FerSoroll().
  3. Classe Program:

    • Crea instàncies de Gos i Gat i crida els mètodes FerSoroll() i Dormir().

Exercicis Pràctics

Exercici 1: Crear una Classe Abstracta

Crea una classe abstracta Vehicle amb un mètode abstracte Moure() i un mètode concret Parar(). Després, crea dues subclasses Cotxe i Bicicleta que implementin el mètode Moure().

Solució

using System;

abstract class Vehicle
{
    public abstract void Moure();

    public void Parar()
    {
        Console.WriteLine("El vehicle s'ha aturat.");
    }
}

class Cotxe : Vehicle
{
    public override void Moure()
    {
        Console.WriteLine("El cotxe està conduint.");
    }
}

class Bicicleta : Vehicle
{
    public override void Moure()
    {
        Console.WriteLine("La bicicleta està pedalant.");
    }
}

class Program
{
    static void Main()
    {
        Vehicle cotxe = new Cotxe();
        cotxe.Moure(); // Sortida: El cotxe està conduint.
        cotxe.Parar(); // Sortida: El vehicle s'ha aturat.

        Vehicle bicicleta = new Bicicleta();
        bicicleta.Moure(); // Sortida: La bicicleta està pedalant.
        bicicleta.Parar(); // Sortida: El vehicle s'ha aturat.
    }
}

Exercici 2: Implementar una Jerarquia de Classes

Crea una classe abstracta Electrodomèstic amb un mètode abstracte Encendre(). Després, crea dues subclasses Televisió i Nevera que implementin el mètode Encendre().

Solució

using System;

abstract class Electrodomèstic
{
    public abstract void Encendre();
}

class Televisió : Electrodomèstic
{
    public override void Encendre()
    {
        Console.WriteLine("La televisió s'ha encès.");
    }
}

class Nevera : Electrodomèstic
{
    public override void Encendre()
    {
        Console.WriteLine("La nevera s'ha encès.");
    }
}

class Program
{
    static void Main()
    {
        Electrodomèstic televisió = new Televisió();
        televisió.Encendre(); // Sortida: La televisió s'ha encès.

        Electrodomèstic nevera = new Nevera();
        nevera.Encendre(); // Sortida: La nevera s'ha encès.
    }
}

Resum

En aquesta secció, hem après sobre l'abstracció en la programació orientada a objectes i com utilitzar classes i mètodes abstractes en C#. Hem vist exemples pràctics de com crear i implementar classes abstractes i hem practicat amb exercicis per reforçar els conceptes apresos. L'abstracció ens permet simplificar la complexitat del nostre codi, enfocant-nos només en els detalls essencials i amagant els detalls innecessaris.

© Copyright 2024. Tots els drets reservats