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
MakeSounddeclarat com avirtual, el que permet que sigui sobreescrit per subclasses.
- Conté un mètode
-
Definició de la Subclasse
TDog:- Hereta de
TAnimali sobreescriu el mètodeMakeSoundutilitzant la paraula clauoverride.
- Hereta de
-
Creació d'Objectes:
- Es creen instàncies de
TAnimaliTDog. - Es criden els mètodes
MakeSoundde 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
MakeSounddeclarat com avirtual.
- Conté un mètode
-
Definició de les Subclasses
TDogiTCat:- Hereten de
TAnimali sobreescriuen el mètodeMakeSound.
- Hereten de
-
Polimorfisme en Acció:
- Es crea una variable de tipus
TAnimalque pot contenir instàncies deTDogoTCat. - Es crida el mètode
MakeSoundde 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
TVehicleamb un mètodeMovevirtual. - Crea dues subclasses
TCariTBikeque heretin deTVehiclei sobreescriguin el mètodeMove. - Crea instàncies de
TCariTBikei crida el mètodeMoveper 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
