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
IVehicle
amb els mètodesStartEngine
iStopEngine
. - 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
TAnimal
amb un mètode abstracteMakeSound
. - Crea una classe
TDog
que hereti deTAnimal
i 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