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 :

Instanciation d'interface ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut Instanciation d'interface ?
    Bonjour à tous,

    je viens d'être balancer sur un projet c++, et ce n'est pas trop mon rayon. Je suis dans une grosse phase d’apprentissage.
    Le projet est assez gros, avec plein de choses dedans, très intéressantes, mais je me heurte à une première difficulté de compréhension qui doit venir de mon manque de connaissance cpp.

    Le main de ce projet est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Get application instance
        IApplication& app = IApplication::getInstance();
     
        // Initialize application
        if (app.init(argc, argv))
        {
            // Start application
            ret = app.start();
    Assez simple, mais pour moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        IApplication& app = IApplication::getInstance();
    ça c'est assez flou. C'est bien une interface ? (interface étant équivalent à abstrait en c++ ?)
    Comment peut on initialiser une interface ?

    Surtout qu'après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    app.init(argc, argv)
     
    app.start()
    ces méthodes sont bien lancées, mais je ne comprend pas où le main trouve ces méthodes.

    Un concept doit m'échapper....

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 522
    Par défaut
    Plus que le C++, c'est peut-être les Design Pattern qu'il faut un peu réviser.
    A ma connaissance, le concept d'interface n'a pas de définition en C++, à part dans la version M$ du C++ (s'il la maintiennent encore et c'est pas dit).

    Ce I de "IApplication", c'est bien pour indiquer une "interface" en terme sémantique, il n'y a pas de définition strict de ce qu'est une interface.
    Ici "IApplication" est une simple classe (vraisemblablement abstraite via le mot clé "abstract") avec une simple méthode statique getInstance.
    Ceci est l'implémentation habituelle de Design Pattern "Singleton" (l'un des plus décrié par un mauvais usage abusif).

    ces méthodes sont bien lancées, mais je ne comprend pas où le main trouve ces méthodes.
    Dans le Singleton, l'instance (unique par l'utilisation de Design Pattern) de type IApplication (ou d'une classe fille de IApplication).

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Ne pas pouvoir instancier une interface n'interdit pas d'en utiliser, sinon elles n'auraient aucun intérêt.
    Il suffit qu'une classe en hérite.
    Avec un tel code, ma boule de cristal voit que la classe qui l'implémente enregistre son instance afin d'être retrouvée via ce GetInstance. Il s'agit peut-être d'un singleton.
    Bien sûr ce ne sont que des théories sans voir le code. Mais la lecture du simple code de getInstance devrait indiquer comment ça marche en 1/2s
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut
    Merci pour ces précisions. Effectivement le Singleton n'est pas un patern qui m'est familié.

    Ce qui me perturbe c'est que juste en appelant le getInstance de la classe abstraite on puisse avoir l'objet en lui même.

    Ou alors vu que c'est un Singleton , lors de la compilation le programme sait déjà ou trouver la définitions de la méthode ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Non tu ne récupères pas l'objet mais une référence, et ça n'a rien à voir.
    Lire un bouquin ou des cours sur les bases du langage ne serait pas du luxe.
    Et de toutes façons une fonction peut bien retourner ce que bon lui chante alors je vois pas ce qui peut être perturbant ou non
    Et si tu as accès au code, lis-le! Tu verras qu'il n'y a rien de magique derrière ce getInstance.

    https://cpp.developpez.com/faq/cpp/?...erence-de-type
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut
    Merci de prendre le temps de me répondre.
    Manifestement je ne suis pas clair sur ce qui est une difficulté de compréhension pour moi. Je vais tenter de reformuler.

    J'ai un main. Dans ce main j'appelle une methode d'une une instance d'une classe abstraite. Cette méthode n'est défini que dans la fille qui hérite de cette classe abstraite.

    Je ne comprend donc pas où se fait le lien entre mon instance dans le main, et la définition de la méthode getInstance.


    J'ajouterai peut être juste que j'ai commencé par dire que le c++ n'était pas connu pour moi. Si je viens poser une question ici, c'est pour soliciter de l'aide, ainsi qu'une explication pédagogique. Bien entendu Je je vais devoir étudier le sujet, lire le code, et passer du temps pour me mettre a niveau.
    Je ne suis pas convaincu de l'utilité de bien insister sur le fait que je ne comprend pas, je suis la pour ça.

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

Discussions similaires

  1. Possible d'instancier une interface ?
    Par nuriel2 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 27/03/2010, 23h07
  2. Instanciation d'Interface à la volée
    Par ElTchoupi dans le forum C#
    Réponses: 19
    Dernier message: 11/03/2010, 17h57
  3. Problème d'instanciation d'interfaces
    Par madmox dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 29/05/2007, 17h19
  4. Réponses: 6
    Dernier message: 24/08/2006, 14h33
  5. Réponses: 12
    Dernier message: 20/01/2006, 20h40

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