|
Le Runtime Access 2007 français est disponible
|
Une classe est un objet de formulaire ou d'état ou un objet personnalisé indépendant. Nous avons déjà vu les objets de formulaire et d'état dans toutes les autres pages et nous allons nous intéresser aux objets personnalisés indépendants. Les objets personnalisés sont décrits dans un
module de classe. Si vous créez un module de classe vous créez un nouvel objet
personnalisé, si vous voulez créer un nouvel objet personnalisé, vous créez un
module de classe. Pour illustrer les exemples vous téléchargez la base Classes.mdb en cliquant ici. Cette base contient un formulaire avec un bouton seulement et un module de classe personnalisé. Chargez cette base pour suivre les explications qui vont suivre. Une classe est formé d'événements, de méthodes et de propriétés. Les seuls événements seront Class_Initialize et Class_Terminate. Les méthodes seront en général des procédures Sub qui réaliseront des calculs avec les propriétés en cours mais qui ne retourneront pas de données, mais des procédures Function peuvent être utilisées pour retourner une valeur mais sont très peu utilisées. Les propriétés seront définies par les procédures Property Let ( jusqu'à End Property) et les valeurs seront lues par les procédures Property Get ( jusqu'à End Property). La procédure Property Get remplace la procédure Function habituellement utilisée. L'exemple de base que vous avez sous les yeux est l'exemple le plus simple d'un module de classe et vous allez comprendre immédiatement son fonctionnement. Vous désirez calculer l'aire d'un rectangle dans votre formulaire et vous ne voulez pas passer votre temps à faire le calcul lui-même mais vous voulez donner les dimensions et connaître le résultat. Vous voulez aussi que ce même calcul soit disponible dans une autre base de données (en dupliquant le module) avec les mêmes éléments à fournir. Vous venez de créer un objet Rectangle et nous allons le décrire dans un module de classe nommé Rectangle. Ce module de classe va calculer la surface du rectangle en fonction des valeurs fournies par l'utilisateur. Création du module de classe: Pour pouvoir fournir l'aire d'un rectangle, il faut connaître la largeur et la hauteur, donc nous décrivons deux variables de type Double (pour être sûrs de gérer des valeurs importantes). Ces deux variables sont déclarées Private et ne seront donc atteintes que dans la base de données active. Private LaHauteur As Double Private LaLargeur As Double Nous allons donner des valeurs par défaut à ces variables lors de la première exécution de la classe, c'est-à-dire lors de l'événement Class_Initialize qui sera exécuté au départ et une seule fois. Private Sub Class_Initialize()
LaHauteur = 1
LaLargeur = 1
End Sub
Donc, même si aucune valeur n'est chargée par l'utilisateur les calculs seront faits avec les valeurs 1 dans les dimensions du rectangle. Il faut maintenant décrire les procédures permettant de charger les propriétés de l'objet Rectangle, c'est-à-dire la dimension des côtés. Pour cela nous utilisons les procédures Property Let: Public Property Let Hauteur(Valeur As Double)
LaHauteur = Valeur
End Property
Public Property Let Largeur(Valeur As Double)
LaLargeur = Valeur
End Property
La propriété Hauteur par exemple va prendre la valeur composée par l'utilisateur (Valeur) et la placer dans la variable LaHauteur. Idem pour la largeur. Il faut maintenant décrire les procédures qui vont retourner à l'utilisateur la valeur des propriétés. Non seulement on pourra retourner l'aire du rectangle mais également la hauteur et la largeur. Pour cela on utilisera les procédures Property Get. On voit déjà qu'on peut récupérer à tout moment la valeur d'une propriété et qu'il n'y a pas besoin de l'avoir dans son application. Public Property Get Hauteur() As Double
Hauteur = LaHauteur
End Property
Public Property Get Largeur() As Double
Largeur = LaLargeur
End Property
Public Property Get Aire() As Double
Aire = LaHauteur * LaLargeur
End Property
Lorsque l'utilisateur va demander l'aire du rectangle la procédure va lui fournir directement le résultat du calcul de la hauteur par la largeur. On voit bien ici qu'on n'a pas besoin de connaître le calcul dans l'application car la classe va le faire automatiquement. La classe est terminée, l'objet est décrit, il est utilisable immédiatement dans les applications.
Utiliser une classe: Maintenant, plaçons nous du côté de l'application. Nous savons que nous avons un module de classe nommé Rectangle qui peut nous rendre des services. Il peut calculer une aire de rectangle en lui donnant les dimensions des côtés alors que nous ne savons pas le faire. Nullement besoin de savoir le faire l'objet rectangle s'en charge automatiquement dans toutes mes bases de données. Il faut commencer par déclarer l'objet rectangle dont nous avons besoin. Dim Rect As New Rectangle Le mot clé New est obligatoire car il faut déclarer et utiliser une nouvelle instance de l'objet rectangle. Donc toujours utiliser New avec le Dim. Cette déclaration sera générale au module et sera accessible par toutes les procédures du module si vous la placez comme ici dans les déclaratives. Elle peut être placée dans une procédure si la portée est limitée à cette procédure. Nous allons décrire la procédure à exécuter sur l'événement Click du bouton de commande nommé Commande0. Nous voulons donner deux dimensions et afficher l'aire d'un rectangle. Private Sub Commande0_Click()
Rect.Hauteur = 3
Rect.Largeur = 5
Pour indiquer les dimensions c'est-à-dire les propriétés de l'objet rectangle nommé Rect, nous indiquons le nom de l'objet (Rect) suivi d'un point pour indiquer que ce qui suit est une propriété. Access présente la liste des méthodes et propriétés de l'objet et vous sélectionnez Hauteur par exemple. Vous tapez = qui est le signe d'affectation de valeur à une propriété suivi de la valeur 3. Rapprochez ces deux lignes des procédures Property Let du module de classe. Nous avons défini les dimensions des côtés de notre rectangle et nous les affichons pour contrôler: MsgBox "j'ai défini un rectangle de hauteur " & Rect.Hauteur _
& " et de largeur " & Rect.Largeur
Le message sera : j'ai défini un rectangle de hauteur 3 et de
largeur 5 MsgBox "sa surface est de " & Rect.Aire Le message sera : sa surface est de 15 Votre procédure est terminée et en trois lignes vous avez affiché un calcul qui aurait demandé des heures de travail ! Vous avez compris le fonctionnement de l'application et je vous laisse découvrir seul le fonctionnement des lignes suivantes: Rect.AllongerCôtés (1.5)
MsgBox "j'ai rallongé les côtés" & vbCrLf _
& "j'ai défini un rectangle de hauteur " & Rect.Hauteur _
& " et de largeur " & Rect.Largeur
MsgBox "sa surface est de " & Rect.Aire
End Sub
Bien entendu, la complexité ou la simplicité d'un tel objet est rare mais il a dû vous permettre de comprendre le mécanisme des modules de classe et des objets personnalisés indépendants. Si c'est le cas, l'objectif a été atteint, sinon reprenez point par point l'objet , votre application et les messages affichés et persévérez quelques minutes. Une dernière remarque pour terminer. On peut déclarer autant d'instances qu'on veut de l'objet Rectangle dans le même module, chaque instance étant indépendante et ayant ses propres propriétés (valeurs des côtés): Dim Rect1 As New Rectangle Dim Rect2 As New Rectangle Rect1.Hauteur = 3 Rect1.Largeur = 5 Rect2.Hauteur = 10 Rect2.Largeur = 20 MsgBox Rect1.Aire MsgBox Rect2.Aire Maintenant que vous avez compris comment fonctionnent ces objets, pourquoi ne pas créer un objet Texte ou Dates pour regrouper toutes les fonctions similaires au lieu d'avoir des dizaines de fonctions réparties sur plusieurs modules standards ou de formulaires ? Pour commencer à vous habituer, vous trouverez le module de classe clsDates en cliquant sur le menu module de classe clsDates ci-contre à gauche. cette classe peut être immédiatement utilisée dans vos applications. |
|