Introducció
L'herència és un concepte fonamental en la programació orientada a objectes (OOP) que permet crear noves classes basades en classes existents. Això facilita la reutilització del codi i la creació de jerarquies de classes més organitzades i mantenibles.
En Ruby, l'herència es defineix utilitzant la paraula clau <. La classe que hereta es coneix com a "subclasse" o "classe derivada", mentre que la classe de la qual hereta es coneix com a "superclasse" o "classe base".
Conceptes Clau
- Superclasse: La classe base de la qual una altra classe hereta.
 - Subclasse: La classe que hereta d'una altra classe.
 - Herència Simple: Ruby només suporta herència simple, és a dir, una classe només pot heretar d'una altra classe.
 
Exemples Pràctics
Definició d'una Superclasse
class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end
  def start_engine
    puts "El motor del #{@make} #{@model} està en marxa!"
  end
endCreació d'una Subclasse
class Car < Vehicle
  def initialize(make, model, num_doors)
    super(make, model)  # Crida al constructor de la superclasse
    @num_doors = num_doors
  end
  def display_details
    puts "Aquest és un #{@make} #{@model} amb #{@num_doors} portes."
  end
endUtilització de la Subclasse
Sortida:
Explicació del Codi
- 
Definició de la Superclasse
Vehicle:- El mètode 
initializedefineix els atributs@makei@model. - El mètode 
start_engineimprimeix un missatge indicant que el motor està en marxa. 
 - El mètode 
 - 
Definició de la Subclasse
Car:- La subclasse 
Carhereta deVehicleutilitzant<. - El mètode 
initializedeCarcrida al mètodeinitializedeVehicleutilitzantsuper, i després defineix l'atribut addicional@num_doors. - El mètode 
display_detailsimprimeix els detalls del cotxe. 
 - La subclasse 
 - 
Utilització de la Subclasse:
- Es crea una instància de 
Caramb els paràmetres "Toyota", "Corolla" i 4. - Es criden els mètodes 
start_engineidisplay_detailsde la instànciamy_car. 
 - Es crea una instància de 
 
Exercicis Pràctics
Exercici 1: Creació d'una Subclasse
Crea una subclasse Motorcycle que hereti de Vehicle. Afegeix un atribut type (per exemple, "sport" o "cruiser") i un mètode display_type que imprimeixi el tipus de motocicleta.
# Solució
class Motorcycle < Vehicle
  def initialize(make, model, type)
    super(make, model)
    @type = type
  end
  def display_type
    puts "Aquesta és una motocicleta de tipus #{@type}."
  end
end
my_motorcycle = Motorcycle.new("Harley-Davidson", "Street 750", "cruiser")
my_motorcycle.start_engine
my_motorcycle.display_typeSortida Esperada:
Exercici 2: Sobreescriptura de Mètodes
Crea una subclasse ElectricCar que hereti de Car. Sobreescriu el mètode start_engine per imprimir un missatge diferent, indicant que el cotxe elèctric està en marxa.
# Solució
class ElectricCar < Car
  def start_engine
    puts "El motor elèctric del #{@make} #{@model} està en marxa silenciosament!"
  end
end
my_electric_car = ElectricCar.new("Tesla", "Model S", 4)
my_electric_car.start_engine
my_electric_car.display_detailsSortida Esperada:
El motor elèctric del Tesla Model S està en marxa silenciosament! Aquest és un Tesla Model S amb 4 portes.
Errors Comuns i Consells
- Oblidar cridar 
superen el mètodeinitializede la subclasse: Això pot provocar que els atributs de la superclasse no s'inicialitzin correctament. - No utilitzar 
<per definir l'herència: Assegura't d'utilitzar la sintaxi correcta per establir la relació d'herència. - Sobreescriptura incorrecta de mètodes: Quan sobreescrius un mètode, assegura't de mantenir la signatura del mètode (nom i paràmetres) consistent amb la superclasse.
 
Conclusió
L'herència és una eina poderosa en Ruby que permet crear jerarquies de classes més organitzades i reutilitzables. Mitjançant l'herència, les subclasses poden heretar comportaments i atributs de les superclasses, alhora que poden afegir o modificar funcionalitats específiques. Practicar amb exemples i exercicis t'ajudarà a comprendre millor com utilitzar l'herència de manera efectiva en els teus projectes Ruby.
Curs de Programació en Ruby
Mòdul 1: Introducció a Ruby
Mòdul 2: Conceptes Bàsics de Ruby
Mòdul 3: Treballant amb Col·leccions
Mòdul 4: Programació Orientada a Objectes en Ruby
- Classes i Objectes
 - Variables i Mètodes d'Instància
 - Variables i Mètodes de Classe
 - Herència
 - Mòduls i Mixins
 
Mòdul 5: Conceptes Avançats de Ruby
- Blocs, Procs i Lambdas
 - Metaprogramació
 - Gestió d'Excepcions
 - Entrada/Sortida de Fitxers
 - Expressions Regulars
 
Mòdul 6: Introducció a Ruby on Rails
- Què és Ruby on Rails?
 - Configuració de l'Entorn Rails
 - Creació d'una Aplicació Simple en Rails
 - Arquitectura MVC
 - Rutes
 
Mòdul 7: Proves en Ruby
- Introducció a les Proves
 - Proves Unitàries amb Minitest
 - Desenvolupament Basat en Comportament amb RSpec
 - Mocking i Stubbing
 
Mòdul 8: Millors Pràctiques en Ruby
- Estil de Codi i Convencions
 - Refactorització
 - Optimització del Rendiment
 - Millors Pràctiques de Seguretat
 
