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 :

POO intégrale ?


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut POO intégrale ?
    Bonjour,

    Ma question est plutôt d'ordre général, et je m'excuse par avance si elle est maladroite .
    Je m'initie à la prog (en C++ sous Windows) et j'en suis au stade de l'écriture de dll.
    Toutefois, j'ai trouvé trés peu de docs ou de tutos traitant de l'écriture de dll en C++.
    D'ailleurs c'est plutôt compliqué (en gros il faut "wrapper" les fonctions de la dll) et les auteurs des tutos
    concluent souvent en disant qu'à moins d'en avoir une véritable utilité il vaut mieux écrire les dll en C.

    Donc, puisque le moindre logiciel un peu évolué utilise obligatoirement des dll et que celles-ci
    sont apparement écrite en C, qu'en est il du "tout objet" ?
    En effet, j'entend partout parler de C++ et de POO à tous les étages mais qu'en est-il réellement ?
    Est-il possible d'écrire un logiciel où tout le code serait OO de A à Z ou est-on forcément obligé de composer
    avec le C ?

    Merci de m'éclairer

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le système de DLL n'a absolument rien à voir avec C++, c'est très lié à l'API Win32.
    D'autres systèmes d'exploitation que Windows ont d'ailleurs d'autres solutions, voire pas de solution du tout.

    Quoiqu'il en soit, l'usage de bibliothèques dynamiques n'est pas vraiment indispensable d'autant plus que faire cela sans sacrifier la portabilité n'est pas nécessairement pratique.

  3. #3
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Pour continuer dans la direction de loufoque:
    - Utiliser des librairies dynamiques force à compiler ces lib pour chaque plateforme pouvant faire tourner le logiciel.
    - C'est bien pour éviter de recompiler, pour les maj et tout oui, mais bien des logiciels savent s'en sortir autrement.

    En gros, les librairies dynamiques ca peut aussi faire perdre du temps selon les ambitions du programme niveau plateformes, maj, modularité...

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    En plus du fait que les DLL ne sont pas nécessaires, il est possible fe faire des DLL qui exportent des objets. Le plus simple que j'ai trouvé est d'avoir par exemple une classe de base toute virtuelle, inclue dans la DLL et dans le programme principal, et dans la DLL un eclasse qui dérive de la première et l'implémente. Cette DLL fourni aussi, en C, une fonction de factory retournant un pointeur sur la classe de base. Et hop, le tour est joué. A condition que DLL et programme principal soient développés par le même compilateur avec les mêmes options.

    Pourquoi les DLL ne sont pas plus POO-friendly ? Probablement parce que les langages objets tels que C++ laissent une grande latitude en matière d'implémentation, ce qui fait qu'il n'y a pas une façon de faire standard, ce qui est un frein pour l'interopérabilité entre programmes. D'autres langages, par exemple les langages .NET, imposent plus de choses de ce point de vue, et permettent des "DLL" (bien qu'ayant le nom, elles sont incompatibles) plus "objet".
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Comme signalé, les DLL n'ont pas de rapport direct avec le C++. Il s'agit d'une forme de bibliothèques dynamiques.

    Pourquoi le conseil de rester au niveau du C? Il faut savoir qu'il n'existe pas d'ABI (Application Binary Interface) pour le C++ [1]. Cela veut dire qu'une bibliothèque C++ compilée avec un compilateur ne sera pas nécessairement utilisable avec un autre compilateur C++ [2]. La seule compatibilité possible se fait au niveau du C.



    [1] En fait, il en existe qu'une pour une seule plateforme à ma connaissance, et ce n'est pas windows.
    [2] Et pour simplifier les choses, les tables de compatibilités ne sont pas symétriques -- "tables" au pluriel car il y a des différences entre les bibliothèques statiques et les bibliothèques dynamiques. Les curieux pourront les trouver dans Imperfect C++ de Matthew Wilson, chez Addisson-Wesley (comme d'hab). Il a tout un chapitre sur le sujet. Et des gros hacks qui tâchent pour faire des bibliothèques OO "portables" et utilisable depuis le C ou le C++.

    Edit: Dernier truc. Le C++ est un langage pragmatique. Se limiter à l'OO, c'est ignorer une bonne parti de la puissance du langage.
    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...

  6. #6
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Merci pour vos réponses, j'y vois un peu plus clair maintenant

    Le système de DLL n'a absolument rien à voir avec C++, c'est très lié à l'API Win32.
    oui, oui je sais , l'équivalent sous linux sont les fichiers *.so je crois, mais je connais mal cet environnement et je ne sais pas si ces fichiers peuvent être écrit en C++.
    Quoiqu'il en soit, l'usage de bibliothèques dynamiques n'est pas vraiment indispensable
    bien des logiciels savent s'en sortir autrement
    Ok, mais qu'y a t-il alors comme alternative aux librairies dynamiques (à part les librairies statiques) ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Tout d'abord, pourquoi cherches-tu à utiliser des bibliothèques dynamiques ? Pour permettre à l'utilisateur de mettre à jour la bibliothèque (obligatoire avec les bibliothèques sous licence LGPL) sans recompiler l'application dont tu ne veux pas distribuer les sources ? Cela peut se faire simplement en fournissant les fichiers objet.

    Après, ça permet en effet d'éviter d'avoir plusieurs fois le même code sur une machine puisqu'il suffit d'avoir une seule fois la bibliothèque.

Discussions similaires

  1. [POO] C'est quoi une classe en claire...???
    Par Spack dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 26/01/2009, 15h53
  2. Réponses: 16
    Dernier message: 06/06/2007, 12h42
  3. Réponses: 13
    Dernier message: 28/08/2004, 18h43
  4. [langage] Pb POO perl
    Par loothoof dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2004, 12h08
  5. lier un cube à un objet (POO)
    Par Hypnos dans le forum OpenGL
    Réponses: 12
    Dernier message: 26/08/2003, 21h46

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