Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Programmation évènementielle [ Divers / Général ] (LocalStone)

vendredi 22 février 2008 à 01:56:51 | Programmation évènementielle

LocalStone

Salut à tous !
Je pense que le titre de mon sujet résume bien le thème de ma question : comment faire de la programmation évènementielle en Java ? Attention, je ne parle pas de Swing ou de n'importe quelle autre IHM. Je parle plutôt dans le cas général.
Un exemple tout bête ... Imaginons une application qui scanne toutes les 5 minutes un répertoire pour voir s'il y a des modification dedans et qui effectue une action particulière en fonction de cette action. On aura alors une classe qui va envoyer des évènements (la classe qui scanne le répertoire), et une classe qui effectue l'action correspondante.
Je pense qu'il faut s'orienter vers le pattern Observer (ou observateur pour les plus français d'entre-nous), mais quelque chose m'echappe ...
En C#, par exemple, il y a un mot clé particulier pour gérer les evenements. Du coup, on peut avoir un évènement qui va correspondre à la suppression d'un fichier, un qui va correspondre au renommage, etc.).
Le truc, c'est qu'avec le pattern Observer, on va pouvoir s'abonner qu'à UN seul évènement. Alors comment faire pour pouvoir différencier l'évènement qui a été réalisé ? Je suppose que la solution se trouve dans un paramètre de type Event que l'on va faire passer à la méthode qui va être appellée. Mais cela implique une grosse suite de if else qui va permettre de différencier l'évènement ... Et ça, saymal.

En fait mon problème est là ... Existe-il une solution propre en Java qui pourrait résoudre le problème que je viens de poser ?


Merci  beaucoup pour vos idées et pour les temoignages que vous allez apporter !
LocalStone

vendredi 22 février 2008 à 06:03:32 | Re : Programmation évènementielle

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Tu as plusieurs solutions qui s'offre à toi, mais la plus utilisée en java est d'utiliser des Listener : une interface permettant de s'abonner aux événements que te procure une classe, et une autre qui te permet de recevoir les événements par des appels à des fonctions que tu dois redéfinir.
______________________________________
DarK Sidious

vendredi 22 février 2008 à 13:29:53 | Re : Programmation évènementielle

LocalStone

Salut,
En fait je connaissais ça : c'est en gros l'application du pattern Observer. Mais ce que je ne comprends pas, c'est comment faire pour distinguer 2 évènements différents. En effet, l'utilisation de l'interface Listener permet de s'abonne qu'à un seul évènement ...

LocalStone

vendredi 22 février 2008 à 18:56:19 | Re : Programmation évènementielle

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

C'est là où les le listener se distingue de l'observer (qui existe aussi directement en java : suffit d'implémenter l'interface observable) : il est possible de définir plusieurs fonctions (correspondant à plusieurs événements) dans la même interface de listener (comme pour les événements clavier par exemple avec l'interface KeyboardListener qui possède plusieurs événements qui se déclenche au moment opportun).
______________________________________
DarK Sidious

vendredi 22 février 2008 à 21:58:37 | Re : Programmation évènementielle

LocalStone

Merci pour ta réponse ... Qui entraîne alors une question : à quoi servent alors les interfaces Observable et Observer fournies par l'API Java ? Parce qu'à la limite, on peut faire tout avec des listeners, non ?

LocalStone

samedi 23 février 2008 à 06:15:17 | Re : Programmation évènementielle

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

Comme je t'avais dit plus haut : tu as plusieurs solutions : le listener est le plus utilisé, et le plus simple (et souple) à mettre en place.

Il permet de passer des objets d'événements dans la fonction appellée (pattern commande si on va par là).

L'Observable/observer permet plutôt (en théorie) d'être notifié lorsqu'une ou plusieurs valeur(s) de l'objet qu'on observe est modifié (tu me dira, dans 90 % des cas, c'est ce qui se passe avec les listeners). Il permet aussi d'accumuler plusieurs modifications de variables et ne déclencher la notification qu'une fois un traîtement terminé là où le listener est un appel direct à l'événement (si tu te limite au cas simple).

Le listener quant à lui peut être utilisé pour être notifié quand tu le juge bon : en entrée de fonction par exemple pour annuler le traîtement de celle-ci (grâce à l'objet que tu lui passe en paramètre), et à la fin de cette même fonction pour notifier que c'est fini (pour un traitement asynchrone par exemple) par exemple.

Disons pour résumer que le Listener s'apparente beaucoup à l'observer, mais est plus générique : là où l'observer se limite à la modification des valeurs, le listener permet plus de choses et de personnaliser les événements déclenchés.
______________________________________
DarK Sidious

samedi 23 février 2008 à 12:15:26 | Re : Programmation évènementielle

LocalStone

D'accord, je comprend mieux. Merci beaucoup pour ta réponse !

LocalStone



Cette discussion est classé dans : action, programmation, classe, évènement, évènementielle


Répondre à ce message

Sujets en rapport avec ce message

petit probleme d'action entre 2 applet [ par mandi01 ] Bonjour. Voilà j'ai un petit problème d'action entre 2 classe. Je m'explique : j'ai une classe nommée fenetre, et une autre nommée EntrerDate ce qu'i Faire dialoguer des classes entre elles [ par inquisitor87 ] Bonjour à tous et à toutes. Je suis complètement perdu sur un point crucial pour mon projet actuel : j'ai une classe mère, qui possède deux classes d Listener et Event [ par didoux95 ] Bonjour à tous.J'ai deux classes : une classe A et une classe B organisées de cette manière :...public A () {   B b = new B();}...Comment est ce que j menu bar en java [ par emna10 ] Bonjour!je rencontre un probleme au niveau de la manipulation du menu dans mon application(en java):j'ai creer une classe menu qui construit le menu ( action bouton [ par Nayra ] bonsoir,je vais introduire avec ça:vous connaissez bien sur l'atelier Starumlil y a la palette des composants(classe, paquetage, généralisation....)po problème d'action sur un bouton [ par crazysetup ] Bonjour à tous, j'ai un petit problème, j'ai une classe qui me construit une frame dans laquelle ya un JButton "Valider", l'action sur valider est cen instancier d'une classe fille [ par dunith ] bonjour j'ai une clesse fille de type absrtactabstract class TRFPPProtocol extends TAbstractProtocol abstract class TAbstractProtocol implements IDe Appli + controller [ par adrienr11vdv ] Bonjour,Je développe une application en Java. J'ai deux classes : une classe "code graphique" et une autre qui les évenement de celle-ciVoici la class classe [ par naddou1985 ] bonjour tout le monde: svp , quelle est la difference entre une classe de type void et une autre qui n'a aucun type exp: void test(int); test(


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.