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

  1. Definició de la Superclasse TAnimal:

    • Conté un mètode MakeSound declarat com a virtual, el que permet que sigui sobreescrit per subclasses.
  2. Definició de la Subclasse TDog:

    • Hereta de TAnimal i sobreescriu el mètode MakeSound utilitzant la paraula clau override.
  3. Creació d'Objectes:

    • Es creen instàncies de TAnimal i TDog.
    • Es criden els mètodes MakeSound de cada instància, demostrant com la subclasse pot modificar el comportament de la superclasse.

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

  1. Definició de la Superclasse TAnimal:

    • Conté un mètode MakeSound declarat com a virtual.
  2. Definició de les Subclasses TDog i TCat:

    • Hereten de TAnimal i sobreescriuen el mètode MakeSound.
  3. Polimorfisme en Acció:

    • Es crea una variable de tipus TAnimal que pot contenir instàncies de TDog o TCat.
    • Es crida el mètode MakeSound de la variable Animal, demostrant com el comportament varia segons la instància real.

Exercicis Pràctics

Exercici 1: Crear una Jerarquia de Classes

  1. Crea una classe TVehicle amb un mètode Move virtual.
  2. Crea dues subclasses TCar i TBike que heretin de TVehicle i sobreescriguin el mètode Move.
  3. Crea instàncies de TCar i TBike i crida el mètode Move 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

Mòdul 2: Estructures de Control i Procediments

Mòdul 3: Treballant amb Dades

Mòdul 4: Programació Orientada a Objectes

Mòdul 5: Funcions Avançades de Delphi

Mòdul 6: Desenvolupament d'Interfícies Gràfiques amb VCL i FMX

Mòdul 7: Desenvolupament Web i Mòbil

Mòdul 8: Millors Pràctiques i Patrons de Disseny

Mòdul 9: Projecte Final

© Copyright 2024. Tots els drets reservats