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