Création et utilisation de classes asp

Contenu du snippet

Un petit tutorial sur l'utilisation des classes ASP. Il s'addresse au developpeur ayant quelques connaissances en ASP

Source / Exemple :


Création de classe ASP

La création de classe ASP permet de donner une orientation objet aux projets ASP. En effet, les classes ASP ressemblent beaucoup aux classes que l'on pourrait créer avec d'autre langages tels que C, Java, etc.

Une classe se décompose en Propriété, Méthodes et Evénements.

Les propriétés :
On pourrait facilement comparer les Propriétés à des variables; mais tout l'intérêt d'une classe, est de pouvoir associer un code à l'ajout d'une valeur à un Propriétés. Si cela semble un peu obscure vous comprendrez tout dans l'exemple qui suivra...

Les méthodes :
Elles sont comparables à des fonctions ou des Sub.

Les événements :
Un événements permet d'éxécuter un morceau de code à un moment donné. Hélas, dans une classe ASP, nous ne pouvons créer d'événements personnalisés, mais seulement utiliser les deux événements de base de la classe : Class_Initialize et Class_Terminate.

Ces deux événements se produisent à un moment bien déterminé :
- Class_Initialize est appelé automatiquement lorsque que vous instancié un classe ( set MonObjet = new MaClasse), cela vous permet par exemple d'initialiser des variables dans votre classe, etc. 
- Class_Terminate est appelé automatiquement lorsque que vous supprimer un object ( set MonObjet = nothing), cela est très utils lorsque vous créer une connexion vers une DB avec le Class_Initialize et que vous la refermé avec Class_Terminate. Je donnerai de plus amples informations là dessus dans mon exemple.

Les avantages d'une clase :
Nous pourrions très simplement effectuer le même travail qu'une classe en utilisant simplement des fonctions ou des Subs, alors pourquoi utiliser des classes. Dans un souci de clarté, pour partager le code, pour réutiliser plusieurs fois les même fonctionnalité; je m'explique : le but est de créer un objet que le dévellopeur pourra utiliser, sans se soucier du fonctionnement de l'objet.

Public ou Private ?
Lorsque vous déclaré une variable, une fonction ou une Sub, vous pourvez les déclarer de type Private ou Public. Pour une classe, le type Private signifie que la déclaration ne sera visible qu'à l'intérieur de la classe et publique qu'elle sera visible à l'extérieur et à l'intérieur. Lorsque vous créer des fonctions ou des Sub de type Public, vous créer en fait une méthode; par contre si vous les déclarer en tant que private cela restera des fonctions ou des Subs.

Variables ou Propriétés ?
Dans une classe ASP, vous pouvez créer des variables Public ou Private, les première seront visible à l'extérieur de la classe et pourront être utilisé pour stocker une valeur mais en aucun cas ne pourrai executer un code. Vous pouvez créer trois type de Propriétés :

	Property Get MaPropriete()
		Lorsque  l'utilisateur va demander une propriété à la classe (MaVariable = MaClasse.MaPropriete), la classe va executer une code lié à cette propriété en vu de retourner une valeur

	Property Let MaPropriete()
		Lorsque  l'utilisateur va assigner une valeur à une propriété de la classe (MaClasse.MaPropriete = MaVariable), la classe va executer une code lié à cette propriété en vu de stocker une valeur. Par exemple : Vérifier si la chaîne est bien formée, etc.

	Property Set MaPropriete()
		Lorsque  l'utilisateur va assigner une référence à un objet (MaClasse.MaPropriete = MaVariable), la classe va executer une code lié à cette propriété en vu de stocker cette référence.

Passons à l'exemple :
J'ai préparé une classe pour créer un <select></select> en html... Celle que j'utilise sur mon site se connecte à une base de donnée et stocke les type de langue dans un tableau. Comme j'ai une page où l'utilisateur doit entrer trois adresses différente et qu'il doit indiquer trois fois la langue utiliser pour la correspondance, la première fois que je charge la classe je stocke les valeur depuis la DB mais la fois suivante  que j'utilise la classe, les valeurs sont encore stockées dans la classe d'où un gain de temps non négligeable avec beaucoup de valeurs.

<%
Class SelectLang

private iCodeLang
private sName
private sObjSelect
private sLangTab(3,2)

Public property let Name(sArgs) 'Propriété qui définit le nom du select
	sName = sArgs
end property

Public property Get Name() ' Propriété pour récupérer le nom du select 
	name = sName
end property

Public property let CodeLang(iArgs) 'Je stocke la valeur du code de langue qui devra être sélectionné
	if iCodeLang <> iArgs then
		call Reset()
		iCodeLang = iArgs
	end if
end property

Public property get CodeLang() 'Récupère le code de langue qui sera sélectionné
	CodeLang = iCodeLang
end property

Private Sub Class_Initialize
	call InitVar()
	call InitLangTab()
End Sub

Private Sub Class_Terminate   

End Sub		

private Sub GenerateSelect() 'Sub de type Private pour utilisation en interne
	dim i
	For i = 0 to ubound(sLangTab) -1
		if sLangTab(i,0) = iCodeLang then
			call AddWithVbcrlf("<OPTION SELECTED VALUE='" & sLangTab(i,0) & "'>"  & sLangTab(i,1) & "</OPTION>")
		else
			call AddWithVbcrlf("<OPTION VALUE='" & sLangTab(i,0) & "'>"  & sLangTab(i,1) & "</OPTION>")
		end if
	next 
	
end Sub

private Sub AddWithVbcrlf(sArgs) ' Sub qui ajoute une option au select
	sObjSelect = sObjSelect & sArgs & vbcrlf
end Sub

Public Sub WriteSelect() 'Sub pour 
	sHeader = "<select name='" & sName & "'>" & vbcrlf 'On créer le header du select
	sFooter = "</select>"  & vbcrlf 'On créer le footer du select
	if trim(sObjSelect) = "" then    ' Si la variable est vide c'est que soit c'est la première fois qu'on 
									 'utilise la classe ou que l'on a changé le CodeLang
		GenerateSelect
		response.write sHeader & sObjSelect & sFooter
	else
		response.write sHeader & sObjSelect & sFooter
	end if
end Sub

Public Sub Reset()
	sObjSelect = ""
end Sub

Private Sub InitVar()
	sObjSelect = ""
end Sub

Private Sub InitLangTab() 'Initialisation du tableau avec les valeur des langues
	sLangTab(0,0) = 0
	sLangTab(0,1) = "Français"

	sLangTab(1,0) = 1
	sLangTab(1,1) = "Allemand"

	sLangTab(2,0) = 2
	sLangTab(2,1) = "Anglais"
end Sub

End Class
%>

Le code qui utilise cette classe :
<%
set oSelectLang = new SelectLang 'Instantiation de l'objet
	oSelectLang.name = "LangSelect" '
	oSelectLang.CodeLang = 1 'On change le code langue => la classe génére le select
	oSelectLang.WriteSelect

	oSelectLang.CodeLang = 0 'On change le code langue => la classe génére le select
	oSelectLang.WriteSelect
	
	oSelectLang.CodeLang = 0 'Le CodeLang est le même donc la classe ne regénère pas le select
	oSelectLang.WriteSelect
	
	oSelectLang.CodeLang = 0 'Le CodeLang est le même donc la classe ne regénère pas le select
	oSelectLang.WriteSelect
	
	oSelectLang.CodeLang = 2 'On change le code langue => la classe génére le select
	oSelectLang.WriteSelect
	
	oSelectLang.CodeLang = 1 'On change le code langue => la classe génére le select
	oSelectLang.WriteSelect

set oSelectLang = nothing
%>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.