Notice: Undefined index: HTTPS in /home/developpez/www/developpez-com/template/entete.php on line 28
Les génériques avec Delphi 2009 Win32

Les génériques avec Delphi 2009 Win32

Avec en bonus les routines anonymes et les références de routine


précédentsommairesuivant

I. Introduction

I-A. Pré-requis

Ce tutoriel n'est pas destiné au débutant Delphi ou à celui qui n'a jamais pratiqué la programmation orientée objet. Il requiert de bien connaître le langage Delphi auparavant, et une connaissance non négligeable de la POO.

Concernant les génériques, aucune connaissance n'est nécessaire à la bonne compréhension et appréhension de ce tutoriel. Mais, au vu du nombre d'articles existant sur les génériques dans d'autres langages, je ne couvrirai pas en détails des questions du type "Comment bien utiliser les génériques ?". La prochaine section introduira rapidement le lecteur à la notion de générique, mais si vous ne savez pas encore ce que c'est, la meilleure compréhension viendra de la suite du tutoriel, par l'exemple.

Voici quelques articles traitant des génériques dans d'autres langages/plate-forme. Les concepts sont toujours les mêmes, et une grande partie de la mise en oeuvre également.

I-B. Que sont les génériques ?

Les génériques sont parfois appelés paramètres génériques, un nom qui permet déjà bien mieux de les introduire. Contrairement au paramètre d'une fonction (argument), qui a une valeur, le paramètre générique est un type. Et un paramètre générique paramétrise une classe, une interface, un record, ou, moins souvent, une méthode.

Pour donner immédiatement une idée plus claire, voici un extrait de la classe TList<T>, que vous pourrez trouvez dans l'unité Generics.Collections.pas.

Et oui, il est possible d'avoir des points dans le nom d'une unité (hors celui du .pas, j'entends). Cela n'a rien à rien à voir avec la notion d'espace de noms de .NET ni celle de package de Java. C'est juste que le . a même valeur qu'un _ à ce niveau : il fait partie du nom, tout simplement.

 
Sélectionnez

type
  TList<T> = class(TEnumerable<T>)
    // ...
  public
    // ...
    
    function Add(const Value: T): Integer;
    procedure Insert(Index: Integer; const Value: T);

    function Remove(const Value: T): Integer;
    procedure Delete(Index: Integer);
    procedure DeleteRange(AIndex, ACount: Integer);
    function Extract(const Value: T): T;
    
    procedure Clear;
    
    property Count: Integer read FCount write SetCount;
    property Items[Index: Integer]: T read GetItem write SetItem; default;
  end;
				

Vous pouvez directement observer l'étrangeté du type T. Mais est-ce vraiment un type ? Non, c'est un paramètre générique. Avec cette classe, si j'ai besoin d'une liste d'entiers, j'utilise TList<Integer>, au lieu d'une "simple" TList avec de nombreux transtypages nécessaires dans le code !

Les génériques permettent donc, en quelques sortes, de déclarer une série de classes (potentielles) en une seule fois, ou plus exactement de déclarer un modèle de classe, mais avec un (ou plusieurs) type paramétré qui pourra être changé à loisir. À chaque instanciation avec un nouveau type réel, c'est comme si vous écriviez toute une nouvelle classe, à partir du modèle, et donc rendez réelle une de ces classes potentielles.

Comme je l'ai dit, je ne m'étendrai pas sur le pourquoi du comment des génériques. Je vais immédiatement embrayer sur leur utilisation au quotidien. Si vous n'avez encore rien compris, ce n'est pas grave : tout va s'éclaircir petit à petit. Vous pouvez aussi consulter le tutoriel Les génériques sous Delphi .NETLes génériques sous Delphi .NET, par Laurent Dardenne de Laurent Dardenne.


précédentsommairesuivant

Tutoriels
Les génériques avec Delphi 2009 Win32 (English version) - également disponible en espagnol et en russe
Réaliser un plug-in comportant un composant
Construire une procédure pointant sur une méthode
Création de composants - en 4 parties
Refactoring avec Delphi 2007
Prise en main de Delphi 2005
Analyseurs syntaxiques - Leur fonctionnement par l'exemple
Créer un fichier d'aide HLP
Pourquoi un paramètre const change-t-il mystérieusement de valeur ?
Sources
SJRDUnits - Routines et classes diverses
SJRDComps - Quelques composants
Projet Sepi
Présentation
FAQ Sepi
Programmes
FunLabyrinthe - Jeu de labyrinthe très spécial et très fun
TrickTakingGame - Jeux de cartes à plis en ligne
MultiAgenda - Agenda multi-répertoires
DecodeFormulaires - Décode les formulaires
Excel --> HTML - Convertisseur de tableaux Excel en HTML
AddressLinks - Lie les adresses Internet et e-mail d'un document HTML
Vipion - Tic Tac Toe sur 4x4 cases avec jeu de l'ordinateur
BigCalc - Calculatrice de haut niveau
Espace paroissial Astérion de Watermael-Boitsfort
  

Notice: Undefined index: HTTPS in /home/developpez/www/developpez-com/template/pied.php on line 5

Copyright © 2008 Sébastien Doeraene. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.