Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > WinDev > Contribuez
Contribuez Vos contributions pour la rubrique Windev : articles, cours, tutoriels, faq, comparatifs, tests, sources, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/11/2012, 12h18   #1
Atsibat
Membre expérimenté
 
Développeur informatique
Inscription : mars 2009
Messages : 314
Détails du profil
Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2009
Messages : 314
Points : 594
Points : 594
Par défaut POO design pattern Singleton avec Windev

Bonjour à tous,
avant de demander humblement la publication d'un mini article je vous sollicite pour vos impressions sur ceci :

Le design pattern singleton en WD Langage :


Ce Pattern est peut-être le premier pattern que j'ai appris en POO
Car c'est un des plus simples à comprendre.
Il s'agit comme le dit très bien wotre cyber encyclopédie préférée de créer une classe dont on ne peut implémenter d'un seul et unique objet (attention quand même en multi-thread.

Le but de l'article n'est pas de théoriser ce pattern mais de le traduire en WDlanguage en voici la recette :

On crée un projet (sans base de donnée) pour aller plus vite le projet en ZIP version 17 est en pièce jointe.
Dans ce projet une fenêtre
Dans cette fenêtre un champ de saisie "saisie"
Un bouton "Voir"
Un bouton "Ajouter+1"

On crée une classe Singleton (original non?)
Voici la déclaration :
Code :
1
2
3
4
5
6
Singleton est une classe
	membre est un entier
	GLOBAL
	single est un Singleton dynamique
FIN
single est mon instance, elle figure dans la déclaration en global c'est le point le plus important de cette classe avec le fait que le constructeur soit privé :

Code :
1
2
PROCEDURE PRIVÉ GLOBAL Constructeur()
Mettre le constructeur privé va interdire l'instanciation d'un objet en dehors de la classe et on évite d'avoir plusieurs instances grace à la méthode getInstance() dont voici le code :

Code :
1
2
3
4
5
6
7
PROCEDURE GLOBAL getInstance()
SI ::single=Null ALORS
	::single=allouer un Singleton
SINON
FIN
	RENVOYER ::single
On comprends bien alors que si un objet singleton existe déjà on le renvoi au lieu de recréer une instance. Tous les appels à l'objet se font donc via cette méthode.

Pour accéder au membre "membre" on écrit : Singleton.getInstance().membre
sans avoir ni a déclarer ni a allouer l'objet.

Du coup dans le code du projet on ne met RIEN
Dans le code de "saisie" on ne met RIEN

Dans le code "clic" du bouton "Voir" on écrit :
Code :
Saisie1=Singleton.getInstance().membre
et dans celui du bouton "Ajouter+1"
Code :
Singleton.getInstance().membre++
A chaque clic sur "voir" on récupère la valeur de "membre"
A chaque clic sur "Ajouter" on incrémente "membre"

Alors très bien me direz vous, très joli mais à quoi ça va me servir ?
Dans pas mal de langages on utilise le pattern singleton pour limiter les objets de connexion à la base de donnée à une seule instance.
Dans Windev c'est rarement le cas car en général on utilise un objet Connexion qui existe par défaut dans votre analyse.

On peut envisager d'utiliser ce pattern si on utilise une base externe sans analyse avec un objet de connexion qu'on rappelle souvent.

Personnellement une autre de mes utilisations régulières est dans la gestion des fichiers de log. J'écris un objet Journal qui utilise ce pattern avec une méthode "ecritLigne"
et je lance facilement des appels du type :
Code :
Journal.getInstance().ecritLigne("cette opération ...")
Sans avoir à me soucier des déclarations.

Voilà j'attends vos réactions pour les modifications.
Merci d'avance





Dans le projet
Fichiers attachés
Type de fichier : zip Singleton.zip (112,5 Ko, 13 affichages)
Atsibat est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 17/11/2012, 15h45   #2
lazariel
Membre actif
 
Homme Yannick M
Étudiant
Inscription : janvier 2010
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yannick M
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2010
Messages : 158
Points : 177
Points : 177
Merci !
lazariel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 13h57   #3
run85
Invité de passage
 
Homme
Inscription : novembre 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2012
Messages : 1
Points : 1
Points : 1
un mot aussi: merci!
run85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h03.


 
 
 
 
Partenaires

Hébergement Web