Cours Visual Basic 6 : introduction à la programmation orientée objet
Le client
Le client est un programme qui envoie un message à un autre programme, /e serveur, lui demandant d'exécuter une tâche quelconque, /e service. C'est le client qui gère l'interface avec l'utilisateur, valide les données, gère la communication avec le serveur et exécute certaines opérations logiques. Le client est aussi responsable de la gestion des ressources locales: moniteur, clavier et périphériques. Lorsqu'on parle du client on utilise aussi le terme front-end car c'est la partie du système qui est à l'avant, c'est à dire la plus visible à l'utilisateur. Le client fonctionne toujours en mode graphique, GUI, et communique avec l'utilisateur au moyen de fenêtres.
Le serveur
Le serveur reçoit les demandes des clients, exécute les opérations d'extraction et de mise à jour de la base de données, assure l'intégrité des données et retourne les réponses aux clients. Le serveur peut aussi être appellé à exécuter des opérations logiques qui peuvent aller du simple au complexe, basées sur les règles d'affaires de l'entreprise. Le serveur pourrait être une autre machine sur le réseau, il pourrait servir aussi de serveur de fichiers sur le réseau. Le serveur est le back-end qui gère les ressources partagées et les tâches communes à différentes applications.
En programmation on a toujours séparé les programmes et les données. La POO regroupe les deux dans des unités réutilisables qu'on appelle classes. Une classe contient des procédures (methods) et des données (attributes ou properties). On crée une instance d'une classe comme on déclarerait une variable. L'instance d'une classe est un objet. Puisqu'un objet est facile à dupliquer, il est toujours réutilisable. Aussi, il est facile, à partir d'une classe, de créer des classes similaires qui vont hériter des caractéristiques de la première mais leur ajouter des fonctions ou des données (inheritance)...
De nos jours, toutes les applications PC sont à base de GUI (Graphical User Interface)). Le GUI permet à l'utilisateur de manipuler des icônes dans un environnement graphique à base de fenêtres (Windows) et offre une productivité beaucoup plus grande que ce qu'on peut obtenir dans un environnement à base de caractères, ie DOS.
Dans l'environnement traditionnel, le programme est lancé et les instructions s'exécutent en ordre jusqu'à ce qu'il n'y ait plus de données. Mais, dans l'environnement Windows, l'utilisateur contrôle l'exécution. Il doit faire un clic sur un bouton ou choisir une option dans un menu, etc. Le programmeur doit écrire le code en fonction de ces actions (events). Par exemple, "S i l'utilisateur clic sur le bouton, ouvrir formulaire X ......". C'est la responsabilité du programmeur de voir à ce les options soient activées ou désactivées au bon moment afin que les traitements s'exécutent dans l'ordre approprié. En Visual Basic, tout le codage est fait dans un environnement event-driven.
Application : Série d'objets (fenêtres, programmes, menus, etc.) qui travaillent sur un même sujet. On appelle l'application un Projet. Le Projet Scoring servira à manipuler les données pour un match de football. On pourrait créer un Projet Vidéo pour gérer les opérations d'un magasin de vidéos, par exemple ...
En démarrant VB on doit choisir de travailler sur un projet existant ou d'en créer un nouveau. Il y a différentes sortes de projets mais, pour l'instant nous allons créer un Standard EXE. Je vous suggère de sauvegarder le projet dès l'ouverture afin de lui donner un nom officiel ( il portera l'extension .VBP et vous devriez créer un répertoire VBapps sur le C:). Notez que quand vous demanderez de sauver le Projet au début, VB vous fera d'abord sauver le Form sur lequel vous travaillez (nommez-le Scoring.FRM dans C:WBapps).
vous avez une première feuille, un Form, qui s'ouvre pour vous. Le Form est l'objet le plus visible de VB. On utilise le Form pour créer l'interface avec l'utilisateur. Pour créer une feuille on y place des Contro/s tels que ceux du Too/box à la gauche de l'écran. En vous familiarisant avec l'interface VB vous verrez aussi que vous pouvez personnaliser plusieurs des fonctions d'édition de la feuille en allant au menu Too/s --> Options.
PREMIER EXERCICE
Comme premier exercice en VB vous allez créer la feuille que vous voyez. Vous devez mettre sur la feuille 4 CommandButton et 9 Label. Ces contrôles devraient être alignés à peu près comme l'illustration.
Une fois les contrôles placés vous pouvez ouvrir la fenêtre Properties en cliquant avec le bouton droit de la souris. La fenêtre reste ouverte et à chaque fois que vous cliquez sur un contrôle vous voyez les propriétés de ce contrôle s'afficher. Expérimentez avec Caption, BackCo/or, ForeCo/or et A/ignrrent. Ne changez pas (Narre) pour l'instant. Remarquez aussi que les propriétés ne sont pas les mêmes pour un Button et pour un Labe/ - tous les contrôles, incluant la feuille elle-même, ont des propriétés différentes.
...
III. Le Langage VB
Comme vous savez de l'exercice précédent, pour ouvrir l'éditeur de code de VB vous devez soit cliquer sur l'icon View Code dans la fenêtre Project Explorer, cliquer sur View-->Code dans le menu ou cliquer sur View code avec le bouton droit de la souris ou encore faire un double-clique sur un objet.
Vous noterez que dans la ligne de menu les fonctions Delete, Cut, Copy, Paste, Find, Replace, etc. fonctionnent toutes comme dans un éditeur de texte ordinaire.
LE LANGAGE VB: TECHNIQUES DE BASE
Lignes de code
Le langage VB n'est pas très rigide: les espaces, indentations, etc.
n'ont pas d'importance pour le compilateur. Cependant, elles en ont pour l'instructeur et vous devrez respecter les techniques de base concernant la lisibilité du code.
En général on écrit une commande par ligne; pour la lisibilité il est parfois préférable de mettre la commande sur 2 lignes en utilisant le caractère de continuation (espace underscore) _
La ligne suivante est correcte:
Datal.RecordSo urce = "SELECT * FROM Titles"
Mais je pourrais aussi l'écrire en 2 lignes dans le code: Datal.RecordSo urce =
~
"SELECT * FROM Titles"
Dans le cas contraire on pourrait écrire 2 commandes sur une ligne en les séparant par un : mais ce n'est pas une pratique recommandée! L'utilisation de majuscules ou minuscules n'a pas d'importance, sauf pour la lisibilité.
Commentaires
Le caractère de commentaire est l'apostrophe '
On recommande l'usage de commentaires dans les codes partout ou des explications sont requises.
Notez qu'on ne peut pas mettre un commentaire après un caractère de continuation.
Les commentaires peuvent être au début d'une ligne ou après le code comme: 'Ceci est un commentaire
nom.Caption = "Michel" ' Ce commentaire suit une commande
Noms de variables
- Le nom doit commencer par une lettre
- Maximum de 40 caractères
- Ne doit pas contenir d'espaces; peut contenir des signes excepté ceux qui décrivent un data type: ! Single, # double, Z integer, $ string, & long, @ currency (le trait d'union - quoique légal est fortement déconseillé car il porte à confusion avec l'opération moins; utilisez plutôt le underscore comme: nom~fam ille ou les majuscules comme: NomFamille)
-Ne doit pas être un mot réservé (qui fait partie du code)
...
"NAMING CONVENTIONS"
Quand on crée des contrôles en VB, l'éditeur leur donne automatiquement un nom. Par exemple, le premier bouton sera Command1 et le vingtième sera Command20. Dans le code, quand on voudra référer au bouton pour exécuter les calculs, est-ce Command8 ou Command12? Et une variable qu'on a définie, est-ce une "String" ou une "Single" ou une "Double"? C'est difficile de se rappeler de tous les contrôles et les variables qu'on crée pour pouvoir s'y retrouver par la suite s i on n'utilise pas un système de référence.
Pour nommer les objets en VB il y 2 facteurs à considérer:
Donc: cmcIExit au lieu de Command8 pour le bouton "Exit", txtHeures au lieu de Text3 pour la saisie du nombre d'heures lblT itle au lieu de Label7 pour l'affichage des titres de Form.
...
Constantes
Une constante est une valeur qui ne change pas au cours de l'exécution d'une procédure; on la déclare avec Const comme: Const ValeurPi = 3.1416
Portée des variables (Scope)
Une variable déclarée dans une procédure avec l'instruction Dim est locale; lorsqu'on sort de la procédure la variable n'existe plus. S i on déclare la variable dans la section General/Déclarations avec Dim, la variable est locale a u module; elle est disponible pour toutes les autres procédures de la feuille.
S i on déclare la variable dans la section General/Déclarations d'un module (et non d'une feuille), avec l'instruction Public a u lieu de Dim, la variable est globale et elle est disponible à l'application toute entière.
Opérateurs
Les opérateurs arithmétiques habituels sont disponibles:
+ _ * / A
Le signe & est utilisé pour une concaténation de chaines: Dim alpha,
beta, chaine As String
alpha = "Chaine divisée "
beta = "en deux parties"
chaine = alpha + beta Avec les variables de type Variant le signe +
peut aussi dénoter une concaténation s i les deux variables contiennent
des chaines mais, on suggère de toujours utiliser le &
Les opérateurs de comparaison habituels sont utilisés:
= > < <= >= <> ainsi que AND OR NOT IS et LIKE
Quelques fonctions VB utiles MsgBox()
Le format général est :
StrReponse = MsgBox(prompt[, buttons] [, title] [, helpfile, context]) Le seul paramètre obligatoire est prompt
Par exemple, pour afficher:
Fig. 3-3
on écrit:
DIM strReponse As String
strReponse = MsgBox("Erreur dans le système!")
InputBox()
Le format général est :
strReponse = InputBox(prompt [, title] [, default] [, xPos] [, yPos])
Le seul paramètre obligatoire est prompt
La valeur entrée par l'utilisateur sera stockée comme type Variant dans strReponse.
Puisque la valeur retournée est de type Variant, on pourrait aussi saisir des valeurs numériques.
Par exemple, pour saisir le nom et la note:
DIM strNom As String DIM intNote As Integer
strNom = InputBox("Entrez le nom de l'étudiant") intNote = InputBox("Entrez la note")
Les fonctions Is ...
Les fonctions IsNumeric, IsDate retourne True s i un paramètre est de type voulu. Normalement utilisées dans une condition, comme: If IsNumer ic(ValeurEntree) Then ...
S i la valeur entrée est de type numérique, le code après le Then est exécuté.
La structure de décision
La structure de décision est comme dans tous les autres langages:
If (condition est vraie) Then
(commandes)
ElseIf (autre condition est vraie)
(commandes)
Else
(commandes)
End If
La structure de cas
Aussi comme dans les autres langages:
Select Case Pourcent
Case Is >= 90
Lettre = "A"
Case 60 to 89
Lettre = "B"
Case Else
Lettre = "F"
End Select
Notez qu'il y a plusieurs façons d'exprimer la condition du Case: avec les signes < et > il faut utiliser le IS on peut spécifier un range: 60 TO 89 on peut spécifier des valeurs: 44, 46, 55, 62
Le DO ... LOOP
Do While condition instructions Loop et auss
Do Until condition instructions Loop
Le FOR ... NEXT
For compteur = debut To fin nstructions Next
Les Tableaux - "Arrays"
En VB on déclare un tableau comme une variable ordinaire, avec DIM. Par exemple:
Dim Mois(1 to 12) As String
Déclare un tableau Mois qui contiendra 12 valeurs avec index de 1 à 12. Mois(1) = "Janvier", etc. Le tableau:
Dim Département(6) As String
Déclare un tableau de 6 éléments avec le premier index = 0. On peut aussi déclarer un tableau de grandeur indéterminée (unbound) en utilisant la fonction Array() dans le code:
Dim Semaine, Jour
Semaine = Array("lundi", "mardi", "mercredi")
Jour = Semaine(1) 'retourne mardi
Le Control Array
Un tableau de contrôles et non un tableau qui contrôle
S i j'ai un form qui doit contenir 10 TextBox, je crée le premier et je le copie et le colle 9 fois. Je spécifie "Yes" à la question de control array. J'obtiens ceci:
Maintenant, je peux utiliser un For ... Next pour faire des opérations sur les TextBox:
Pour initialiser tous les contrôles à 0:
Dim i As Integer
For i = 0 to 9
Text1(i).Text = 0 Next i
Utiliser plusieurs Forms dans un Projet
Un projet peut contenir plusieurs feuilles (Forms). Il s'agit d'abord de créer une nouvelle feuille en faisant Add form. Ensuite, pour l'ouvrir il y a deux façons:
1) on peut changer le Startup object dans les propriétés du Projet pour que notre nouvelle feuille s'ouvre en démarrant le Projet:
...
Le design visuel - création du GUI
Le design visuel de l'application est beaucoup plus que de la décoration - c'est un outil de communication important. Le design visuel détermine s i l'utilisateur capte le message ou bien s'il reste confus et frustré.
En créant le design visuel on essaie d'utiliser l'écran à son maximum. On utilise la composition, les formes, les couleurs, le contraste et le focus afin de communiquer le message de la façon la plus efficace possible.
Détermine comment les éléments sont placés à l'écran; on lit un écran comme une page - l'œ il est attiré par les couleurs avant le noir et blanc, par un dessin avant un texte, etc. En plaçant les éléments il faut penser à comment on veut qu'ils soient perçus.
o La séquence: placée les informations importantes en premier, placé les tâches dans l'ordre où elles sont exécutées.
o Le focus: attirer l'attention sur les points importants en les isolants ou avec la couleur, par exemple.
o Relations entre les éléments: indiquer quand différents éléments ont un rapport entre eux; par exemple, s i une adresse est composée de quatre champs, mettre un cadre autours.
o Le déroulement, "flow": tous les éléments doivent se suivre logiquement; ils doivent aussi avoir tous une raison d'être et contribuer à l'effet visuel total de l'interface.
o La couleur peut servir à augmenter l'efficacité du message en attirant l'attention, en créant des associations dans l'esprit ou en établissant un état psychologique.
o La couleur est subjective - ce qui est plaisant pour un peut être déplaisant pour l'autre.
o L'interprétation des couleurs peut être culturel - une couleur n'a pas toujours la même signification.
o Un certain nombre de personne ont des difficultés avec les couleurs; environ 9Z des hommes souffrent d'une forme quelconque de daltonisme.
o La couleur devrait être secondaire dans l'interface - on le crée en monochrome d'abord et on ajoute la couleur pour faire ressortir certains points.
o Utiliser une palette restreinte - même s i on a 16 million de couleurs disponibles, on n'est pas obligé de toutes les utiliser. L'utilisation de trop de couleurs rend l'interface chargé et compliqué. En général les couleurs sobres sont préférables aux couleurs voyantes. On doit aussi éviter les contrasts dans le "background" et "foreground" - du rouge sur fond vert, par exemple, est déplaisant pour l'œil.
Propriétés du Form
(Narre): même nom qu'on lui donne en le sauvegardant- le nom qu'on utilise lorsqu'on réfère à la feuille dans le code.
Caption: nom qui apparaît dans la ligne Titre - information seulement - pas référencé dans le code.
BorderStyle: ligne titre voulue et s i la grandeur peut être changée à l'exécution - 1 et 2 sont des Forms ordinaires.
BackColor: couleur de la feuille.
StartUpPosition: où on veut que la feuille s'affiche sur l'écran à l'exécution.
A u sujet des noms (la propriété "Name"): on devrait utiliser un système de terminologie standard à travers toutes les applications VB. Ceci veut dire d'identifier tous les objets ainsi que les variables avec un préfixe qui est facile à reconnaitre partout dans le code.
Pour établir la grandeur et la position de la feuille lors de l'exécution, on le fait habituellement dans le code.
Dans le Form_Load event on écrit le code qui sera exécuté en lançant l'application:
Private Sub Form_Load() Me.Width = 8000 Me.Height = 6000 Me.Left = (Screen.Width - Me.Width) / 2
Me.Top = (Screen.Height - Me.Height) / 2
End Sub
Les mesures pour l'objet Screen sont en twips:
517 twips = 1 cm
1440 twips = 1 pouce.
...
Label, Picture Box
Label: un titre, une étiquette - utilisé pour afficher une information. PictureBox: une image - utilisé pour afficher un fichier contenant une image (.BMP, .GIF, etc) - sert pour un logo d'entreprise, par exemple
Saisie de données
TextBox: sert à saisir une donnée au clavier - la donnée saisie est gardée dans la propriété Text de l'objet et on peut s'en servir à partir de là:
CommandButton, OptionButton et CheckBox
CommandButton (cmd) ¬ un objet 3D - pas de couleur - effet de s'enfoncer quand on clique
S i Default = True, marge du bouton est foncée et Click sera activé par Enter
S i Cancel = True Click sera activé par Esc
OptionButton Par définition un bouton d'option fait partie d'un groupe; on crée d'abord un cadre (Frame) et on y met les boutons d'options. Le Frame détermine que les boutons font tous partie du groupe. S i j'ai besoin de 2 groupes de boutons, je dois créer 2 Frames différents.
À l'exécution on doit tester la propriété Value de chaque bouton - s i elle retourne True, le bouton est celui qui a été sélectionné (seulement un bouton du groupe retourne True) et j'exécute l'action appropriée.
Chefflox: on se sert de la propriété Value pour tester s i la boîte est vide (Value = 0), cochée (Value = 1) et on peut aussi regarder pour Indéfini (Value = 2)...
Voici le code pour l'application de boutons et de cases:
Option Explicit
Private Sub Form_Load() chkPrinter.Value = 0 chkMonitor.Value = 0 chkModem.Value = 0 chkNic.Value = 0
optPent.Value = False optPent2.Value = False optPent3.Value = False optWin98.Value = False optWinnt.Value = False lblmsg.Capt ion = ""
End Sub
Private Sub cmdConfirmer_Click()
Dim strPrNom As String, strOsNom As String Dim vntAccPr, vntAccMn, vntAccMod, vntAccN ic
'S i pas de processeur choisi, afficher erreur 'Et refaire la saisie
If optPent.Value = False _
And optPent2.Value = False _
And optPent3.Value = False Then
MsgBox ("Vous devez choisir un Processeur")
optPent.SetFocus
Else
If optPent.Value = True Then
strPrNom = "Pentium"
ElseIf optPent2 = True Then
strPrNom = "Pentium II"
Else
strPrNom = "Pentium III"
End If
End If
'SetFocus est une Method qui retourne le Focus
'(Le curseur) à un objet spécifié,
'Dans ce cas-ci, un bouton d'option
'Check if OS was selected - if no
'Display error message; if yes, get its name.
If optWin98.Value = False _
And optWinnt.Value = False Then
...
Validation signifie s'assurer que les valeurs entrées sont bonnes. On valide afin de s'assurer qu'on passe des valeurs correctes aux calculs et pour éviter de faire "crasher" l'application.
Par exemple, s i on entre une donnée qui n'est pas numérique, la procédure de calcul va s'arrêter sur une erreur de "Type mismatch" et l'utilisateur restera en panne.
Le MsgBox function
Lors de la validation vous allez probablement utiliser la fonction
MsgBox( ) souvent. Le MsgBox que nous avons utilisé jusqu'à maintenant est le plus simple possible. Il y a d'autres versions du MsgBox qui vous permettent de préciser les intentions de l'utilisateur.
Par exemple:
DIM intMsg AS Integer
intMsg = MsgBox ("Erreur dans valeur", vbOKCancel)
If intMsg = 1 Then
txtValeur.SetFocus
Else
Exit Sub
End If
S i intMsg est 1, l'utilisateur a cliqué sur OK et on obtient une nouvelle valeur. S i intMsg est 2, l'utilisateur a fait Cancel et on veut quitter la procédure.
Les constantes qui sont utilisées:
VbOkOnly
vbOkCancel
vbAbortRetryIgnore
vbYesNoCancel
vbYesNo
vbRetryCancel et les valeurs retournées:
1 vbOk Ok
2 vbCancel Cancel
3 vbAbort Abort
4 vbRetry Retry
5 vbIgnore Ignore
6 vbYes Yes
7 vbNo No
Il y a 4 événements qui sont généralement utilisés pour faire la validation:
Le _Change
Le _KeyPress Le _LostFocus Le _Validate
...
Notes sur le programme:
CRÉATION D'UN MENU
Pour créer un menu dans une feuille on utilise l'éditeur de menu dans Tools --> Menu editor. L'éditeur ouvre une fenêtre dans laquelle on crée le menu qu'on veut voir affiché dans la feuille.
On utilise les flèches et le bouton Insert pour créer la cascade d'items dans le menu.
Ensuite il ne reste qu'à écrire le code pour activer les fonctions du menu. Chaque item du menu n'a qu'un événement possible et c'est le Click.
LE "DEBUGGING"
Il arrive assez fréquemment qu'un programmeur fasse une erreur en écrivant le code. Les erreurs de syntaxe sont habituellement assez évidentes et le compilateur les identifie à l'exécution. Les erreurs de logique sont souvent plus difficiles à identifier. C'est pourquoi la plupart des logiciels ont une fonction de debugging qui aide à la correction des erreurs dans un programme.
La façon la plus simple d'utiliser debug en VB est de créer des breakpoints dans le code et puis de regarder l'état du programme au moment où il s'arrête. Un breakpoint est un point d'arrêt dans le code - l'exécution du programme arrête avant d'exécuter la ligne qui contient le breakpoint. Lorsque le code s'arrête, une fenêtre immediate s'ouvre au bas de l'écran. Dans cette fenêtre on peut regarder le contenu des variables, des propriétés, des objets, etc. Pour continuer l'exécution après avoir étudier la situation on peut faire Start à nouveau. Cependant, il sera parfois très utile de regarder la séquence des instructions qui suivent. Pour cela on fait le Step... et la manière la plus facile de le faire est avec la touche (F8).