Utilisation des classes VBScript dans les pages ASP

Cours utilisation des classes VBScript dans les pages ASP, tutoriel & guide de travaux pratiques les fonctions accesseur en pdf.

Héritage

Un autre concept important de la POO est la notion d’héritage. Qu’entend-on par là ? Reprenons l’exemple de la classe véhicule. Ma voiture est un objet de cette classe. Mais ma bicyclette est aussi un objet de cette classe. Il existe cependant des différences assez importantes entre les 2. Pour éviter donc de créer un objet trop général, il m’est possible de définir une sous-classe qui va reprendre les carcatéristiques de ma classe véhicule mais qui va l’étendre pour en ajouter d’autres. On parle ainsi d’héritage. En effet ma sous-classe (véhicule_non_motorisé par exemple) conserve les méthodes et propriétés de la classe de base. Concept intéressant s’il en est mais malheureusement inexistant en VBScript. il existe d’autres concepts qui découlent de celui d’héritage, mais comme VBScript ne supporte pas l’héritage, il est inutile de s’épancher plus longuement dessus.
L’utilisation des classes en VBScript aborde donc les concepts de la POO mais on ne peut malgré tout pas parler de Programmation Orientée Objet pour VBscript. Les classes ont été introduites avec la version 5.0 de VBScript.

Ma première classe

Voyons maintenant comment déclarer une classe et comment instancier une classe.
On utilise pour déclarer une classe les mots clé Class et End Class.
<%
Class ClassTest
End Class
%>
La création d’une instance de classe se fait à l’aide du mot clé New et l’affectation à une variable, comme pour les objets COM, à l’aide du mot clé Set.
<%
Class ClassTest
End Class
‘ Création d’une instance de la classe ClassTest
Set instClassTest = New ClassTest
‘ Destruction de l’instance créée précédemment
Set instClassTest = Nothing
%>
Cette classe telle qu’elle est définie pour l’instant ne fait absolument rien. Nous allons donc lui définir des propriétés.

La portée : Private/Public

Il y a deux cas à prendre en compte. Comme dit plus haut, une classe est une méthode d’encapsulation. Qui dit encapsulation dit donc que l’on va définir des propriétés (variables) qui seront accessibles depuis l’extérieur de la classe, et d’autres uniquement à l’intérieur de la classe. Si je reprends l’exemple de la classe véhicule, peut m’importe de savoir la façon dont va être calculé le poids, ce qui m’importe, c’est de récupérer cette valeur, et uniquement cette valeur finale, pas les valeurs intermédiaires qui auront permis d’obtenir celle-ci. C’est la notion de portée. On va pouvoir déclarer des propriétés (variables) publiques, c’est à dire accessibles dans et à l’extérieur de la classe, et des propriétés privées, c’est à dire uniquement accessibles dans la classe. Comme pour l’instant je m’attache uniquement aux propriétés, c’est pour cette raison que j’ai omis de parler des méthodes, mais le même principe s’applique également à celles-ci.
La distinction va donc s’effectuer à l’aide des mots-clé Private et Public.
<%
Class Personne
Public prenom
Private surnom
End Class
%>
Les propriétés et méthodes d’un objet (mais vous connaissez déjà) s’écrivent à l’aide du point, sur le modèle
variable = instanceobjet.propriete
instanceobjet.propriete = variable
instanceobjet.methode()
variable = instanceobjet.methode()
On va donc pouvoir modifier et afficher la propriété nom
<%
Class Personne
Public prenom
Private surnom
End Class
Set instPersonne = New Personne
instPersonne.prenom = « jérôme »
Response.Write « Bonjour  » & instPersonne.prenom
Set instPersonne = Nothing
%>
Si vous essayez de faire la même chose avec la propriété surnom, étant donné que celle-ci est privée, vous obtiendrez le message d’erreur suivant :
Cet objet ne gère pas cette propriété ou cette méthode: ‘surnom’
Quelques remarques :
– Par défaut, si vous ne le précisez pas à l’aide du mot-clé Public, c’est à dire si vous utilisez le mot-clé Dim pour déclarer vos variables de classe, la portée est publique.
– Il n’est pas possible de combiner les mots-clé Private/Public avec le mot-clé Dim.
– Il n’est pas possible d’utiliser le mot-clé Redim pour déclarer une variable de classe.
– Si vous voulez déclarer une variable de classe comme étant une variable tableau, il faut la déclarer à l’aide d’un des 3 mots-clé Dim/Public/Private puis la redimensionner à l’aide du mot-clé Redim dans une procédure.

Le constructeur : class_initialize

Un constructeur est une procédure qui va être appelée au moment où une instance va être créée. Cela permet notamment d’initialiser des variables dans la classe avec une valeur par défaut. En VBScript, on dispose de la procédure Class_Initialize()
<%
Class Personne
Public prenom
Private surnom
Private Sub Class_Initialize()
Response.Write « La classe est initialisée :<br> »
prenom = « inconnu »
End Sub
End Class
Set instPersonne = New Personne
Response.Write « Bonjour  » & instPersonne.prenom
instPersonne.prenom = « jérôme »
Response.Write « Bonjour  » & instPersonne.prenom
Set instPersonne = Nothing
%>
Ceci va donc donner la sortie suivante à l’écran :
La classe est initialisée :
Bonjour inconnu
Bonjour jérôme
Nota : La procédure Class_Initialize() ne possède pas d’arguments

Le destructeur : class_terminate

Un destructeur est une procédure qui va être appelée au moment où l’instance
va être détruite. En VBScript, on dispose de la procédure Class_Terminate()
<%
Class Personne
Public prenom
Private surnom
Private
Sub Class_Initialize()
Response.Write « La classe est initialisée :<br> »
prenom = « inconnu »
End Sub
Private Sub Class_Terminate()
Response.Write « La classe est détruite<br> »
End Sub
End Class
Set instPersonne = New Personne
Response.Write « Bonjour  » & instPersonne.prenom
instPersonne.prenom = « jérôme »
Response.Write « Bonjour  » & instPersonne.prenom
Set instPersonne = Nothing
%>
Ceci va donc donner la sortie suivante à l’écran :
La classe est initialisée :
Bonjour inconnu
Bonjour jérôme
La classe est détruite
Nota : Comme la procédure Class_Initialize(), la procédure Class_Terminate() ne possède pas d’arguments.
Si vous omettez de détruire explicitement l’instance de classe créée (ce qui est toujours déconseillé), celle-ci le sera automatiquement à la fin de l’exécution du script et donc l’affichage provoqué par la procédure Class_Terminate() (les instructions définies dans celle-ci) s’effectuera en fin de document.
En VBScript, on ne parle pas de constructeur ni de destructeur, mais d’événements. Class_Initialize() et Class_Terminate() sont les événements de la classe.

Les fonctions accesseur

Les fonctions accesseur sont des fonctions qui vont permettre d’accéder (lecture/écriture) aux variables de la classe avec un seul point d’accès, c’est à dire via une seule section de code. Imaginons par exemple une classe qui possèderait une propriété prixHT. La valeur que nous fournirions à la classe serait donc un prix hors taxes. Différentes fonctions effectueraient des calculs à l’intérieur de la classe en prenant à chaque fois le prix TTC, c’est à dire le prix HT plus 20.6 %. Lorsque le taux change, il faut changer dans toutes les fonctions. Avec une fonction accesseur, nous calculons déjà le prix TTC et c’est cela que la classe utilise, donc une seule ligne
de code à changer en cas de changement de taux.
Les fonctions accesseur en VBScript s’écrivent d’une manière un peu particulière.
Voir la première d’entre-elles ci-dessous.
Property Let
Cette procédure (sans valeur de retour) est définie ainsi dans la documentation VBScript (les crochets dans le code suivant signifient que c’est optionnel).
[Public | Private] Property Let name ([arglist,] value)
[statements]
[Exit
Property]
[statements]
End Property
Il ne faut pas perdre de vue qu’il s’agit bien ici d’une procédure, cela veut donc dire qu’il est possible d’y effectuer des instructions (statements) comme dans n’importe quelle procédure. Simplement, on y accède dans le code comme s’il s’agissait d’une propriété (variable). L’avantage est que l’on peut passer plus d’une valeur ([arglist,]), l’important étant que ce qui va se trouver à droite du signe = dans l’expression est la valeur (value) de la propriété, et donc lors de la définition de la propriété dans la classe, il faut bien respecter l’ordre des arguments. Cette propriété est en lecture seule. Si on reprend le code de la classe précédente, on peut maintenant l’écrire (un peu remanié).

………

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *