Introducció

L'herència és un dels pilars fonamentals de la programació orientada a objectes (POO). Permet crear una nova classe a partir d'una classe existent, heretant els seus atributs i mètodes. Això facilita la reutilització del codi i la creació de jerarquies de classes més organitzades i mantenibles.

Conceptes Clau

  • Classe Base (o Pare): La classe de la qual s'hereten atributs i mètodes.
  • Classe Derivada (o Filla): La classe que hereta atributs i mètodes de la classe base.
  • Herència Simple: Una classe derivada hereta d'una única classe base.
  • Herència Múltiple: Una classe derivada hereta de més d'una classe base.

Sintaxi Bàsica

En Python, la sintaxi per a la creació d'una classe derivada és la següent:

class ClasseBase:
    # Atributs i mètodes de la classe base

class ClasseDerivada(ClasseBase):
    # Atributs i mètodes de la classe derivada

Exemple Pràctic

Vegem un exemple pràctic per entendre millor com funciona l'herència en Python.

Classe Base

class Animal:
    def __init__(self, nom):
        self.nom = nom

    def parlar(self):
        raise NotImplementedError("Aquest mètode ha de ser implementat per subclasses")

Classe Derivada

class Gos(Animal):
    def parlar(self):
        return f"{self.nom} diu: Guau!"

class Gat(Animal):
    def parlar(self):
        return f"{self.nom} diu: Miau!"

Utilització de les Classes

gos = Gos("Rex")
gat = Gat("Whiskers")

print(gos.parlar())  # Output: Rex diu: Guau!
print(gat.parlar())  # Output: Whiskers diu: Miau!

Herència Múltiple

Python també permet l'herència múltiple, és a dir, una classe pot heretar d'altres múltiples classes. Això es fa especificant múltiples classes base entre parèntesis.

Exemple d'Herència Múltiple

class A:
    def funcio_a(self):
        print("Funció A")

class B:
    def funcio_b(self):
        print("Funció B")

class C(A, B):
    pass

c = C()
c.funcio_a()  # Output: Funció A
c.funcio_b()  # Output: Funció B

Exercicis Pràctics

Exercici 1: Crear una Jerarquia de Classes

  1. Crea una classe base anomenada Vehicle amb els atributs marca i model, i un mètode descripcio que imprimeixi aquests atributs.
  2. Crea una classe derivada anomenada Cotxe que hereti de Vehicle i afegeixi un atribut nombre_de_portes.
  3. Crea una instància de Cotxe i crida el mètode descripcio.

Solució

class Vehicle:
    def __init__(self, marca, model):
        self.marca = marca
        self.model = model

    def descripcio(self):
        print(f"Marca: {self.marca}, Model: {self.model}")

class Cotxe(Vehicle):
    def __init__(self, marca, model, nombre_de_portes):
        super().__init__(marca, model)
        self.nombre_de_portes = nombre_de_portes

cotxe = Cotxe("Toyota", "Corolla", 4)
cotxe.descripcio()  # Output: Marca: Toyota, Model: Corolla

Exercici 2: Implementar Herència Múltiple

  1. Crea una classe Volador amb un mètode volar que imprimeixi "Estic volant!".
  2. Crea una classe Avio que hereti de Vehicle i Volador.
  3. Crea una instància d'Avio i crida els mètodes descripcio i volar.

Solució

class Volador:
    def volar(self):
        print("Estic volant!")

class Avio(Vehicle, Volador):
    pass

avio = Avio("Boeing", "747")
avio.descripcio()  # Output: Marca: Boeing, Model: 747
avio.volar()       # Output: Estic volant!

Errors Comuns i Consells

  • No Implementar Mètodes Abstractes: Si una classe base defineix un mètode que ha de ser implementat per les subclasses, assegura't d'implementar-lo a totes les subclasses.
  • Ús Incorrecte de super(): Quan utilitzis super(), assegura't de cridar-lo correctament per inicialitzar la classe base.

Conclusió

L'herència és una eina poderosa en la programació orientada a objectes que permet la reutilització del codi i la creació de jerarquies de classes més organitzades. Amb l'herència, pots crear noves classes que hereten atributs i mètodes d'altres classes, facilitant així la gestió i manteniment del codi.

En el proper tema, explorarem el polimorfisme, un altre concepte clau de la programació orientada a objectes que permet que diferents classes implementin mètodes amb el mateix nom però amb comportaments diferents.

Curs de Programació en Python

Mòdul 1: Introducció a Python

Mòdul 2: Estructures de Control

Mòdul 3: Funcions i Mòduls

Mòdul 4: Estructures de Dades

Mòdul 5: Programació Orientada a Objectes

Mòdul 6: Gestió de Fitxers

Mòdul 7: Gestió d'Errors i Excepcions

Mòdul 8: Temes Avançats

Mòdul 9: Proves i Depuració

Mòdul 10: Desenvolupament Web amb Python

Mòdul 11: Ciència de Dades amb Python

Mòdul 12: Projecte Final

© Copyright 2024. Tots els drets reservats