- L'herència permet reutilitzar i estendre el codi de manera eficient i promoure la modularitat en el disseny.
- Es poden crear classes filles que heretin característiques comunes d'una classe pare, especialitzant-les segons calgui.
- Llenguatges com ara Java, Python i C# ofereixen diferents implementacions i limitacions per a l'herència.

La programació orientada a objectes (POO) ha transformat la manera com els desenvolupadors estructuren i organitzen els seus projectes. Dins aquest paradigma, la herència exerceix un paper fonamental, ja que permet reutilitzar i estendre el codi de manera eficient. Però què és exactament l'herència en programació orientada a objectes i per què és tan crucial?
L'herència no és només un concepte tècnic; és una eina poderosa que ajuda els desenvolupadors a modelar el món real de manera més intuïtiva. Aquest mecanisme permet que una classe derivi d'una altra, heretant-ne els atributs i els mètodes. Al llarg daquest article explorarem en profunditat com funciona, els seus avantatges, exemples pràctics i les característiques clau daquest element essencial de la POO.
Què és lherència en programació orientada a objectes?
L'herència és un mecanisme de la programació orientada a objectes que permet utilitzar els atributs i els mètodes d'una classe base o pare en una classe derivada o filla. Aquest mecanisme fomenta la reutilització del codi, estenent i especialitzant el comportament definit a les classes base. En termes simples, si teniu una classe pare anomenada «Vehicle», podeu crear classes filles com ara «Cotxe» o «Moto» que heretin les característiques comunes del «Vehicle».
La classe pare es considera una generalització, mentre que les classes filles són especialitzacions. Per exemple, si la classe pare defineix un mètode «moure's», les classes derivades poden fer-lo servir, estendre'l o fins i tot redefinir-lo segons els seus propis comportaments específics.
Avantatges de l'herència
- Reutilització del codi: En heretar atributs i mètodes d'una classe base, s'evita repetir codi a les classes derivades.
- extensibilitat: Permet afegir noves funcionalitats o modificar les existents a les classes derivades.
- Organització jeràrquica: Facilita l'estructuració del codi en jerarquies lògiques i reflecteix relacions del món real.
- Estandardització: Manté la coherència en els mètodes i els atributs compartits entre classes relacionades.
Relació entre classes: Classe base i classe derivada
En una estructura jeràrquica, la classe base, també coneguda com superclasse, defineix les característiques i comportaments comuns que es podran heretar. D'altra banda, les classes derivades, o subclasses, hereten aquestes propietats i poden especialitzar-se afegint nous atributs o mètodes, o sobreescrivint els ja existents.
Per exemple, si definim una classe Animal com a base, podem crear subclasses com Mamífer o Rèptil. Així, totes compartiran característiques comunes com ara «respirar», però cadascuna podrà tenir mètodes específics segons la seva naturalesa, com «alletar» en el cas dels mamífers.
Exemple en codi: Herència en diferents llenguatges
Vegem com es fa servir l'herència en alguns dels llenguatges de programació més populars:
Herència a Python
L'herència s'implementa passant la classe base com a argument a la definició de la classe derivada:
class Animal:
def __init__(self, especie):
self.especie = especie
def mover(self):
print("El animal se está moviendo")
class Perro(Animal):
def ladrar(self):
print("Guau, guau")
mi_perro = Perro("Canino")
mi_perro.mover()
mi_perro.ladrar()
Herència a Java
A Java, la paraula clau s'estén sutilitza per establir la relació dherència:
public class Animal {
public void mover() {
System.out.println("El animal se está moviendo.");
}
}
public class Perro extends Animal {
public void ladrar() {
System.out.println("Guau, guau");
}
}
public class Main {
public static void main(String[] args) {
Perro miPerro = new Perro();
miPerro.mover();
miPerro.ladrar();
}
}
Herència a C#
A C#, l'herència s'utilitza de manera similar a Java, amb la paraula clau : per indicar que una classe hereta d'una altra:
class Animal {
public void Mover() {
Console.WriteLine("El animal se está moviendo.");
}
}
class Perro : Animal {
public void Ladrar() {
Console.WriteLine("Guau, guau");
}
}
class Program {
static void Main(string[] args) {
Perro miPerro = new Perro();
miPerro.Mover();
miPerro.Ladrar();
}
}
Herència simple i herència múltiple
En molts llenguatges de programació, com ara Java i C#, només s'admet herència simple, el que significa que una classe derivada només pot heretar duna classe base. No obstant això, llenguatges com Python permeten la herència múltiple, on una classe pot heretar de múltiples classes base.
Ús de mètodes i sobreescriptura
Una de les característiques més útils de lherència és la possibilitat de sobreescriure mètodes de la classe base. Això permet adaptar el comportament d‟un mètode a les necessitats específiques de la classe derivada.
Per exemple, si una classe base té un mètode “moure's”, una classe derivada podria sobreescriure'l per especificar com es mou:
class Vehiculo {
public void mover() {
System.out.println("El vehículo se está moviendo.");
}
}
class Coche extends Vehiculo {
@Override
public void mover() {
System.out.println("El coche está avanzando por la carretera.");
}
}
En aquest cas, si s'anomena el mètode “moure” des d'un objecte de la classe “Cotxe”, s'executarà la versió específica d'aquesta classe.
Polimorfisme i herència
El polimorfisme és un concepte clau relacionat amb la herència. Permet que un objecte sigui tractat com una instància de la seva classe base, mentre conserva el comportament definit a la seva classe derivada. Això és especialment útil en estructures com ara llistes o arranjaments que contenen objectes de diferents tipus.
Per exemple:
Animal[] animales = { new Perro(), new Gato() };
for (Animal animal : animales) {
animal.hacerSonido();
}
L'herència és una eina poderosa a la programació orientada a objectes que no només permet reutilitzar codi, sinó també crear relacions jeràrquiques entre classes i fomentar un disseny de programari més modular i organitzat. Comprendre els seus fonaments i com aplicar-la correctament és essencial per a qualsevol desenvolupador que vulgui escriure codi eficient i sostenible.