Introducció
En aquest tema, explorarem els generics i les col·leccions en Delphi/Object Pascal. Els generics permeten crear classes, procediments i funcions que poden operar amb qualsevol tipus de dades, proporcionant una major flexibilitat i reutilització del codi. Les col·leccions són estructures de dades que permeten emmagatzemar i gestionar grups d'objectes de manera eficient.
Conceptes Clau
Generics
- Definició: Els generics són plantilles que permeten definir classes, procediments i funcions que poden treballar amb qualsevol tipus de dades.
- Avantatges:
- Reutilització del codi.
- Tipus de dades segurs en temps de compilació.
- Millora de la llegibilitat i mantenibilitat del codi.
Col·leccions
- Definició: Les col·leccions són estructures de dades que permeten emmagatzemar, gestionar i manipular grups d'objectes.
- Tipus de Col·leccions:
- TList: Una llista genèrica.
- TDictionary: Un diccionari genèric que emmagatzema parelles clau-valor.
- TQueue: Una cua genèrica.
- TStack: Una pila genèrica.
Exemples Pràctics
Exemple de Generics
program GenericsExample;
{$APPTYPE CONSOLE}
uses
System.Generics.Collections;
type
TBox<T> = class
private
FValue: T;
public
constructor Create(AValue: T);
function GetValue: T;
end;
constructor TBox<T>.Create(AValue: T);
begin
FValue := AValue;
end;
function TBox<T>.GetValue: T;
begin
Result := FValue;
end;
var
IntBox: TBox<Integer>;
StrBox: TBox<string>;
begin
IntBox := TBox<Integer>.Create(123);
StrBox := TBox<string>.Create('Hello, Generics!');
Writeln('IntBox Value: ', IntBox.GetValue);
Writeln('StrBox Value: ', StrBox.GetValue);
Readln;
end.Explicació:
- TBox
: Una classe genèrica que pot emmagatzemar qualsevol tipus de dades. - Create: Constructor que inicialitza el valor.
- GetValue: Mètode que retorna el valor emmagatzemat.
Exemple de Col·leccions
program CollectionsExample;
{$APPTYPE CONSOLE}
uses
System.Generics.Collections;
var
List: TList<Integer>;
Dict: TDictionary<string, Integer>;
I: Integer;
begin
// Exemple de TList
List := TList<Integer>.Create;
try
List.Add(10);
List.Add(20);
List.Add(30);
for I in List do
Writeln('List Item: ', I);
finally
List.Free;
end;
// Exemple de TDictionary
Dict := TDictionary<string, Integer>.Create;
try
Dict.Add('One', 1);
Dict.Add('Two', 2);
Dict.Add('Three', 3);
for var Key in Dict.Keys do
Writeln('Dict Item: ', Key, ' = ', Dict[Key]);
finally
Dict.Free;
end;
Readln;
end.Explicació:
- TList
: Una llista genèrica que emmagatzema enters. - TDictionary<string, Integer>: Un diccionari genèric que emmagatzema parelles clau-valor (cadena-enter).
Exercicis Pràctics
Exercici 1: Crear una Classe Genèrica
Descripció: Crea una classe genèrica TContainer<T> que emmagatzemi un valor de qualsevol tipus i implementi mètodes per establir i obtenir aquest valor.
Solució:
type
TContainer<T> = class
private
FValue: T;
public
procedure SetValue(AValue: T);
function GetValue: T;
end;
procedure TContainer<T>.SetValue(AValue: T);
begin
FValue := AValue;
end;
function TContainer<T>.GetValue: T;
begin
Result := FValue;
end;Exercici 2: Utilitzar Col·leccions Genèriques
Descripció: Crea una llista genèrica TList<string> i afegeix-hi tres cadenes. Després, mostra les cadenes a la consola.
Solució:
var
StringList: TList<string>;
Str: string;
begin
StringList := TList<string>.Create;
try
StringList.Add('Delphi');
StringList.Add('Object Pascal');
StringList.Add('Generics');
for Str in StringList do
Writeln('StringList Item: ', Str);
finally
StringList.Free;
end;
Readln;
end.Errors Comuns i Consells
-
Error: No especificar el tipus de dades en una col·lecció genèrica.
- Solució: Assegura't de definir el tipus de dades entre els símbols
<i>.
- Solució: Assegura't de definir el tipus de dades entre els símbols
-
Error: Intentar afegir un tipus de dades incorrecte a una col·lecció genèrica.
- Solució: Verifica que el tipus de dades que estàs afegint coincideixi amb el tipus de la col·lecció.
Conclusió
En aquest tema, hem après sobre els generics i les col·leccions en Delphi/Object Pascal. Els generics ens permeten crear codi més flexible i reutilitzable, mentre que les col·leccions ens ajuden a gestionar grups d'objectes de manera eficient. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. En el proper tema, explorarem la programació multifil i paral·lela en Delphi.
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
