En aquest tema, explorarem dos conceptes fonamentals de la Programació Orientada a Objectes (POO) en Delphi/Object Pascal: les interfícies i les classes abstractes. Aquests conceptes són crucials per a la creació de codi modular, reutilitzable i mantenible.
Què és una Interfície?
Una interfície és una col·lecció de definicions de mètodes sense implementació. Les interfícies defineixen un contracte que les classes han de complir. Això permet que diferents classes implementin la mateixa interfície de maneres diferents.
Característiques de les Interfícies:
- No poden contenir implementacions de mètodes.
- No poden contenir camps (variables).
- Les classes que implementen una interfície han de proporcionar implementacions per a tots els mètodes definits en la interfície.
Exemple d'Interfície:
type
IShape = interface
['{8A5B5C3D-4E6F-4A7B-8C9D-0E1F2A3B4C5D}']
function GetArea: Double;
function GetPerimeter: Double;
end;En aquest exemple, IShape és una interfície que defineix dos mètodes: GetArea i GetPerimeter.
Implementació d'una Interfície:
type
TRectangle = class(TInterfacedObject, IShape)
private
FWidth, FHeight: Double;
public
constructor Create(AWidth, AHeight: Double);
function GetArea: Double;
function GetPerimeter: Double;
end;
constructor TRectangle.Create(AWidth, AHeight: Double);
begin
FWidth := AWidth;
FHeight := AHeight;
end;
function TRectangle.GetArea: Double;
begin
Result := FWidth * FHeight;
end;
function TRectangle.GetPerimeter: Double;
begin
Result := 2 * (FWidth + FHeight);
end;En aquest exemple, TRectangle implementa la interfície IShape proporcionant les implementacions dels mètodes GetArea i GetPerimeter.
Què és una Classe Abstracta?
Una classe abstracta és una classe que no es pot instanciar directament i que pot contenir mètodes abstractes (sense implementació) i mètodes concrets (amb implementació). Les classes abstractes serveixen com a base per a altres classes.
Característiques de les Classes Abstractes:
- Pot contenir mètodes abstractes i concrets.
- No es pot instanciar directament.
- Les subclasses han de proporcionar implementacions per als mètodes abstractes.
Exemple de Classe Abstracta:
type
TShape = class abstract
public
function GetArea: Double; virtual; abstract;
function GetPerimeter: Double; virtual; abstract;
end;En aquest exemple, TShape és una classe abstracta que defineix dos mètodes abstractes: GetArea i GetPerimeter.
Implementació d'una Classe Abstracta:
type
TCircle = class(TShape)
private
FRadius: Double;
public
constructor Create(ARadius: Double);
function GetArea: Double; override;
function GetPerimeter: Double; override;
end;
constructor TCircle.Create(ARadius: Double);
begin
FRadius := ARadius;
end;
function TCircle.GetArea: Double;
begin
Result := Pi * FRadius * FRadius;
end;
function TCircle.GetPerimeter: Double;
begin
Result := 2 * Pi * FRadius;
end;En aquest exemple, TCircle hereta de TShape i proporciona les implementacions dels mètodes GetArea i GetPerimeter.
Comparació entre Interfícies i Classes Abstractes
| Característica | Interfícies | Classes Abstractes |
|---|---|---|
| Implementació de mètodes | No | Sí |
| Conté camps | No | Sí |
| Herència múltiple | Sí | No |
| Instanciació directa | No | No |
| Ús principal | Definir un contracte | Proporcionar una base per a altres classes |
Exercicis Pràctics
Exercici 1: Crear una Interfície i Implementar-la
- Defineix una interfície
IVehicleamb els mètodesStartEngineiStopEngine. - Implementa aquesta interfície en una classe
TCar.
Solució:
type
IVehicle = interface
['{D1E2F3A4-B5C6-7D8E-9F0A-1B2C3D4E5F6A}']
procedure StartEngine;
procedure StopEngine;
end;
TCar = class(TInterfacedObject, IVehicle)
public
procedure StartEngine;
procedure StopEngine;
end;
procedure TCar.StartEngine;
begin
WriteLn('Engine started.');
end;
procedure TCar.StopEngine;
begin
WriteLn('Engine stopped.');
end;Exercici 2: Crear una Classe Abstracta i Heretar-la
- Defineix una classe abstracta
TAnimalamb un mètode abstracteMakeSound. - Crea una classe
TDogque hereti deTAnimali implementi el mètodeMakeSound.
Solució:
type
TAnimal = class abstract
public
procedure MakeSound; virtual; abstract;
end;
TDog = class(TAnimal)
public
procedure MakeSound; override;
end;
procedure TDog.MakeSound;
begin
WriteLn('Woof!');
end;Resum
En aquesta secció, hem après sobre les interfícies i les classes abstractes en Delphi/Object Pascal. Les interfícies defineixen un contracte que les classes han de complir, mentre que les classes abstractes proporcionen una base per a altres classes. Hem vist exemples pràctics de com definir i implementar interfícies i classes abstractes, i hem comparat les seves característiques clau. Aquests conceptes són essencials per a la creació de codi modular i reutilitzable en la programació orientada a objectes.
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
