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
