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 end
Creació 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 end
Utilització de la Subclasse
Sortida:
Explicació del Codi
-
Definició de la Superclasse
Vehicle
:- El mètode
initialize
defineix els atributs@make
i@model
. - El mètode
start_engine
imprimeix un missatge indicant que el motor està en marxa.
- El mètode
-
Definició de la Subclasse
Car
:- La subclasse
Car
hereta deVehicle
utilitzant<
. - El mètode
initialize
deCar
crida al mètodeinitialize
deVehicle
utilitzantsuper
, i després defineix l'atribut addicional@num_doors
. - El mètode
display_details
imprimeix els detalls del cotxe.
- La subclasse
-
Utilització de la Subclasse:
- Es crea una instància de
Car
amb els paràmetres "Toyota", "Corolla" i 4. - Es criden els mètodes
start_engine
idisplay_details
de 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_type
Sortida 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_details
Sortida 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
super
en el mètodeinitialize
de 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