Cours Delphi les génériques sous Delphi.NET

Cours Delphi les génériques sous Delphi.NET, tutoriel & guide de travaux pratiques en pdf.

1 – Public concerné
1-1 – Les sources
2 – Les génériques qu’est-ce que c’est ?
3 – A quoi servent-ils
4 – Comment ça fonctionne ?
5 – Un exemple détaillé
6 – Les types de bases supportant les génériques
6-1 – Les classes
6-2 – Les enregistrements
6-3 – Les tableaux
6-4 – Les procédures et fonctions
6-4-1 – Le mot clé Default
6-5 – Les méthodes
6-6 – Les délégués
6-7 – Les interfaces
6-8 – Pour information
7 – Contraintes
7-1 – Sur une classe ancêtre
7-2 – Sur une ou plusieurs interfaces
7-3 – Sur l’accès à un constructeur sans paramètre
7-4 – Sur un type référence
7-5 – Sur un type valeur
7-6 – Sur un type nu (naked type)
8 – Héritage
8-1 – Portée des paramètres de type
9 – Surcharge de classe
9-1 – Surcharge d’opérateur
10 – Variable de classe dans les génériques
11 – La classe System.Type et les génériques
12 – L’instanciation des types génériques
13 – Type Nullable
13-1 – La déclaration
13-2 – L’assignation
13-3 – Opérateurs
13-4 – Diverses manipulations
14 – Les opérateurs is et as
15 – Classes partielles
16 – Net 3.0 et WPF
17 – Liens

Public concerné

Testé sous le Framework .NET 2.0 et Delphi 2007 beta.
Un rappel sur les nouveautés du framework dotNET 2.0.
Les sources
Les fichiers sources des différents exemples :
FTP.
HTTP.

Les génériques qu’est-ce que c’est ?

Le principe même des génériques est la réutilisation de traitements ou de structures de données sans se soucier du type de donnée manipulé. On utilisera évidemment le plus souvent les génériques sur des notions générales par exemple une liste ou une pile et moins sur une notion particulière tel qu’un tableau des jours de la semaine.
Les génériques traduisent le concept du polymorphisme paramétré.

A quoi servent-ils

Prenons le cas de figure d’une structure de données telle qu’une pile, elle peut contenir des entiers, des objets ou tout autre type reconnus.
Aujourd’hui sous Win32 ou dotNET 1.1 il nous faut déclarer un type TStack pour chaque type de donnée existant ou tout du moins utilisé dans nos traitements. Avec Delphi 2007 et uniquement sous dotNET 2.0 il est désormais possible de définir une fois pour toute une classe TStack générique, ce qui nous permettra de préciser lors de son utilisation quel type on souhaite manipuler. La généricité nous offrant ici la construction de type paramétrable et permet donc de faire abstraction lors de la conception des types de données manipulés.
Sous .NET 2.0 l’usage des génériques supprime le boxing/unboxing et les opérations de transtypage entre les types de données, limitant ainsi les vérifications de type lors de l’exécution du programme.

Comment ça fonctionne ?

Projet : ..\PremierGenerique
Etudions la déclaration d’une classe générique :
type
TGenericType<AnyType> = class
FData: AnyType;
function GetData: AnyType;
procedure SetData(Value: AnyType);
property Data: AnyType read GetData write SetData;
end;
function TGenericType<AnyType>.GetData: AnyType;
begin
Result := FData;
end;
procedure TGenericType<AnyType>.SetData(Value: AnyType);
begin
FData := Value;
end;
Ici TGenericType<AnyType> indique une classe générique, AnyType étant le paramètre de type référençant un type de donnée tel qu’Integer ou String. Chaque occurrence de AnyType présente dans cette déclaration sera, lors de la construction du type à la compilation, substituée par l’argument de type que l’on précisera de cette manière :
type TGenericTypeInt = TGenericType<Integer>; //Déclare un type à partir d’une classe générique

Un exemple détaillé

Après avoir déclaré notre classe et ses membres, voyons la création d’une instance de notre classe paramétrée.
Essayons la déclaration de variable suivante :
var
I: TGenericType;
ici la compilation échoue en provoquant l’erreur :
Identificateur non déclaré : ‘ TGenericType ‘ (E2003).
Pour instancier un générique il nous faut au préalable déclarer un type construit fermé qui précise l’usage de notre classe paramétrable :
type
TGenericTypeInt = TGenericType<Integer>; // La classe générique est paramétrée avec le type
Integer
Ensuite l’appel de son constructeur reste classique :
var
I: TGenericTypeInt;
begin
I := TGenericTypeInt.Create;

Les types de bases supportant les génériques

Certains types peuvent être à la base d’une déclaration de générique, en voici la liste.
Les classes
Le type class, de type référence, pourra être dérivé.
//Classe générique
TGenericClass<C>=Class
FData: T;
End;
De plus, n’importe quelle classe imbriquée dans une déclaration générique de classe ou une déclaration générique de record est elle-même une déclaration générique de classe, puisque le paramètre de type pour le type contenant doit être assuré pour créer un type construit.
Les exceptions étant des classes il est tout à fait possible de créer des exceptions génériques.
Les enregistrements
Le type record, de type valeur, ne pourra être dérivé car il ne supporte pas l’héritage.
//Record générique
TGenericEnregistrement<T>=Record
Data: T;
End;

 

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Les génériques sous Delphi.NET (260 Ko) (Cours PDF)
Les Génériques sous Delphi

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *