Què és la Programació Orientada a Objectes (POO)?

La Programació Orientada a Objectes (POO) és un paradigma de programació que utilitza "objectes" per dissenyar aplicacions i programes. Els objectes poden representar entitats del món real com ara persones, llocs o coses, i encapsulen tant dades com comportaments.

Conceptes Clau de la POO

  1. Classes i Objectes:

    • Classe: És una plantilla o model que defineix les propietats (atributs) i els comportaments (mètodes) que els objectes creats a partir d'aquesta classe tindran.
    • Objecte: És una instància d'una classe. Cada objecte té el seu propi conjunt de dades, però comparteix la mateixa estructura i comportament definit per la classe.
  2. Encapsulació:

    • És el procés de combinar dades i mètodes que operen sobre aquestes dades en una sola unitat, la classe. Això ajuda a protegir les dades de l'accés no autoritzat i a mantenir la integritat de l'objecte.
  3. Herència:

    • Permet crear una nova classe a partir d'una classe existent. La nova classe (subclasse) hereta els atributs i mètodes de la classe existent (superclasse), i pot afegir-ne de nous o modificar els existents.
  4. Polimorfisme:

    • Permet que una interfície comuna sigui utilitzada per diferents tipus d'objectes. Això significa que es poden utilitzar diferents objectes de diferents classes de manera intercanviable si comparteixen la mateixa interfície o classe base.
  5. Abstracció:

    • És el procés de simplificar la complexitat ocultant els detalls innecessaris i mostrant només les característiques essencials d'un objecte.

Exemple Pràctic en Delphi/Object Pascal

Definició d'una Classe

type
  TAnimal = class
  private
    FName: string;
    FAge: Integer;
  public
    constructor Create(Name: string; Age: Integer);
    procedure Speak; virtual;
    property Name: string read FName write FName;
    property Age: Integer read FAge write FAge;
  end;

Explicació del Codi

  • type TAnimal = class: Defineix una nova classe anomenada TAnimal.
  • private: Defineix la secció privada de la classe, on es declaren els atributs FName i FAge. Aquests atributs només són accessibles des de dins de la classe.
  • public: Defineix la secció pública de la classe, on es declaren el constructor, el mètode Speak i les propietats Name i Age.
  • constructor Create(Name: string; Age: Integer): Defineix un constructor que inicialitza els atributs FName i FAge.
  • procedure Speak; virtual: Defineix un mètode virtual que pot ser sobreescrit per subclasses.
  • property Name: string read FName write FName: Defineix una propietat Name que permet accedir i modificar l'atribut FName.
  • property Age: Integer read FAge write FAge: Defineix una propietat Age que permet accedir i modificar l'atribut FAge.

Creació d'Objectes i Ús de Mètodes

var
  Animal: TAnimal;
begin
  Animal := TAnimal.Create('Luna', 3);
  Animal.Speak;
  WriteLn('Name: ', Animal.Name);
  WriteLn('Age: ', Animal.Age);
  Animal.Free;
end;

Explicació del Codi

  • var Animal: TAnimal: Declara una variable Animal de tipus TAnimal.
  • Animal := TAnimal.Create('Luna', 3): Crea una nova instància de TAnimal amb el nom 'Luna' i l'edat 3.
  • Animal.Speak: Crida el mètode Speak de l'objecte Animal.
  • WriteLn('Name: ', Animal.Name): Mostra el nom de l'animal.
  • WriteLn('Age: ', Animal.Age): Mostra l'edat de l'animal.
  • Animal.Free: Allibera la memòria ocupada per l'objecte Animal.

Herència i Polimorfisme

type
  TDog = class(TAnimal)
  public
    procedure Speak; override;
  end;

procedure TDog.Speak;
begin
  WriteLn('Woof!');
end;

Explicació del Codi

  • type TDog = class(TAnimal): Defineix una nova classe TDog que hereta de TAnimal.
  • procedure Speak; override: Sobreescriu el mètode Speak de la classe base TAnimal.
  • procedure TDog.Speak: Implementa el mètode Speak per a la classe TDog, que mostra 'Woof!'.

Ús de la Subclasse

var
  Dog: TDog;
begin
  Dog := TDog.Create('Buddy', 5);
  Dog.Speak;
  WriteLn('Name: ', Dog.Name);
  WriteLn('Age: ', Dog.Age);
  Dog.Free;
end;

Explicació del Codi

  • var Dog: TDog: Declara una variable Dog de tipus TDog.
  • Dog := TDog.Create('Buddy', 5): Crea una nova instància de TDog amb el nom 'Buddy' i l'edat 5.
  • Dog.Speak: Crida el mètode Speak de l'objecte Dog, que mostra 'Woof!'.
  • WriteLn('Name: ', Dog.Name): Mostra el nom del gos.
  • WriteLn('Age: ', Dog.Age): Mostra l'edat del gos.
  • Dog.Free: Allibera la memòria ocupada per l'objecte Dog.

Exercicis Pràctics

Exercici 1: Crear una Classe TCat

  1. Defineix una classe TCat que hereti de TAnimal.
  2. Sobreescriu el mètode Speak per mostrar 'Meow!'.
  3. Crea una instància de TCat i crida el mètode Speak.

Solució

type
  TCat = class(TAnimal)
  public
    procedure Speak; override;
  end;

procedure TCat.Speak;
begin
  WriteLn('Meow!');
end;

var
  Cat: TCat;
begin
  Cat := TCat.Create('Whiskers', 2);
  Cat.Speak;
  WriteLn('Name: ', Cat.Name);
  WriteLn('Age: ', Cat.Age);
  Cat.Free;
end;

Exercici 2: Crear una Classe TBird

  1. Defineix una classe TBird que hereti de TAnimal.
  2. Sobreescriu el mètode Speak per mostrar 'Tweet!'.
  3. Crea una instància de TBird i crida el mètode Speak.

Solució

type
  TBird = class(TAnimal)
  public
    procedure Speak; override;
  end;

procedure TBird.Speak;
begin
  WriteLn('Tweet!');
end;

var
  Bird: TBird;
begin
  Bird := TBird.Create('Tweety', 1);
  Bird.Speak;
  WriteLn('Name: ', Bird.Name);
  WriteLn('Age: ', Bird.Age);
  Bird.Free;
end;

Resum

En aquesta secció, hem introduït els conceptes bàsics de la Programació Orientada a Objectes (POO) i hem vist com aplicar-los en Delphi/Object Pascal. Hem après sobre classes, objectes, encapsulació, herència, polimorfisme i abstracció. També hem creat exemples pràctics per il·lustrar aquests conceptes i hem proporcionat exercicis per reforçar l'aprenentatge. En la següent secció, explorarem més a fons les classes i els objectes.

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