Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Delphi 10.3
  3. Run Time Library, fondation de Delphi
Extrait - Delphi 10.3 Programmation orientée objet en environnement Windows
Extraits du livre
Delphi 10.3 Programmation orientée objet en environnement Windows
9 avis
Revenir à la page d'achat du livre

Run Time Library, fondation de Delphi

Les bibliothèques fournies par Delphi

L’intérêt pour un développeur d’utiliser Delphi est de pouvoir utiliser directement un ensemble de bibliothèques de fonctions permettant des opérations de haut niveau.

Ces bibliothèques ne sont qu’une encapsulation des API du système d’exploitation sur lequel le développeur désire faire fonctionner son application.

Voici une liste non exhaustive des bibliothèques fournies. Cette liste dépend de la version de l’IDE que l’on utilise. De plus, le développeur peut à son gré intégrer d’autres bibliothèques de composants fournis par des éditeurs tiers tels que DevExpress ou TMS Software ou même créer ses propres composants qu’il pourra intégrer à sa palette. 

Liste des bibliothèques :

  • RTL : RunTime Library

  • VCL : Visual Component Library

  • FireMonkey

  • FireDAC /dbExpress

  • LiveBindings

  • REST Client

Chacune de ces bibliothèques s’utilise dans un domaine particulier : programmation système, application graphique, gestion de base de données, interopérabilité et communication avec des serveurs tiers.

Elles s’appuient toutes sur la bibliothèque RTL qui implémente les fonctions bas niveau comme la gestion des objets et des interfaces, les flux d’entrées sorties, la...

RTL mise en pratique

La RTL fournit un ensemble de classes qui facilite et simplifie l’écriture du code.

Comme vu dans le schéma précédent, les objets de base fournis par la RTL sont le TObject, le TPersistent et le TComponent.

De plus, cette bibliothèque fournit des classes pour manipuler les fichiers, la base de registre, les listes et les fonctions systèmes et mathématiques.

1. La classe TObject

Il s’agit de la classe de base fournie par Delphi. Elle est l’ancêtre de tout le système de programmation orientée objet de Delphi : tous les objets finalement hériteront de TObject.

Cette classe expose peu de méthodes et propriétés. Son rôle est de gérer en interne les concepts objets vus au chapitre précédent, avec notamment la gestion mémoire lors des phases de constructions et de destructions. La classe TObject expose aussi la méthode ClassName qui est très utile pour connaître la nature de la classe de la référence pointée.

unit UObjectExemple; 
 
interface 
 
uses Windows; 
 
type TFamily = class(TObject) end; 
type TObjectGrdFather = class(TFamily) end; 
type TObjectFather = class(TObjectGrdFather) end; 
type TObjectChild = class(TObjectFather) end; 
 
implementation 
 
procedure LogClassName(anObject:TFamily); 
begin 
 OutputDebugString(pchar(AnObject.ClassName)); 
end; 
 
procedure ObjectExemple(); 
var anObject:TFamily; 
begin 
 AnObject := TObjectGrdFather.Create; 
 LogClassName(AnObject); 
 anObject.Free; 
 
 AnObject := TObjectChild.Create; 
 LogClassName(AnObject); 
 anObject.Free; 
end; 
 
end. 

La procédure LogClassName ne comprend qu’une seule ligne d’implémentation. On récupère le nom de la classe par l’appel à la méthode ClassName et on affiche ce nom dans la console de sortie grâce à la routine OutputDebugString. En mode debug, appeler OutputDebugString affiche du texte dans la console de debug de l’IDE Delphi.

La procédure LogClassName prend en paramètre un objet de type TFamily qui est la classe ancêtre de toutes les classes utilisées. Cependant...

Les méthodes anonymes

1. Définition

Une méthode anonyme représente un bloc de code bien délimité pouvant se comporter comme une procédure (sans résultat) ou une fonction (avec un résultat). Comme son nom l’indique, une méthode anonyme ne possède pas de nom, on ne peut donc pas l’appeler en tant que routine. Les méthodes anonymes s’utilisent par affectation à une variable pour finalement interagir avec l’implémentation de la méthode anonyme à la manière d’un évènement. Ainsi, la méthode anonyme est exécutée depuis n’importe quel endroit.

Une méthode anonyme n’apporte pas de nouvelles fonctionnalités mais des facilités d’implémentation d’une part, grâce à un allègement de l’écriture et, d’autre part, avec la possibilité d’utiliser des variables provenant de la routine d’où elle est appelée. Ce principe aussi nommé closure allège énormément l’implémentation d’actions asynchrones. Ces allègements d’écritures seront détaillés dans le chapitre sur les traitements multithreads.

Asynchronisme et gestion de threads sont des concepts utilisés lorsque l’on souhaite programmer des actions concurrentes simultanées.

2. Déclaration

Une définition...

Les interfaces

1. Définition

On peut définir une interface comme un type abstrait qui comprend une collection de méthodes abstraites. Une interface peut contenir aussi des propriétés car une propriété n’est ni plus ni moins qu’un appel à des méthodes de lecture ou d’affectation. Cette liste de méthodes et de propriétés s’apparente à un contrat que l’utilisateur de l’interface doit respecter pour pouvoir l’implémenter. On ne peut pas les instancier directement, et on pourrait facilement les confondre avec des classes abstraites. Il existe cependant deux grandes différences :

  • Les interfaces sont gérées par des compteurs de référence et donc il est inutile d’appeler un destructeur pour libérer la mémoire.

  • Aucune implémentation de méthode n’est possible, alors qu’une classe abstraite pourrait en contenir.

Les interfaces ont pour vocation d’être implémentées par une classe. Quand une classe implémente une interface, elle doit déclarer et implémenter toutes les méthodes de l’interface.

2. Déclaration

Comme convention, on propose à l’instar de T pour une classe d’utiliser la lettre I pour une interface. Il s’agit d’une convention très répandue mais on peut très bien décider d’utiliser le nom que l’on souhaite.

type IVoyage = interface 
 ['{671EDA43-BD36-417C-9F9D-83BB5156D5AD}']  
 function GetPrix: double; 
 procedure SetPrix(aValue: double); 
 property Prix : double read GetPrix write SetPrix; 
 function Information : string; 
end; 

Ici est définie une interface IVoyage qui expose trois méthodes GetPrix, SetPrix et Transport. Elle expose aussi une propriété Prix qui est reliée à GetPrix...

Conclusion

Ce chapitre a permis d’exposer les principaux concepts fournis par la RTL, et en particulier ce que propose l’implémentation des trois classes TObject, Exception et TPersistent.

Cette implémentation facilite grandement la programmation et la hiérarchie de classe est très astucieuse. Le nombre important de classes et de concepts qu’expose la RTL permet déjà de réaliser des programmes algorithmiques avancés et de s’interfacer avec le système d’exploitation.

La RTL n’expose pas de méthode pour réaliser des interfaces graphiques car ce rôle est géré par la VCL dont l’étude commence au chapitre suivant.