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

Langage C++ Discussion :

Interface en C++


Sujet :

Langage C++

  1. #1
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut Interface en C++
    Bonjour à tou(te)s,

    J'aimerai me rapprocher au maximum de la notion d'interface (existante en Java par exemple) en C++.

    L'avantage que j'y vois étant que l'objet ne sait même pas que l'interface existe ou presque. On peut aussi avoir à modifier l'interface sans modifier l'objet lui-même.

    Que penser des fonctions friend pour permettre ce genre de fonctionnalité ? J e trouve qu'utiliser l'héritage et le polymorphisme n'est pas identique à la notion d'interface et je souhaite plus avoir cette notion.

    L'exemple type étant de permettre de sauver et charger des données de l'objet depuis n'importe quel support (fichiers, bases de donnée).

    Merci d'avance,
    Mindiell
    "Souvent, femme barrit" - Elephant man

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    L'interface en Java n'est rien d'autres qu'une classe ne contenant aucune implémentation et qui sera par la suite héritée.
    Il me semble même que le mot clé "extends" est toléré pour implémenter une interface.

    La notion en C++ qui s'en approche le plus, c'est les classes abstraites qui peuvent très bien ne contenir aucune implémentation.

  3. #3
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    Non, désolé. L'interface en Java permet d'utiliser un "truc" dont l'objet ne connait rien. L'héritage oblige à connaitre et être lié à la classe mère.

    Mon objet n'a pas à connaitre l'interface, et je ne veux pas avoir à modifier l'objet si je dois modifier mon interface. Je veux conserver ces deux choses dans deux endroits bien distincts. D'où ma question à propos des fonctions amies...
    Mindiell
    "Souvent, femme barrit" - Elephant man

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par Mindiell Voir le message
    Mon objet n'a pas à connaitre l'interface, et je ne veux pas avoir à modifier l'objet si je dois modifier mon interface.
    Salut, je ne comprend pas trop ta question,
    en Java quand tu modifie une interface, tu est bien obligé de modifier les classes qui l'implémente.

    Enfin personnellement pour moi une interface en c++, c'est une classe abstraite contenant uniquement des méthodes virtuelles pures.

  5. #5
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Si je me souviens bien les interfaces en Java ne permettent pas d'implémenter quoi que ce soit... Donc je ne comprends pas bien le "truc" que ton objet ne connaitrait pas. Peux tu nous montrer un bout de code Java montrant ce que tu voudrais reproduire en C++ ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Il y a emmêlage de pinceaux.
    L'interface Java s'hérite et le truc qui s'en rapproche le plus est la classe abstraite dont toutes les fonctions sont virtuelles pures.
    Mais on a mieux : le pattern NVI qui apporte la programmation par contrat aux interfaces (FAQ ?)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    Hum...

    Il semble que je me sois fourvoyé... En fait j'ai bossé sur un projet en java et le responsable nous avait fait utiliser un autre objet que le notre pour sauver/charger l'objet principal. Il a utilisé des interfaces, mais apparemment, c'était pas du tout lié à ce que je pensais.

    En d'autres termes, il a simplement créé un objet "Loader" qui utilise l'objet à sauver et ses methodes Get/Set pour le sauver/charger. Je pensais qu'il accédait directement aux membres de l'objet.

    Dans ce cas, je vais me faire un objet spécifique aussi et puis c'est tout. Merci à vous et désolé pour le dérangement. L'intérêt que j'y vois est de pouvoir modifier les méthodes de sauvegarde / chargement sans impacter l'objet lui-même.

    PS: Désolé de ne pas être très clair, mais pour le moment, je suis assez dans le flou moi aussi

    EDIT : Une classe amie serait la solution non ? Accéder aux données membres pour charger/sauver simplement, mais sans utiliser le même objet.
    Mindiell
    "Souvent, femme barrit" - Elephant man

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    boost.serialize est un bon ami.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Pour compléter les réponses de Luc :
    F.A.Q Mes fonctions virtuelles doivent-elles être publiques, protégées, ou privées ? Le pattern NVI.

    Tutoriel Boost.Serialization : La sérialisation avec Boost par Pierre Schwartz

    Ensuite, l'amitié est effectivement ce qui serait le moins intrusif il me semble (en tout cas, j'aurais tendance à préférer une amitié à un héritage artificiel d'une SuperInterface pour tous tes objets à sérialiser).

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

Discussions similaires

  1. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  2. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  3. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  4. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51
  5. [VB6] [Interface] Icones de boutons de barre d'outils
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 13/09/2002, 15h50

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