IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Calback et événements : quel lien(s) entre ces 2 notions ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut Calback et événements : quel lien(s) entre ces 2 notions ?
    Je comprends bien la notion d'événement, et j'utiilse souvent les callback des librairies.

    En revanche quand je dois concevoir une architecture, je bute toujours sur ces 2 notions : je me demande toujours si je dois créer un événements et son écouteur, ou une callback, ou des siganl/slot... ?

    Bref c'est le brouilllard.
    Pouvez vous m'aider à distinguer ces termes ?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par ttone Voir le message
    Je comprends bien la notion d'événement, et j'utiilse souvent les callback des librairies.

    En revanche quand je dois concevoir une architecture, je bute toujours sur ces 2 notions : je me demande toujours si je dois créer un événements et son écouteur, ou une callback, ou des siganl/slot... ?

    Bref c'est le brouilllard.
    Pouvez vous m'aider à distinguer ces termes ?
    Sur quelle plate-forme ? Même si tout ces concepts sont généraux, c'est surtout en fonction de cela qu'on utilisera plus les uns que les autres.

    Un « écouteur » est un objet qui se met à l'écoute d'un événement particulier. Donc pour cela, il faut qu'il y ait une file d'événements, et quelque chose à appeler lorsque l'événement surveillé survient.

    La seule différence, de mon propre point de vue, est qu'en général, un écouteur est un objet qui respecte une interface prédéfinie. La boucle principale sait alors à l'avance quelle méthode appeler. Il n'en reste pas moins que cette méthode est en elle-même une fonction de call-back (l'objet se déclare auprès d'un tiers, qui le « rappelle » en temps voulu), même si tu n'as pas eu besoin de la spécifier explicitement.

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Il y a au moins trois concepts:
    - des événements qui doivent être traîtés, donc par un seul destinataire, même si celui-ci peut n'être déterminé que par un pattern de chain of responsability; l'événement lui-même est souvent, mais pas toujours, réifié par l'utisation du pattern command.
    - le pattern publisher/observer où les observeurs peuvent naturellement être plusieurs. On peut aussi appeler événements les notifications qu'ils recoivent.
    - les callbacks sont des fonctions qu'on passe pour qu'elles soient appelées par après. C'est un mécanisme d'assez bas niveau qui peut servir entre autres pour implémenter les deux patterns ci-dessus.

  4. #4
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut
    Merci, je commence àà bien mieux cerner l'ensemble.
    - les callbacks sont des fonctions qu'on passe pour qu'elles soient appelées par après. C'est un mécanisme d'assez bas niveau qui peut servir entre autres pour implémenter les deux patterns ci-dessus.
    Le wikipedia des callbacks est assez bien :
    http://en.wikipedia.org/wiki/Callback_function

  5. #5
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut
    Pouvez vous m'aider sur un cas concret ? J'ai du mal

    J'ai 3 classes :
    * Ampli.class
    * Guitare.class
    * Jack.class

    Le jack se plugge sur l'ampli et sur la guitare.
    Le tout sont des éléménent représentés graphiquement.

    Ces 3 classes sont instanciées dans le main.

    L'objectif est le suivant : lorsque l'utilisateur déplace la guitare ou l'ampli, le jack doit être redessiné de manière à maintenir la connection.

    Guitare et ampli ont une fonction callback pertinente : moved()

    J'aimerai pouvoir faire réagir mon jack à l'appel de cette fonction.
    A la création , le jack se voit attribué 2 pointeurs : pGuitare, pAmpli.

    Que dois je faire conceptuellement parlant :

    1. pointer sur ampli et guitare dans Jack.class et créer un callback dans Jack,
    dans lequel j'assurerai le redimensionnement de mon jack grâce au donnée que je récupère sur guitare et ampli ?

    2. pointer sur le jack depuis Ampli.class et Guitar.class, et assurer son repaint depuis ces objets ?


    J'en suis à la solution 1 : elle me semble plus pertinente, en tous cas plus claire. Mais relier un callback de A sur un callback de B... vous auriez une bouée ?...

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    De prime abord, je dirais que tu n'a même pas besoin d'avoir un pointeur de type ampli ni de type guitare de ta classe jack...

    Tu pourrais te contenter d'une fonction surchargée (un exemplaire qui reçoit une référence constante de type guitare et l'autre qui reçoit une référence constante de type ampli), que tu nommerais éventuellement d'un nom un peu plus pertinent que "redraw()" et qui serait appelée par tes méthodes moved...

    Ce serait alors la guitare et l'ampli qui auraient un pointeur vers la prise jack, en somme, afin de pouvoir appeler redraw(*this)

    Pour moi, l'idée est que, comme on sait pertinemment quand exactement la fonction devra être appelée, il n'y a pas vraiment lieu de gérer cela par événement ou callback d'aucune sorte
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par ttone Voir le message
    Calback et événements : quel lien(s) entre ces 2 notions ?
    Pour répondre à cette question là en particulier : tu vas généralement avoir besoin d'une fonction de call-back pour réagir à des événements. C'est encore ce qu'il y a de plus simple.

    Cependant, on utilise des fonctions de call-back dans bien d'autres cas de figures : typiquement les tris, où la fonction qui embarque l'algo de tri proprement dit rappelle ta fonction pour faire une comparaison. Cette façon de faire te permet de trier n'importe quel type d'objets, mais il n'y pas de notion d'événements dans ce processus. Juste une bête boucle dont les appels sont prédictibles.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Création automatique de graphes / TCD + Lien entre ces graphes
    Par Antoine3 dans le forum Excel
    Réponses: 2
    Dernier message: 08/08/2012, 14h05
  2. Réponses: 5
    Dernier message: 16/06/2010, 10h03
  3. Quel est la différence entre ces deux écritures ?
    Par TocTocKiéLà? dans le forum C++
    Réponses: 5
    Dernier message: 06/08/2007, 14h11
  4. Réponses: 4
    Dernier message: 27/07/2007, 16h39
  5. quel lien dois je faire entre mes classes ?
    Par condor_01 dans le forum Diagrammes de Classes
    Réponses: 8
    Dernier message: 01/03/2007, 23h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo