Introducció
En aquest tema, explorarem dos conceptes fonamentals de la Programació Orientada a Objectes (POO): l'herència i el polimorfisme. Aquests conceptes permeten crear codi més reutilitzable, mantenible i extensible.
Herència
Què és l'Herència?
L'herència és un mecanisme que permet crear una nova classe (subclasse) a partir d'una classe existent (superclasse). La subclasse hereta els atributs i mètodes de la superclasse, i pot afegir-ne de nous o modificar els existents.
Sintaxi de l'Herència
En Object Pascal, l'herència es defineix utilitzant la paraula clau class
seguida del nom de la subclasse, el símbol =
i el nom de la superclasse.
type TAnimal = class procedure MakeSound; virtual; end; TDog = class(TAnimal) procedure MakeSound; override; end;
Exemple Pràctic
A continuació, es mostra un exemple pràctic d'herència en Object Pascal:
program HerenciaExemple; {$APPTYPE CONSOLE} type TAnimal = class procedure MakeSound; virtual; end; TDog = class(TAnimal) procedure MakeSound; override; end; procedure TAnimal.MakeSound; begin Writeln('L''animal fa un so.'); end; procedure TDog.MakeSound; begin Writeln('El gos borda.'); end; var Animal: TAnimal; Dog: TDog; begin Animal := TAnimal.Create; Dog := TDog.Create; Animal.MakeSound; // Sortida: L'animal fa un so. Dog.MakeSound; // Sortida: El gos borda. Animal.Free; Dog.Free; end.
Explicació del Codi
-
Definició de la Superclasse
TAnimal
:- Conté un mètode
MakeSound
declarat com avirtual
, el que permet que sigui sobreescrit per subclasses.
- Conté un mètode
-
Definició de la Subclasse
TDog
:- Hereta de
TAnimal
i sobreescriu el mètodeMakeSound
utilitzant la paraula clauoverride
.
- Hereta de
-
Creació d'Objectes:
- Es creen instàncies de
TAnimal
iTDog
. - Es criden els mètodes
MakeSound
de cada instància, demostrant com la subclasse pot modificar el comportament de la superclasse.
- Es creen instàncies de
Polimorfisme
Què és el Polimorfisme?
El polimorfisme permet que una interfície comuna sigui utilitzada per diferents tipus d'objectes. En Object Pascal, això es pot aconseguir mitjançant mètodes virtuals i sobreescrits.
Exemple Pràctic de Polimorfisme
Continuant amb l'exemple anterior, podem veure com el polimorfisme permet tractar objectes de diferents classes de manera uniforme.
program PolimorfismeExemple; {$APPTYPE CONSOLE} type TAnimal = class procedure MakeSound; virtual; end; TDog = class(TAnimal) procedure MakeSound; override; end; TCat = class(TAnimal) procedure MakeSound; override; end; procedure TAnimal.MakeSound; begin Writeln('L''animal fa un so.'); end; procedure TDog.MakeSound; begin Writeln('El gos borda.'); end; procedure TCat.MakeSound; begin Writeln('El gat miola.'); end; var Animal: TAnimal; begin Animal := TDog.Create; Animal.MakeSound; // Sortida: El gos borda. Animal.Free; Animal := TCat.Create; Animal.MakeSound; // Sortida: El gat miola. Animal.Free; end.
Explicació del Codi
-
Definició de la Superclasse
TAnimal
:- Conté un mètode
MakeSound
declarat com avirtual
.
- Conté un mètode
-
Definició de les Subclasses
TDog
iTCat
:- Hereten de
TAnimal
i sobreescriuen el mètodeMakeSound
.
- Hereten de
-
Polimorfisme en Acció:
- Es crea una variable de tipus
TAnimal
que pot contenir instàncies deTDog
oTCat
. - Es crida el mètode
MakeSound
de la variableAnimal
, demostrant com el comportament varia segons la instància real.
- Es crea una variable de tipus
Exercicis Pràctics
Exercici 1: Crear una Jerarquia de Classes
- Crea una classe
TVehicle
amb un mètodeMove
virtual. - Crea dues subclasses
TCar
iTBike
que heretin deTVehicle
i sobreescriguin el mètodeMove
. - Crea instàncies de
TCar
iTBike
i crida el mètodeMove
per a cada una.
Solució de l'Exercici 1
program VehicleExemple; {$APPTYPE CONSOLE} type TVehicle = class procedure Move; virtual; end; TCar = class(TVehicle) procedure Move; override; end; TBike = class(TVehicle) procedure Move; override; end; procedure TVehicle.Move; begin Writeln('El vehicle es mou.'); end; procedure TCar.Move; begin Writeln('El cotxe es mou.'); end; procedure TBike.Move; begin Writeln('La bicicleta es mou.'); end; var Vehicle: TVehicle; begin Vehicle := TCar.Create; Vehicle.Move; // Sortida: El cotxe es mou. Vehicle.Free; Vehicle := TBike.Create; Vehicle.Move; // Sortida: La bicicleta es mou. Vehicle.Free; end.
Resum
En aquest tema, hem après sobre l'herència i el polimorfisme en Object Pascal. Hem vist com l'herència permet crear subclasses que hereten i poden modificar el comportament de les superclasses. També hem explorat com el polimorfisme permet tractar objectes de diferents classes de manera uniforme, utilitzant mètodes virtuals i sobreescrits. Aquests conceptes són fonamentals per escriure codi orientat a objectes que sigui reutilitzable i mantenible.
Curs de Programació Delphi/Object Pascal
Mòdul 1: Introducció a Delphi/Object Pascal
- Introducció a Delphi i Object Pascal
- Configuració de l'Entorn de Desenvolupament
- Primera Aplicació Delphi
- Sintaxi i Estructura Bàsiques
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control i Procediments
- Declaracions Condicionals
- Bucles i Iteració
- Procediments i Funcions
- Abast i Durada de les Variables
- Gestió d'Errors i Depuració
Mòdul 3: Treballant amb Dades
- Arrays i Cadenes
- Registres i Conjunts
- Tipus Enumerats i Subrang
- Gestió d'Arxius
- Accés a Bases de Dades
Mòdul 4: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Herència i Polimorfisme
- Interfícies i Classes Abstractes
- Gestió d'Excepcions en POO
Mòdul 5: Funcions Avançades de Delphi
- Generics i Col·leccions
- Multifil i Programació Paral·lela
- Desenvolupament Basat en Components
- Biblioteca d'Execució de Delphi (RTL)
- Tècniques Avançades de Depuració
Mòdul 6: Desenvolupament d'Interfícies Gràfiques amb VCL i FMX
- Introducció a VCL
- Creació de Formularis i Controls
- Programació Basada en Esdeveniments
- Introducció a FireMonkey (FMX)
- Desenvolupament Multiplataforma amb FMX
Mòdul 7: Desenvolupament Web i Mòbil
- Desenvolupament Web amb Delphi
- Serveis RESTful
- Desenvolupament Mòbil amb Delphi
- Desplegament d'Aplicacions Mòbils
- Integració amb Serveis Web
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Organització del Codi i Documentació
- Patrons de Disseny en Delphi
- Tècniques de Refactorització
- Proves Unitàries i Desenvolupament Basat en Proves
- Optimització del Rendiment