Niveau débutant, mars 2001
Le but de cette formation est d'expliquer les concepts de base de la programmation objets et de montrer comment ensuite utiliser un environnement de développement intégré (EDI) pour programmer sous Windows (ou sous tout autre système d'exploitation graphique). Dans cet objectif, Visual Basic et Delphi, très proches, seront utilisés en parallèle.
Ce document a été rédigé pour être vu sur internet avec une fenêtre de l'ordre de 800 par 600 ou plus (l'idéal est généralement le plein écran). S'il est lu avec une fenêtre plus petite, des problèmes de retour à la ligne peuvent apparaître dans les exemples de code. Mêmes problèmes à l'impression.
Essayez donc à chaque fois de comprendre si les retours à la ligne que vous observez sont volontaires ou non.
On a souvent tendance à mélanger les quatres, surtout dans le cas de Visual Basic et de Delphi. Pourtant, il faut les différencier.
Langage | EDI | Compilateur | Interpréteur | |
---|---|---|---|---|
C'est quoi ? | C'est la syntaxe, les règles, les mots clef, etc... Ce sont tous les aspects conceptuels de la programmation. Sans compilateur ou interpréteur, le langage n'est pas exploitable. | L'EDI est un programme qui facilite la programmation que ce soit pour éditer le code ou pour dessiner les fenêtres de l'interface graphique. Il permet aussi généralement de lancer la compilation facilement, et d'exécuter le programme ligne par ligne en mode de débugage. | Un compilateur transforme le code (généralement sous forme de banal fichier texte) que vous avez développé en programme binaire exécutable par un seul système d'exploitation sur un seul type de machine (par exemple les PC x86). |
Un interpréteur est un programme qui lit le code source développé " ligne par ligne " et l'interprête. Exemple : s'il voit la ligne " Beep " dans Visual Basic, il émet un son. |
Ex. 1 | C | Sous Linux : XEmacs. Très basique. Trop pour qu'on puisse réellement parler d'EDI. | gcc | - |
Ex. 2 | JavaScript | - | - | Netcape Communicator 4.77 |
Ex. 3 | Java | Borland JBuilder | - | Internet Explorer (avec le plug-in Java) |
Ex. 4 | C++ | Microsoft Visual C++ | Microsoft Visual C++ | - |
Ex. 4 bis | C++ | Borland C++Builder | Borland C++Builder | - |
Ex. 5 | Pascal | Borland Turbo Pascal | Borland Turbo Pascal | - |
Ex. 6 | Pascal Objet | Borland Delphi | Borland Delphi | - |
Ex. 7 | Basic (Objet) | Microsoft Visual Basic |
Microsoft Visual Basic (note : la version 6 ne permet encore que de faire de la pseudo compilation...) |
Microsoft Visual Basic |
Nous allons nous intéresser dans le tableau ci-dessous à la syntaxe de base du code Delphi et Visual Basic :
En Delphi | En Visual Basic | |
---|---|---|
Fin d'instruction (ou de ligne) | ; | Un retour à la ligne suffit (ou éventuellement ":" pour mettre plusieurs instructions sur la même ligne, même si c'est déconseillé) |
Commentaires |
// Ceci est une ligne de commentaire { Ceci est un bloc éventuellement de plusieurs lignes de commentaires } |
' Ceci est une ligne de commentaire Rem -- Ceci est un commentaire Rem moins pratique à utiliser, Rem donc à oublier -- |
Déclaration de variables |
En début de procédure uniquement : var MaVariable1 : integer; MaVariable2, MaVariable3 : string; |
Possible un peu partout : Dim MaVariable1 As Integer Dim MaVarible2, MaVariable3 As String |
Affectation |
:= Ex. : a :=1 ; |
= Ex. : a=1 |
Condition (ce qui est entre crochets est facultatif) |
if condition then instruction [ else instructions ] ; |
Cas 1 : If condition Then instruction [ Else instruction ] Cas 2 : If condition Then instructions [ Else instructions ] End If |
Comparaison |
Égalité : " = " Inégalité : " <> " |
Égalité : " = " Inégalité : " <> " |
"et" et "ou" logiques |
and or |
and or |
Chaînes de caractères |
Le type "string" est le plus pratique à utiliser : on n'a pas à gérer la longueur de la chaîne. Concaténation avec "+". Exemple : 'Une ' + 'chaîne' + ' découpée' Il faut mettre les caractères entre apostrophes. Exemple : 'Coucou !'. Pour mettre une apostrophe dans la chaîne, il suffit de la doubler. Exemple : 'C''est la vie !'. |
Le type est "string". La concaténation se fait avec "&" (ou "+"). On n'a pas à gérer la longueur de la chaîne. Il faut mettre les caractères entre guillemets. Exemple : "Coucou !". Pour mettre un guillemet dans la chaîne, il faut faire ainsi : Exemple : "Il a dit " & chr(32) & "Attention" & chr(32) & " !". |
Bloc d'instructions |
On peut transformer une instruction isolée en un bloc d'instructions si on l'entoure par "begin" et "end" : begin instructions ; end ; |
Les blocs d'instructions n'existent pas en Visual Basic. Il y a toujours une parade. Par exemple pour "if then else", on utilise le cas 2 au lieu du cas 1 (cf. ci-dessus). |
Boucle "for" |
Un exemple vaut mieux qu'un long discours : for i :=1 to 10 do instruction ; |
Exemple illustratif : For i=1 To 10 instructions Next |
Boucle conditionnelle (condition testée avant toute exécution) |
while condition do instruction ; |
1ère possibilité : Do While condition instructions Loop 2nde possibilité : Do Until condition instructions Loop |
Boucle conditionnelle (condition testée après une boucle) |
repeat instructions ; until condition ; |
1ère possibilité : Do instructions Loop While condition 2nde possibilité : Do instructions Loop Until condition |
Procédures et fonctions (Rappel : une procédure est une fonction qui ne renvoie pas de valeur.) |
Mot clef procédure : procedure Mot clef fonction : function Un exemple issu de l'aide en ligne de Delphi : procedure NbChaine (N : Integer; var S : string); var V: Integer; begin V := Abs(N); S := ''; repeat S := Chr(V mod 10 + Ord('0')) + S; V := V div 10; until V = 0; if N < 0 then S := '-' + S; end; Étant donnée cette déclaration, vous pouvez appeler la procédure NbChaine de la manière suivante : NBChaine(17, MaChaine); Cette procédure affecte la valeur "17" à MaChaine (qui doit être une variable string). En Delphi, il faut toujours déclarer ou prédéclarer sa procédure et sa fonction au dessus (dans le code) avant de l'utiliser. Une prédéclaration est réalisée en copiant uniquement la première ligne de la procédure ou de la fonction. Notez que la présence du mot clef "var" dans "var S : string" signifie qu'on appelle la procédure en envoyant nécessairement une variable (qu'on veut généralement modifier dans la procédure) et non juste une valeur. |
Mot clef procédure : Sub Mot clef fonction : Function Un exemple de fonction issu de l'aide en ligne de VB : Function WhatsForLunch(WeekDay As String, _ Hour As Integer) As String ' Renvoie un menu de midi sur ' base du jour et de l'heure. If WeekDay = "Vendredi" then WhatsForLunch = "Poisson" Else WhatsForLunch = "Poulet" End If If Hour > 4 Then WhatsForLunch = "Trop tard" End Function Pas besoin de prédéclarer une fonction ou une procédure. |
Un environnement de développement intégré (EDI) est un logiciel fait pour faciliter l'élaboration d'une application et accélérer son développement. On dit alors que Delphi et Visual Basic sont des logiciels de développement rapide d'application (RAD).
L'EDI est constitué de toute une série d'outils qui font qu'après avoir pris l'habitude de les utiliser, on n'a généralement plus envie de retourner à un éditeur de texte basique pour écrire le code !
De ce côté-là, Visual Basic et Delphi sont très proches : ils possèdent les mêmes outils.
Environnement de travail de Visual Basic :
Environnement de travail de Delphi :
Pour dessiner une fenêtre, on utilise la souris. On ajoute une nouvelle fenêtre vierge. Note : une fenêtre s'appelle une fiche sous Delphi et une feuille sous Visual Basic, et en anglais "form" pour les 2. Ensuite, on la personnalise en modifiant quelques propriétés à l'aide de la "fenêtre de propriétés" sous Visual Basic appellée "inspecteur d'objets" sous Delphi. Puis, on va choisir dans la palette des composants par exemple des contrôles Windows pour les placer, les dimensionner et les configurer.
Les composants sont des objets tout-faits que l'on n'a qu'à placer sur la fenêtre que l'on est en train de créer. Une grande partie des composants standards sont des contrôles Windows (Étiquette de texte, bouton, liste déroutante ou non, cases à cocher, barre de défilement, ...), mais ils ne se limitent pas à ça. Il est possible de plus de fabriquer soi-même des composants ou d'en trouver ou acheter sur internet par exemple.
La création de l'interface est donc généralement très rapide. Cependant, malheureusement (ou heureusement ?), la création d'une application ne se limite pas à la création de l'interface : il faut écrire le code, et débuguer. Ces deux phases sont généralement extrêmement longues, mais très intéressantes.
Visual Basic possède une aide à la saisie très performante (Delphi 4 en a une aussi, mais bien moins efficace) qui rappelle les différents arguments requis par une fonction quand on écrit son nom, ou qui propose de terminer la saisie d'un mot par "entrée".
Les aides en ligne de Delphi 4 et Visual Basic sont très bien faites. Il ne faut donc surtout pas hésiter à les utiliser pour avoir une description détaillée (souvent avec des exemples) de telle ou telle fonction, de tel ou tel composant...
Utiliser les aides en ligne permet de s'autoformer de manière relativement efficace.
Là encore, Delphi et Visual Basic proposent de nombreux outils de débugage relativement efficaces.
Le premier est la possibilité d'exécuter le programme ligne par ligne, en faisant une pause sur chaque ligne, ou de placer des "points d'arrêts" au cœur du programme pour interrompre l'exécution du programme en un endroit particulier du code. Le programme arrêté, il est alors possible, en plaçant la souris au dessus d'une variable de savoir sa valeur, et de trouver éventuellement un bug.
Il est aussi possible d'insérer des "espions" qui stoppent le programme dès qu'une variable change de valeur par exemple.
Une fois l'application terminée, il faut compiler l'application pour pouvoir ensuite l'utiliser sans l'EDI. En fait, Delphi compile avant chaque essai du programme, même au cœur de l'EDI. Ce n'est pas le cas de Visual Basic qui ne fait qu'interprêter le code. Quand on crée un exécutable avec Visual Basic, on fabrique en fait un petit programme exécutable (EXE) qui va appeller le cœur de Visual Basic à travers une bibliothèque DLL (VB6FR.DLL) qui doit obligatoirement être installée sur le système de l'utilisateur. Ensuite, le code Basic va être interprêté. Ça signifie que l'on perd énormément en performances sur le plan de la vitesse. Cependant, vu la rapidité actuelle des micro-ordinateurs, ce défaut est en général sans importance.
De plus en plus de langages de programmation sont orientés objets. Les plus célèbres sont Java, le C++ (et non le C attention), Delphi et Visual Basic. Parmi ces langages, Java est le seul 100% objets. Il est « théoriquement » possible de programmer en C++, Delphi ou Visual Basic sans utiliser d'objets.
On trouve aussi de la programmation objets dans les langages de scripts tels que JavaScript ou Visual Basic Script (VBS).
Comme l'utilisation de ces langages tend à se généraliser, il est intéressant de comprendre les concepts de la programmation objets.
Les enregistrements sont comparables à des objets ultra basiques. C'est pour ça que nous nous intéressons à eux maintenant, avant de voir ce que c'est qu'un objet (patience, patience !...).
Nous allons nous intéresser à l'enregistrement appelé aussi structure (« struct » en C). Voyons à l'aide d'un exemple ce dont il s'agit :
Exemple en Delphi | Exemple en Visual Basic |
---|---|
// Définissons d'abord le type de // données nouveau que l'on crée type TAdresse = record Nom : String; Prenom : String; Adesse : String; NumerosDeTel : Array of String; // pour infos, le tableau // ci-dessus est dynamique DateDeNaissance : TDate; BonAmi : boolean; end; // Puis définissons (une ou) // plusieurs variables de ce type var MonAdresse : TAdresse ; CarnetDAdresses : Array of TAdresse; // Accédons maintenant à une des variables begin MonAdresse.Nom := 'Goret'; MonAdresse.Adresse := 'Centrale'; MonAdresse.BonAmi := True; end; |
' Définissons d'abord le type de ' données nouveau que l'on crée Type TAdresse Nom As String Prenom As String Adresse As String NumerosDeTel() As String ' pour infos, le tableau ' ci-dessus est dynamique DateDeNaissance As Date BonAmi As Boolean End Type ' Puis définissons (une ou) ' plusieurs variables de ce type Dim CarnetDAdresses() As TAdresse Dim MonAdresse : Tadresse ' Accédons maintenant à une des variables MonAdresse.Nom = "Goret" MonAdresse.Adresse = "Centrale" MonAdresse.BonAmi = True |
Un des avantages est qu'à chaque fois que je veux, dans cet exemple, créer une « fiche » adresse ou un carnet d'adresses, je n'ai pas à définir 4 variables, mais uniquement une.
Un objet est un type de données qui regroupe ensemble des données et du code. Avant la POO, le code et les données étaient traités comme des éléments séparés. Un objet est défini par le regroupement de :
Note : un objet contenant uniquement des variables est comparable à un enregistrement.
Pour expliquer l'intérêt d'utiliser les objets, nous allons utiliser un exemple éloigné de la programmation.
Imaginons que nous cherchons à fabriquer une automobile (qui est elle-même un objet). Pour cela, on a entre autre besoin de roues. Et bien les roues sont des objets. Il suffit que je définisse une fois une roue, pour ensuite demander à la chaîne de production de m'en produire 4 pour ma voiture (4 instances de l'objet en langage informatique). Ma roue possède des propriétés (valeur du rayon, type de pneu adapté, pression de gonflement interne, état "roue crevée" ou non, ...). Quand on change une des propriétés (si on crève la roue par exemple), ça peut changer d'autres propriétés automatiquement (la pression interne diminue). Un autre objet dans la voiture est le volant. Il possède des « méthodes » : on peut tourner le volant dans une direction particulière par exemple. Dans ce cas, différentes opérations (« instructions ») sont effectuées pour tourner effectivement toute la voiture.
L'utilisation d'objets offre de nombreux avantages.
Tout d'abord, ça rend la programmation facilement modulaire. En tant que fabriquant automobile, je demande à mes fournisseurs de me fournir des sièges de telle dimension possédant telles ou telles caractéristiques (je les veux chauffants par exemple) et tels qu'ils puissent se baisser. Avec ce cahier des charges là, je laisse le fournisseur se débrouiller pour me fabriquer les sièges demandés, et je ne m'occupe pas directement de savoir comment un siège fonctionne pour s'abaisser par exemple. De même pour les roues. Ça m'évite d'avoir à réinventer la roue à chaque fois que je fabrique une nouvelle voiture ! Le partage du travail est ainsi facilité grâce à la programmation objet. De même la visibilité du code.
Les méthodes agissent directement sur les variables et les propriétés de l'objet considéré. D'où l'intérêt très souvent d'utiliser une méthode dans un objet et non une fonction indépendante à laquelle il faudrait alors passer en paramètre le nom de la variable sur laquelle on veut travailler. L'utilisation d'objets simplifie grandement le travail.
Enfin, la POO possède d'autres avantages plus techniques que nous n'aborderons pas ici.
Les "composants" sont des objets. L'avantage de ces objets, c'est qu'on peut réellement les voir et modifier leurs propriétés lors de la création de l'interface.
Cependant, encore une fois, les objets ne se limitent pas à des composants.
Exemple d'objet : une fenêtre sous Delphi
type
TRPF11 = class(TForm)
DriveComboBox1: TDriveComboBox;
Label1: TLabel;
DirectoryListBox1: TDirectoryListBox;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DriveComboBox1Change(Sender: TObject);
private
{ Déclarations privées}
public
{ Déclarations publiques}
end;
Quel langage choisir pour débuter ?
Delphi | Visual Basic | |
---|---|---|
Éditeur | Inprise (anciennement et à nouveau appellé Borland) | Microsoft |
Langage | Pascal Objet | (Visual) Basic |
Quelques points forts |
|
|
Quelques points faibles |
|
|
Prix |
|
|
Lequel choisir alors ? À vous de voir en fonction de vos critères !
Apprendre à programmer en Delphi ou en Visual Basic est intéressant, car ce sont des langages faciles et modernes, la création d'application est rapide et efficace. De plus, ce sont des langages majeurs actuellement (avec le C++, Java et les langages de scripts Internet). Enfin, c'est un moyen de découvrir la programmation orientée objets de plus en plus généralisée avec Java et la révolution d'Internet.
Je pense réellement que programmer permet de laisser sa créativité s'exprimer. J'aime bien comparer la création d'une application au travail du peintre. Non pas qu'une application soit de l'art, mais en tant que programmeur, vous décidez tout de votre "bébé". Le peintre s'applique à tous les détails de son oeuvre, vous définissez et configurez votre application dans les moindres détails. Le peintre reprend sans cesse telle ou telle partie non satisfaisante de sa toile, vous débugez ou optimisez sans cesse votre code. Et surtout, "finir" une application, même avec des outils RAD, demande généralement d'y avoir consacré un nombre considérable d'heures, car finalement, l'utilisateur ne voit que le résultat, l'extérieur, mais ignore les milliers de lignes de code qui sont derrière. De même on ne voit pas les détails d'une peinture, quand on la regarde de loin... Et puis si le peintre s'est fait plaisir à peindre, et est fier de son œuvre, il en est de même pour vous quand vous programmez une application !
Rédaction : Nicolas ROFFET. Texte de mars 2001 avec quelques mises à jour par la suite.