Download - + QUIZ - fnac-static.com

Transcript
Page 1: + QUIZ - fnac-static.com

ISBN

: 97

8-2-

409-

0246

6-5

38,9

0 €

Ce livre s’adresse à toute personne qui souhaite apprendre la programmation orientée objet avec le langage Delphi (en version 10.3 Community Edition) pour développer une application fenêtrée ou un service en environnement Windows. Tout au long du livre, l’auteur agrémente son propos de schémas UML afin que le lecteur puisse constater avec quelle facilité il est possible de programmer pour Windows avec Delphi.

Après une présentation de l’environnement de développement et un rappel sur les fonctions de base héritées du langage Pascal, le lec-teur étudie l’architecture et les principes de la programmation orien-tée objet en Delphi, illustrés par des programmes d’exemple mettant en œuvre les bibliothèques fournies par Delphi 10.3 Community Edi-tion. La manipulation de la bibliothèque graphique Visual Component Library lui permet ainsi d’appréhender concrètement la création d’applications fenêtrées attrayantes, robustes et performantes.

Dans la suite du livre, l’auteur familiarise le lecteur avec la création de librairies dll ou de composants Delphi que l’on peut inclure dans l’environnement de développement avant de détailler la notion de sérialisation de données aux formats XML et JSON ainsi que l’éla-boration de services système. Des chapitres dédiés présentent le concept de parallélisation de tâches sous Windows ainsi que les différentes méthodes pour communiquer entre applications, sans oublier la connexion aux bases de données grâce au moteur d’accès aux données FireDAC.

Pour finir, le lecteur a l’occasion de découvrir le framework FireMonkey associé au moteur de LiveBinding qui offre la portabilité du langage Delphi vers de nombreuses plateformes (Linux, Android ou iOS), ainsi que l’élaboration et la consommation de webservices REST.

Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.

Thierry GRASSIADiplômé de Telecom Physique Strasbourg depuis 1999, Thierry GRASSIA est aujourd’hui Ingénieur en développement expert sur le lan-gage Delphi qu’il a su éprouver au cours de ses différentes expériences professionnelles. Avec ce livre, il pro-pose au lecteur de l’accompagner dans son apprentissage du langage pour le mener vers le développement d’applications ou de services en envi-ronnement Windows.

Delphi 10.3Programmation Orientée Objet en environnement Windows

Pour plus d’informations :

Thierry GRASSIA

Delp

hi 1

0.3

Pro

gram

mat

ion

orie

ntée

obj

et e

n en

viro

nnem

ent W

indo

ws

Delphi 10.3 Programmation Orientée Objet

en environnement Windows

Téléchargementwww.editions-eni.fr.fr

sur www.editions-eni.fr : b Le code source

des exemples du livre.

En téléchargement

code des exemples

+ QUIZ

Version en ligne

OFFERTE !pendant 1 an

RI_XGT_NL_K.indd 37RI_XGT_NL_K.indd 37 01/12/2020 11:44:0601/12/2020 11:44:06

Page 2: + QUIZ - fnac-static.com

1Table des matières

Chapitre 1Introduction

1. À qui s'adresse ce livre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2. Delphi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3. Un peu de vocabulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.1 Téléchargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.2 Licence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Chapitre 2Prise en main de l'IDE de Delphi 10.3

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2. Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.1 Création d'un nouveau projet . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.2 Ajouts de quelques composants sur la fiche . . . . . . . . . . . . . . . . 362.3 Mise en forme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392.4 Définir un gestionnaire d'évènement . . . . . . . . . . . . . . . . . . . . . 512.5 Menu Chercher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

3. Le débogueur intégré de Delphi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.1 À quoi sert-il ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.2 Comment ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.3 Utilisation du débogueur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RIDELPH dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

lcroise
Tampon
Page 3: + QUIZ - fnac-static.com

2Programmation orientée objet en environnement Windows

Delphi 10.3

4. Refactoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634.1 Renommer une classe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.2 Extraire une méthode d’un bloc de code . . . . . . . . . . . . . . . . . . . 65

5. Renommage de nom de fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

6. Options du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

7. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

Chapitre 3Delphi, le langage Pascal objet

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

2. Structure des fichiers Delphi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712.1 Création d'un projet d'exemple . . . . . . . . . . . . . . . . . . . . . . . . . . 722.2 Le fichier .pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752.3 Le fichier .dpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782.4 Le fichier .dproj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

3. Le mot réservé uses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

4. Les variables et les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824.2 Portée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

5. Les types de variables Delphi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855.1 Les types entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855.2 Les types décimaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865.3 Les types booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865.4 Les types caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875.5 Les types chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . 875.6 Les types énumération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.7 Les tableaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

5.7.1 Tableau statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915.7.2 Tableau dynamique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925.7.3 Manipulations de base . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

5.8 Les variants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Page 4: + QUIZ - fnac-static.com

3Table des matières

5.9 Le record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955.9.1 Définition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955.9.2 Le mot réservé with. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

6. Les opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976.1 Opérateur d'affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976.2 Opérations mathématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976.3 Opérations logiques booléennes . . . . . . . . . . . . . . . . . . . . . . . . 1026.4 Comparaisons numériques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

7. Procédures et fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057.1 Procédure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077.2 Fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087.3 Passage de paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

8. Instructions basiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158.1 Les tests de conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158.2 If then else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168.3 Case of else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178.4 Les instructions d'itération. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

9. Les directives de compilation conditionnelles . . . . . . . . . . . . . . . . . 124

10. Les fonctions de conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12610.1 Les fonctions de conversion

pour les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . 12610.2 Les fonctions de conversion pour les nombres . . . . . . . . . . . . . 12710.3 Les fonctions de conversion récemment ajoutées . . . . . . . . . . 127

11. Les pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12911.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13011.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13011.3 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13111.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

Page 5: + QUIZ - fnac-static.com

4Programmation orientée objet en environnement Windows

Delphi 10.3

Chapitre 4Concept objet en Delphi

1. Introduction à la programmation orientée objet . . . . . . . . . . . . . . . 133

2. Principes de la programmation objet. . . . . . . . . . . . . . . . . . . . . . . . . 1342.1 Les champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342.2 Les méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342.3 Encapsulation de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1352.4 Représentation UML et nommage . . . . . . . . . . . . . . . . . . . . . . 1352.5 Héritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362.6 Polymorphisme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

3. Définition de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413.1 Constructeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433.2 Destructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1453.3 Le pointeur nil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1463.4 Pointeur interne Self. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1463.5 Propriétés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473.6 Propriété tableau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1503.7 Objets et pointeurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1513.8 Évènements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1523.9 L'opérateur is. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1573.10 L'opérateur as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1573.11 Champs et méthodes statiques . . . . . . . . . . . . . . . . . . . . . . . . . 159

4. Mise en pratique - Application pour la location de véhicules . . . . . 1604.1 Convention de nommage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1614.2 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1624.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1704.4 Remarques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

Page 6: + QUIZ - fnac-static.com

5Table des matières

Chapitre 5Run Time Library, fondation de Delphi

1. Les bibliothèques fournies par Delphi . . . . . . . . . . . . . . . . . . . . . . . 175

2. RTL mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1762.1 La classe TObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1772.2 Les cas d’exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782.3 La classe TPersistent et le système RTTI . . . . . . . . . . . . . . . . . 1842.4 Mise en pratique de l’introspection RTTI . . . . . . . . . . . . . . . . 1852.5 La classe helper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1892.6 Les listes en Delphi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

2.6.1 TList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1922.6.2 Exemple d'utilisation de TList . . . . . . . . . . . . . . . . . . . . 1932.6.3 TObjectList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2012.6.4 TArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2012.6.5 Les files (FIFO) TQueue et TObjectQueue . . . . . . . . . . 2032.6.6 Les piles (LIFO) TStack et TObjectStack. . . . . . . . . . . . 2062.6.7 Les listes de string TStringList . . . . . . . . . . . . . . . . . . . . 2062.6.8 Les dictionnaires TDictionnary

et TObjectDictionnary . . . . . . . . . . . . . . . . . . . . . . . . . . 2172.7 Le système de fichiers TFile, TPath, TDirectory . . . . . . . . . . . 219

2.7.1 TPath : Manipulation de chemins sur le disque . . . . . . 2202.7.2 TDirectory : Parcours et manipulation de répertoire . . 2222.7.3 TFile : Manipulation de fichier . . . . . . . . . . . . . . . . . . . . 224

2.8 Les flux, TStream et ses descendants . . . . . . . . . . . . . . . . . . . . 2272.9 Opérations mathématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2332.10 La manipulation de dates avec TDate et TTime . . . . . . . . . . . 2352.11 La base des registres TRegistry . . . . . . . . . . . . . . . . . . . . . . . . . 2402.12 Les expressions régulières avec TRegEx . . . . . . . . . . . . . . . . . . 2442.13 Compression de fichier ou de répertoires . . . . . . . . . . . . . . . . . 245

3. Les méthodes anonymes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2463.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2463.2 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

Page 7: + QUIZ - fnac-static.com

6Programmation orientée objet en environnement Windows

Delphi 10.3

3.3 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2473.4 Le principe de closure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2483.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

4. Les interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2504.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2504.2 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2514.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2524.4 Héritage d'interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2534.5 Utilisation de plusieurs interfaces, héritage multiple. . . . . . . . 2544.6 Utilisation de même nom de méthode

dans deux interfaces différentes . . . . . . . . . . . . . . . . . . . . . . . . 2554.7 Pour finir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

Chapitre 6Les applications Windows avec la VCL

1. La VCL : Visual Component Library. . . . . . . . . . . . . . . . . . . . . . . . . 2571.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2571.2 Les classes de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

1.2.1 La classe TComponent . . . . . . . . . . . . . . . . . . . . . . . . . . 2581.2.2 La classe TControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2591.2.3 La classe TWinControl . . . . . . . . . . . . . . . . . . . . . . . . . . 263

2. La classe TApplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

3. Les applications Windows VCL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2653.1 Une application Windows VCL simple. . . . . . . . . . . . . . . . . . . 2663.2 Une application MDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

4. Création d'une IHM avec Delphi. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2724.1 Paramètres d'affichage de TForm . . . . . . . . . . . . . . . . . . . . . . . 272

4.1.1 Méthodes relatives à l'apparition d'une fenêtre. . . . . . . 2734.1.2 Évènements de TForm . . . . . . . . . . . . . . . . . . . . . . . . . . 274

Page 8: + QUIZ - fnac-static.com

7Table des matières

4.2 La palette de composants standards . . . . . . . . . . . . . . . . . . . . . 2744.2.1 Le bouton : TButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2754.2.2 Zone de texte : TLabel. . . . . . . . . . . . . . . . . . . . . . . . . . . 2764.2.3 Case à cocher : TCheckBox. . . . . . . . . . . . . . . . . . . . . . . 2764.2.4 Choix multiples : TRadioButton . . . . . . . . . . . . . . . . . . 2774.2.5 Choix multiple dans une liste : TCombobox . . . . . . . . 2784.2.6 Les composants d'édition de textes . . . . . . . . . . . . . . . . 2794.2.7 Les menus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2804.2.8 Les alignements avec les TPanel et les TGroupBox. . . . 284

4.3 Modifier la position d'un composant . . . . . . . . . . . . . . . . . . . . 2894.4 Travailler avec des frames et réutiliser le contexte graphique . 2934.5 Sélectionner des fichiers (TOpenDialog)

et des répertoires (TOpenFileDialog) . . . . . . . . . . . . . . . . . . . . 2984.6 Présentation de données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

4.6.1 Avec TPageControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2994.6.2 En tableau avec la TStringGrid. . . . . . . . . . . . . . . . . . . . 3024.6.3 Présentation de données en arbre avec TTreeView. . . . 305

4.7 Zone avec barre de défilement : TScrollBox . . . . . . . . . . . . . . . 3094.8 Exécuter une action périodique avec TTimer . . . . . . . . . . . . . . 3124.9 Applications VCL multifenêtres . . . . . . . . . . . . . . . . . . . . . . . . 3134.10 Échanger des données entre deux fenêtres . . . . . . . . . . . . . . . . 315

4.10.1 Méthode par un appel modal . . . . . . . . . . . . . . . . . . . . . 3154.10.2 Méthode par évènement . . . . . . . . . . . . . . . . . . . . . . . . . 316

4.11 Récupérer des évènements du clavier . . . . . . . . . . . . . . . . . . . . 3184.12 Faire un glisser-déposer (Drag&Drop). . . . . . . . . . . . . . . . . . . . 3204.13 Afficher des images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

4.13.1 Le contrôle TImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3224.13.2 Le contrôle TImageList . . . . . . . . . . . . . . . . . . . . . . . . . . 3234.13.3 Le contrôle TImageCollection . . . . . . . . . . . . . . . . . . . . 324

4.14 Travailler avec les styles prédéfinis en VCL . . . . . . . . . . . . . . . 3274.15 Créer et utiliser son propre style VCL. . . . . . . . . . . . . . . . . . . . 329

Page 9: + QUIZ - fnac-static.com

8Programmation orientée objet en environnement Windows

Delphi 10.3

4.16 Configurer une application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3394.16.1 Par ligne de commande . . . . . . . . . . . . . . . . . . . . . . . . . . 3394.16.2 Par fichier de configuration. . . . . . . . . . . . . . . . . . . . . . . 340

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

Chapitre 7Les librairies (dll) et les packages (bpl)

1. Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

2. Mise en pratique de l'utilisation d'une dll . . . . . . . . . . . . . . . . . . . . . 3452.1 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3452.2 Export de routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3462.3 Exploitation d'une dll dans un exécutable . . . . . . . . . . . . . . . . 347

2.3.1 Chargement statique de la dll. . . . . . . . . . . . . . . . . . . . . 3492.3.2 Chargement dynamique de la dll . . . . . . . . . . . . . . . . . . 3512.3.3 La directive delayed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

2.4 Passage de chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . 3532.4.1 La méthode ShareMem . . . . . . . . . . . . . . . . . . . . . . . . . . 3532.4.2 La méthode par type primitif (pchar integer) . . . . . . . . 3562.4.3 Évènement levé dans une dll et utilisé

dans le programme hôte . . . . . . . . . . . . . . . . . . . . . . . . . 358

3. Les packages BPL Delphi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3633.1 Création d'un package runtime . . . . . . . . . . . . . . . . . . . . . . . . . 3633.2 Création d'un package design . . . . . . . . . . . . . . . . . . . . . . . . . . 372

4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

Page 10: + QUIZ - fnac-static.com

9Table des matières

Chapitre 8Représentation de données : formats XML et JSON

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

2. Format XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3822.1 Écriture du fichier XML, sérialisation directe . . . . . . . . . . . . . . 3822.2 Lecture du fichier XML, désérialisation directe . . . . . . . . . . . . 393

3. XML Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3983.1 Utilisation du moteur XML Data Binding . . . . . . . . . . . . . . . . 3993.2 Sérialisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4063.3 Désérialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

4. Format JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4084.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4084.2 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4094.3 Sérialisation JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410

4.3.1 Par une structure objet définie manuellement . . . . . . . 4104.3.2 Par réflexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

4.4 Désérialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4154.4.1 Par la classe TJSONObject . . . . . . . . . . . . . . . . . . . . . . . 4154.4.2 Par réflexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

Chapitre 9Traitement de tâches asynchrones

1. Description d'un processus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

2. Les threads dans un processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

3. Pourquoi utiliser du multithreading ? . . . . . . . . . . . . . . . . . . . . . . . . 4233.1 Effectuer plusieurs traitements en parallèle . . . . . . . . . . . . . . . 4233.2 Donner une meilleure expérience utilisateur . . . . . . . . . . . . . . 424

4. La classe TThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

5. Thread transitoire TThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

Page 11: + QUIZ - fnac-static.com

10Programmation orientée objet en environnement Windows

Delphi 10.3

6. Thread transitoire par procédure anonyme (TThread.CreateAnonymousThread) . . . . . . . . . . . . . . . . . . . . . . . . 431

7. Thread persistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432

8. Les concepts de ressource partagée et de section critique . . . . . . . . 436

9. Une liste thread safe, l'interface d'échange privilégiée entre deux threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4399.1 Par TCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4399.2 Par TThreadList et TMonitor . . . . . . . . . . . . . . . . . . . . . . . . . . 442

10. PPL : la bibliothèque de programmation parallèle . . . . . . . . . . . . . . 44310.1 Pourquoi cette bibliothèque en plus de TThread ? . . . . . . . . . 44410.2 Thread transitoire par TTask.Start . . . . . . . . . . . . . . . . . . . . . . 444

11. Synchronisation de deux threads grâce à l'appel Future . . . . . . . . . 445

12. Exécuter N actions en parallèle avec TParallel . . . . . . . . . . . . . . . . . 44912.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44912.2 Exécution de la même action en parallèle TParallel.For. . . . . . 44912.3 Exécution de N méthodes différentes avec TParallel.Join . . . . 45412.4 Remarques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

13. Recommandations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

14. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

Chapitre 10Création d’un service Windows

1. Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459

2. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4602.1 Configuration du type d’exécution . . . . . . . . . . . . . . . . . . . . . . 4602.2 Configuration du compte associé . . . . . . . . . . . . . . . . . . . . . . . 4602.3 Configuration des dépendances. . . . . . . . . . . . . . . . . . . . . . . . . 461

3. Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4613.1 Configuration du service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4633.2 Implémentation des évènements . . . . . . . . . . . . . . . . . . . . . . . 464

Page 12: + QUIZ - fnac-static.com

11Table des matières

3.3 Exécution et débogage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4683.3.1 L’évènement OnExecute . . . . . . . . . . . . . . . . . . . . . . . . . 4713.3.2 Utilisation d’un thread secondaire . . . . . . . . . . . . . . . . . 476

4. Débogage de service Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4774.1 Par fichier de log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4774.2 S’attacher au processus par l’IDE . . . . . . . . . . . . . . . . . . . . . . . 483

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

Chapitre 11Communication interprocessus (IPC)

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

2. Communication via message Windows . . . . . . . . . . . . . . . . . . . . . . 4882.1 Récupération du handle de fenêtre destinataire . . . . . . . . . . . . 4902.2 Envoi du message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4922.3 Réception du message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4942.4 À savoir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494

3. Communication via TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4953.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4953.2 Implémentation d’un système

de communication client/serveur . . . . . . . . . . . . . . . . . . . . . . . 4973.2.1 Implémentation du serveur . . . . . . . . . . . . . . . . . . . . . . 4983.2.2 Implémentation du client . . . . . . . . . . . . . . . . . . . . . . . . 5003.2.3 Gestion du contenu du message . . . . . . . . . . . . . . . . . . . 5023.2.4 Écriture d’un protocole . . . . . . . . . . . . . . . . . . . . . . . . . . 5043.2.5 Envoi d’un message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5063.2.6 Réception d’un message . . . . . . . . . . . . . . . . . . . . . . . . . 5083.2.7 Intégration dans le client . . . . . . . . . . . . . . . . . . . . . . . . 5133.2.8 Intégration dans le serveur . . . . . . . . . . . . . . . . . . . . . . . 5143.2.9 Identification de l’émetteur du message . . . . . . . . . . . . 515

Page 13: + QUIZ - fnac-static.com

12Programmation orientée objet en environnement Windows

Delphi 10.3

3.3 Implémentation d’un tchat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5203.3.1 Modifications du client de tchat . . . . . . . . . . . . . . . . . . 5263.3.2 Modifications de l’interface graphique . . . . . . . . . . . . . 5293.3.3 Rafraîchissement des onglets . . . . . . . . . . . . . . . . . . . . . 5313.3.4 Ajout d’un message entrant . . . . . . . . . . . . . . . . . . . . . . 5333.3.5 Envoi d’un message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5343.3.6 Autres modifications du serveur de tchat . . . . . . . . . . . 535

3.4 Utilisation du tchat dans un réseau d’ordinateurs . . . . . . . . . . 5403.4.1 Modélisation Model View Controller . . . . . . . . . . . . . . 5423.4.2 Création d’un service. . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545

Chapitre 12Connectivité aux bases de données

1. Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

2. Les différents frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5512.1 Le framework BDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5512.2 Le framework dbGo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5512.3 Le framework dbExpress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5522.4 Le framework FireDAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552

3. Le SQL en bref - fonctions de base . . . . . . . . . . . . . . . . . . . . . . . . . . 553

4. Les composants FireDAC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555

5. Une application de e-commerce avec back-office. . . . . . . . . . . . . . . 5575.1 Design de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . 5575.2 Étapes de développement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5595.3 Installation MariaDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560

6. L'application de back-office . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5636.1 Configuration des composants . . . . . . . . . . . . . . . . . . . . . . . . . 566

6.1.1 Configuration de TFDConnection : FDConnection . . . 5666.1.2 Configuration du TFDTable : FDTableProduct . . . . . . 5686.1.3 Configuration du TDataSource : DataSourceProduct . 568

Page 14: + QUIZ - fnac-static.com

13Table des matières

6.1.4 Configuration de TDBGrid : DBGridProduct . . . . . . . . 5696.1.5 Configuration du TDBNavigator :

DBNavigatorProduct . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5716.1.6 Configuration du TDBImage : DBImageProduct . . . . . 572

6.2 Interfaçages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5726.2.1 Interfaçage du champ description . . . . . . . . . . . . . . . . . 5726.2.2 Interfaçage du champ category. . . . . . . . . . . . . . . . . . . . 5736.2.3 Interfaçage du champ image. . . . . . . . . . . . . . . . . . . . . . 574

6.3 Personnalisation du rendu de la grille . . . . . . . . . . . . . . . . . . . . 5766.3.1 Insertion de l'image dans la colonne image . . . . . . . . . . 5766.3.2 Modification des couleurs de texte

ou de police dans la grille . . . . . . . . . . . . . . . . . . . . . . . . 5786.3.3 Modification de la hauteur des lignes de la grille . . . . . 580

6.4 Tri de la grille par valeur d'un champ . . . . . . . . . . . . . . . . . . . . 581

7. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582

Chapitre 13Utilisation du design pattern MVC

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583

2. Design pattern MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5832.1 Le modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5842.2 La vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5852.3 Le contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5852.4 Les avantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585

3. Développement de l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5863.1 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5863.2 Couches MVC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586

3.2.1 Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5863.2.2 Les modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5873.2.3 Les contrôleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587

3.3 Navigation entre les pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5923.4 Normaliser les échanges entre MVC . . . . . . . . . . . . . . . . . . . . . 596

Page 15: + QUIZ - fnac-static.com

14Programmation orientée objet en environnement Windows

Delphi 10.3

3.5 Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5993.5.1 La vue « Login » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6003.5.2 La vue "Choix d'objets" . . . . . . . . . . . . . . . . . . . . . . . . . . 6113.5.3 La vue gestion de compte . . . . . . . . . . . . . . . . . . . . . . . . 6263.5.4 La vue « Validation de panier » . . . . . . . . . . . . . . . . . . . . 644

3.6 Création d'une facture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6513.6.1 Préparation et création des éléments

nécessaires à l'opération . . . . . . . . . . . . . . . . . . . . . . . . . 6513.6.2 Création d'un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . 6523.6.3 Récupération des données. . . . . . . . . . . . . . . . . . . . . . . . 6553.6.4 Design du rapport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6593.6.5 Génération du fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . 660

3.7 Calcul du montant total de la commande par procédure stockée662

4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666

Chapitre 14Attributs, annotations et RTTI

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667

2. Principe du mapping propriété/colonne . . . . . . . . . . . . . . . . . . . . . . 668

3. Attributs Delphi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6693.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6693.2 Modélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670

4. Un moteur d'accès aux données générique . . . . . . . . . . . . . . . . . . . . 6774.1 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6774.2 Le cas des propriétés objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692

4.2.1 Sauvegarde dans la base de données. . . . . . . . . . . . . . . . 6924.2.2 Chargement dans la base de données. . . . . . . . . . . . . . . 694

4.3 Gestion de listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6954.4 Les tables de jointure, relation OneToMany . . . . . . . . . . . . . . 698

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711

Page 16: + QUIZ - fnac-static.com

15Table des matières

Chapitre 15FireDAC, FireMonkey et LiveBinding

1. FireMonkey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713

2. LiveBinding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714

3. Migration des outils back-office et E-Commerce en FireMonkey . . 7153.1 Le composant TListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7153.2 Liaison visuelle avec une source

de données FireDAC : LiveBinding . . . . . . . . . . . . . . . . . . . . . . 721

4. Interagir avec la TListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7244.1 Le clic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7244.2 Le double clic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725

5. Visualisation Maître/Détail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7255.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7255.2 Maître/Détail utilisateur/commandes . . . . . . . . . . . . . . . . . . . 7265.3 Maître/Détail commande/objets achetés . . . . . . . . . . . . . . . . . 7325.4 Relation Maître/Détail, commande/adresse de livraison. . . . . 736

6. Modification de la valeur issue de la source de donnée . . . . . . . . . . 7396.1 Cas d'application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7396.2 La propriété CustomFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . 7406.3 Les routines de conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7426.4 Créer ses propres routines de conversion . . . . . . . . . . . . . . . . . 746

7. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747

Chapitre 16Serveur d’application REST

1. Définition : application distribuée. . . . . . . . . . . . . . . . . . . . . . . . . . . 749

2. Protocole HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750

3. Exemple d'échanges de données : information de météo . . . . . . . . . 7513.1 Par le protocole HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7513.2 Par le protocole SOAP (Simple Object Access Protocol) . . . . . 752

Page 17: + QUIZ - fnac-static.com

16Programmation orientée objet en environnement Windows

Delphi 10.3

3.3 Par une architecture REST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754

4. Service web et web-méthodes REST. . . . . . . . . . . . . . . . . . . . . . . . . 7564.1 Cas général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7564.2 Cas de l'authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758

4.2.1 La problématique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7584.2.2 Les méthodes d'authentification HTTP. . . . . . . . . . . . . 7584.2.3 Les différentes options . . . . . . . . . . . . . . . . . . . . . . . . . . 7594.2.4 Implémentation choisie . . . . . . . . . . . . . . . . . . . . . . . . . 762

5. Implémentation de l’application côté serveur . . . . . . . . . . . . . . . . . 7785.1 Le projet Web Server Application . . . . . . . . . . . . . . . . . . . . . . . 7795.2 Mise en place du serveur Apache. . . . . . . . . . . . . . . . . . . . . . . . 782

5.2.1 Installation d’Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . 7835.2.2 Configuration du serveur Apache. . . . . . . . . . . . . . . . . . 7835.2.3 Intégration du module . . . . . . . . . . . . . . . . . . . . . . . . . . 785

5.3 Édition des points d’entrée . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7865.4 Utilisation du REST Debugger de Delphi . . . . . . . . . . . . . . . . . 7885.5 Passage de paramètres du client vers le serveur . . . . . . . . . . . . 7915.6 Implémentation de l’enregistrement d’un utilisateur . . . . . . . 7915.7 La classe TJsonResult . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7965.8 Le cas de l’authentification : le login. . . . . . . . . . . . . . . . . . . . . 7995.9 Récupération des produits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8055.10 Mettre à jour un utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8095.11 Passer une commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8135.12 Gérer la montée en charge

avec l’utilisation d'un pool de connexion . . . . . . . . . . . . . . . . . 819

6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824

Page 18: + QUIZ - fnac-static.com

17Table des matières

Chapitre 17Client REST multi-plateforme FireMonkey

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8251.1 Design graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8251.2 Échanges entre le client et le serveur. . . . . . . . . . . . . . . . . . . . . 8291.3 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831

2. Appel REST simple, enregistrement d’un utilisateur. . . . . . . . . . . . 836

3. Authentification REST de type Basic et login d’un utilisateur . . . . 843

4. Utilisation du Livebinding avec un modèle de données. . . . . . . . . . 8464.1 Utilisation d’un TDataGeneratorAdapter

pour définir un prototype d’échange. . . . . . . . . . . . . . . . . . . . . 8484.2 Encapsulation dans un TAdapterBindSource . . . . . . . . . . . . . . 8494.3 Liaison avec un TListView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8514.4 Gestion de panier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854

4.4.1 Design graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8544.4.2 Implémentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856

4.5 Passer une commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8594.6 Gestion compte utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 870

Chapitre 18Travailler avec les styles FireMonkey

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871

2. Modifier ou créer un style de composant . . . . . . . . . . . . . . . . . . . . . 8722.1 Le Style Designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8722.2 Modification du style TLabel. . . . . . . . . . . . . . . . . . . . . . . . . . . 8752.3 Créer un nouveau style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878

Page 19: + QUIZ - fnac-static.com

18Programmation orientée objet en environnement Windows

Delphi 10.3

3. Créer et utiliser un style spécifique pour une TListBox. . . . . . . . . . 8813.1 Création d'un style TListBox . . . . . . . . . . . . . . . . . . . . . . . . . . . 8813.2 Ajout d'éléments stylisés dans la TListBox. . . . . . . . . . . . . . . . 883

3.2.1 Exemple : Affectation du prix. . . . . . . . . . . . . . . . . . . . . 8843.2.2 Exemple : Affectation de l'image . . . . . . . . . . . . . . . . . . 884

4. Intégration dans le client REST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891

Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895

Page 20: + QUIZ - fnac-static.com

133

Chapitre 4Concept objet en Delphi

Concept objet en Delphi1. Introduction à la programmation orientée objetIl s'agit d'une approche différente de la programmation procédurale. Si unprogramme informatique écrit de manière procédurale est la réponse à laquestion "que veut-on faire?" le même programme écrit de manière orientéeobjet répond à la question "de quoi parle-t-on?". On découpe fonctionnelle-ment le programme à réaliser par rôles, par concept ou par entités physiquesmodélisées dans le programme. Les entités ainsi définies sont appelées "objet".

Nous allons étudier dans ce chapitre l’exemple d'une application de gestion delocation de véhicules. Rapidement, on peut énumérer quelques rôles etentités :

– Le véhicule (quoi ?)

– Les utilisateurs de l’application (client ou administrateur) (qui ?)

– L'agence de location (où ?)

– La réservation de location (date de début/date de fin) (quand ?)

En général, on modélise les objets à travers le langage UML qui permet dedécrire schématiquement la structure, le comportement de chaque objet. Ondécrit aussi en UML le comportement des différents objets les uns par rapportaux autres. Au final, on peut décrire l'intégralité d'un programme informa-tique en UML.

lcroise
Tampon
Page 21: + QUIZ - fnac-static.com

© E

diti

ons

ENI -

All

righ

ts r

eser

ved

134Programmation orientée objet en environnement Windows

Delphi 10.3

Au niveau de l'implémentation en Delphi, les objets sont l'extension desrecords vus dans le chapitre précédent (pour rappel, le record est un type quipermet d'agréger tout un jeu d'autres types). On dit qu'ils possèdent unestructure interne décrite par les champs et un comportement décrit par lesméthodes que la classe implémente.

En Delphi, les objets sont décrits par la définition de la classe à laquelle ilappartient.

2. Principes de la programmation objet

2.1 Les champs

Un champ est une variable interne à un objet. Comme toute variable, cechamp possède un type (entier, chaîne de caractères ou même une autreclasse) et est manipulé par les méthodes de la classe à laquelle il appartient.

Un champ peut être :

– un champ d'instance, qui est propre à chaque objet.

– un champ statique ou champ de classe qui est propre à toute la classe. Lavaleur de cette variable est la même pour toutes les instances de la classe.

2.2 Les méthodes

Les méthodes sont les routines qui permettent de manipuler les champs de laclasse. En fonction d'un certain état d'entrée A, selon la méthode exécutée M,l'objet se retrouve dans un autre état B.

L'ensemble formé par les champs et les méthodes est appelé "membres de laclasse".

Page 22: + QUIZ - fnac-static.com

135Concept objet en DelphiChapitre 4

Une méthode peut être :

– une méthode d'instance, n'agissant que sur un seul objet (instance de laclasse) à la fois,

– une méthode statique ou méthode de classe qui n'agit pas sur des variablesd'instance mais uniquement sur des variables de classe. Elle est indépen-dante de toute instance de la classe (objet).

2.3 Encapsulation de données

L'intérêt d'un objet réside dans le fait qu'il rassemble toutes les données(champs) dont il a besoin au sein d'une même classe ainsi que les moyens deles gérer (méthodes). Dans ce principe d'encapsulation, il existe également unenotion de visibilité qui permet de masquer ou non certaines données de l'objetque l'on manipule de l'extérieur.

Cela permet de garantir une cohérence des données qui ne pourront êtremodifiées de l'extérieur qu'à travers les méthodes visibles.

Dans le principe d'encapsulation, il existe deux modes de visibilité :

– Privé

– Public

Un membre privé est inaccessible vu de l'extérieur à la classe concernée.

2.4 Représentation UML et nommage

Voici un exemple de représentation UML (Unified Modeling Language) :

Ci-après est définie la classe TExemple. En général, on définit le nom d’uneclasse Delphi avec un T majuscule devant pour signifier « type ». Bien qu'untype et une classe sont deux notions différentes, il faut garder en mémoire queDelphi est une extension du langage Pascal où il n'existait que des types ; ils'agit uniquement d'une continuité de notation.

Page 23: + QUIZ - fnac-static.com

© E

diti

ons

ENI -

All

righ

ts r

eser

ved

136Programmation orientée objet en environnement Windows

Delphi 10.3

La représentation de cette classe possède deux zones : celle du dessus pour leschamps et l’autre en dessous pour les méthodes. Ainsi, dans la seconde zone,après chaque nom sont ajoutés les symboles () spécifiant un appel de routine.

RemarqueEn Delphi, quand une routine ne possède pas de paramètre d’entrée, les sym-boles () ne sont pas obligatoires. Cependant, il est préférable de les rajouterpour une meilleure visibilité de code.

Nous trouvons donc deux champs : FAttributePrivate et AttributePublic.

Le – devant FAttributePrivate signifie que la visibilité est privée et le +devant AttributePublic signifie que la visibilité est publique. Pour un champprivé, on met en général un F pour désigner «field» (champ en anglais).

De même, pour les méthodes, on trouve MethodPublic() en visibilitépublique et MethodPrivate() en visibilité privée.

2.5 Héritage

Il s'agit du mécanisme qui permet de créer une classe B à partir d'une classeexistante A. On dit qu'on a « spécialisé » ou « enrichi » la classe A par ce méca-nisme.

La notion de visibilité évoquée précédemment rentre en compte également :

La classe B aura connaissance par le mécanisme d'héritage des membrespublics ou protégés de la classe A.

Le terme « protégé » est une visibilité à mi-chemin entre public et privé, carcomme un membre privé, un membre protégé ne peut pas être manipulé del'extérieur de la classe mais il est accessible dans la classe héritée.

En UML, le symbole utilisé pour noter une visibilité protégée est le #.

Page 24: + QUIZ - fnac-static.com

137Concept objet en DelphiChapitre 4

Pour reprendre l'exemple de l'application de location de véhicules qui permetde gérer des vélos, des rollers des voitures et des motos, il est possible de définirdeux catégories de véhicules : une avec moteur et une autre sans moteur.

Ainsi, on peut imaginer une hiérarchie de classe avec comme classe de baseTVehicule avec deux classes héritées, une pour les véhicules à moteur(TWithMotor) et l'autre sans moteur (TWithoutMotor). À ce stade lesclasses TWithMotor et TWithoutMotor représentent encore deuxconcepts très généraux. Il est alors possible d'ajouter un héritage supplémen-taire pour modéliser l'ensemble des produits disponibles à la location, à savoirles vélos (TBike), les rollers (TRollerSkate), les voitures (TCar) et les motos(TMotorCycle) qui représentent spécifiquement des objets du monde réel.

Dans un schéma UML, l'héritage entre deux classes est modélisé par uneflèche sur fond blanc. Dans le schéma ci-dessus, on a bien TBike qui hérite deTWithoutMotor et TWithoutMotor qui hérite à son tour de TVehicule.

Pour rappel, les champs précédés d'un # sont de visibilité protégée.

Page 25: + QUIZ - fnac-static.com

© E

diti

ons

ENI -

All

righ

ts r

eser

ved

138Programmation orientée objet en environnement Windows

Delphi 10.3

En reprenant l'exemple ci-dessus, TCar et TMotorCycle auront accès à lapropriété FTypeOfFuel qui représente le type de carburant de l'objet à louer.Cette notion n'apparaît pas dans la hiérarchie des véhicules sans moteurTBike ou TRollerSkate car elle est non applicable pour ces objets du monderéel. Un vélo ne possède pas de type de carburant.

Ainsi, on considère que tous les véhicules possèdent une couleur (FColor) etune marque (FBrand).

Pour un véhicule sans moteur, le poids devient important, et c'est en position-nant FWeight dans la classe TWithoutMotor que l'on met l'accent sur cettenotion qui sera partagée entre les vélos et les rollers.

Pour un véhicule avec un moteur, il est important de connaître sa puissanceet le type de carburant. Ainsi, on positionne ces deux champs dansTWithMotor (FEnginePower et FTypeOfFuel).

Dans les classes modélisant les produits à louer, on retrouve en visibilité privéele casque fourni pour une moto (FHelmetProvided dans TMotorCycle), lenombre de portes pour une voiture (FNbDoors dans TCar), le cadenas fournipour un vélo (FLockProvided dans TBike) et la protection corporellegenoux, coudes et tête fournie pour un roller (FBodyProtectionProvideddans TRoller).

Ainsi, on a bien une voiture qui possède un nombre de portes, un type decarburant, une puissance, une marque et une couleur. De même, on a bien unvélo qui possède un cadenas, un poids, une couleur et une marque.

2.6 Polymorphisme

Par polymorphisme on entend la possibilité qu’à une classe enfant de redéfinirune méthode et donc un comportement de la classe parent.

Une méthode qui porte le même nom entre le parent et l'enfant peut posséderla même signature et une implémentation différente.

Page 26: + QUIZ - fnac-static.com

139Concept objet en DelphiChapitre 4

Pour rappel, la signature d'une routine est constituée de son type de retour(rien, s'il s'agit d'une procédure ou du type renvoyé par une fonction) associéà la liste ordonnée des paramètres d'entrée de la routine. La signature de proce-dure MyProc(param1:string;param2:integer); est différente de proce-dure MyProc(param1,param2:string);. Dans un cas, les paramètresd'entrée sont un entier et une chaîne de caractères et dans l'autre, deux chaînesde caractères.

Grâce à ce principe de polymorphisme, le compilateur effectue une liaisondynamique des appels. Ainsi, soit la méthode enfant ou la méthode parent estappelée en fonction du contexte d'exécution.

Il ne faut pas confondre polymorphisme et surcharge car dans le cas du poly-morphisme les paramètres d’entrée de la méthode sont les mêmes et dans lecas de la surcharge ils sont différents.

La surcharge est le processus de multiples définitions de routines avec desparamètres différents abordés dans le chapitre précédent. Ces définitions deméthodes utilisent la directive overload.

En Delphi, pour utiliser le polymorphisme à travers l'héritage, il faut utiliserau minimum les directives virtual et override et éventuellement la directiveabstract.

– La directive virtual indique que la méthode est candidate à une redéfinitiondans une classe héritée.

– La directive override indique que c'est la méthode de la classe héritée quidoit été exécutée.

– La directive abstract indique que cette méthode n'a pas d'implémentationdans la classe courante. Il faut utiliser conjointement abstract avec virtualcar sinon cette méthode ne sera jamais implémentée dans aucun contexte,hérité ou non. Dans le cas où une méthode notée comme abstract nepossède aucune implémentation dans la hiérarchie de classe, une erreurd'appel à une méthode non implémentée est possible. Un avertissement estlevé par le compilateur lors de la compilation.