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 :

Débat POO


Sujet :

Langage C++

  1. #1
    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
    Par défaut Débat POO
    Citation Envoyé par Frifron Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    initialisation de l'intervalle
    saisie de la valeur
    si valeur est dans l'intervalle 
        faire
            valeur_courante = (debut_intervalle + fin_intervalle) / 2
            si (valeur < valeur_courante)
                fin_intervalle = valeur_courante
            sinon
                debut_intervalle = valeur_courante
        tant que valeur_courante != valuer
        La valeur est valeur_courante
    Ce qui serait intéressant, c'est de remplacer cet algo assez procédural par une approche objet (j'ai pas encore réfléchi à ce que ça pourrait être). Après tout, on est dans un forum C++ (donc, j'imagine que le cours est du C++) et pas de C.

  2. #2
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Ce qui serait intéressant, c'est de remplacer cet algo assez procédural par une approche objet (j'ai pas encore réfléchi à ce que ça pourrait être). Après tout, on est dans un forum C++ (donc, j'imagine que le cours est du C++) et pas de C.
    Ah non, pas d'approche objet pour les algorithmes. D'ailleurs, ça veut dire quoi ?

    La POO, c'est une manière de structurer ses programmes, problème orthogonal à un problème algorithmique.

    Et le C++ n'implique pas de faire de l'objet, on peut rester en procédural. Tous les algorithmes de la STL sont des fonctions libres. C'est très bien comme ça.

    On est pas dans le dogme comme en Java.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Par défaut
    Oui l'approche objet est inexistante dans l'algo mais bon je ne vois ni comment ni pourquoi mettre de l'objet ici.

    La ou l'OO sera interessant, c'est si on va un peu plus loin est qu'on met en place un algorithme de recherche dichotomique sur un conteneur d'objets triés (et puis comparer les résultats avec le classique find)
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  4. #4
    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
    Par défaut
    Citation Envoyé par HanLee Voir le message
    Ah non, pas d'approche objet pour les algorithmes. D'ailleurs, ça veut dire quoi ?

    La POO, c'est une manière de structurer ses programmes, problème orthogonal à un problème algorithmique.

    Et le C++ n'implique pas de faire de l'objet, on peut rester en procédural. Tous les algorithmes de la STL sont des fonctions libres. C'est très bien comme ça.

    On est pas dans le dogme comme en Java.
    Pour continuer sur le troll avec HanLee et Frifron, je maintiens: ça serait intéressant de l'aborder sur le paradigme purement objet, car tant qu'à programmer avec un langage objet autant raisonner en objet.
    "La POO, c'est une manière de structurer ses programmes, problème orthogonal à un problème algorithmique." Oui mais la pratique montre qu'on finit par programmer comme on a pensé l'algo surtout en C++ où on finit par implémenter du C maquillé en C++ et on ne s'oblige pas à transcrire un algo dans une approche OO.

  5. #5
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Pour continuer sur le troll avec HanLee et Frifron, je maintiens: ça serait intéressant de l'aborder sur le paradigme purement objet, car tant qu'à programmer avec un langage objet autant raisonner en objet.
    "La POO, c'est une manière de structurer ses programmes, problème orthogonal à un problème algorithmique." Oui mais la pratique montre qu'on finit par programmer comme on a pensé l'algo surtout en C++ où on finit par implémenter du C maquillé en C++ et on ne s'oblige pas à transcrire un algo dans une approche OO.
    Non, le C++ n'est pas un langage exclusivement objet, il est pragmatique (bien que très orienté impératif).
    En C++, on est libre de nos styles de programmation. On est pas en Java/C# (bien qu'ils commencent à intégrer beaucoup de choses des langages fonctionnels, et ça c'est bien).

    Enfin, j'ai pas compris si le but c'était de structurer le programme dont l'intérêt est de rejouer un algorithme, et ceci dans une optique POO, ou bien de structurer notre fonction libre, en l'adaptant sous forme POO-esque.

    - Dans le premier cas, OK, tu peux ignorer tout ce qui suit (1er cas = mettre sous l'approche POO, toute la partie mélange de l'algorithme avec l'input).
    Ce serait très limité quand même, vu la taille du problème.

    C'est comme tout domaine scientifique, chaque approche a ses domaines de prédilection, et les problèmes minuscules comme ceux-ci bah ne donnent pas un avantage flagrant. D'ailleurs, la POO n'est pas encore la panacée...

    - Dans le deuxieme cas (= formuler l'algorithme de dichotomie uniquement, c'est-à-dire non couplé avec l'input, sous forme POO) :

    Ca veut dire que tu voudrais transformer std::lower_bound en mode POO ?
    Autre question, std::sin, std::cos, std::log et consort. devraient être dans une classe donc ? Ca en deviendrait ridicule.

    POO ou pas, la seule différence, ce sera le type de données que tu manipules, et qui manipule quoi.
    Typiquement, tu n'auras que des objets, et des méthodes...
    En général, on s'autorise des types primitifs quand même.

    Un algorithme comme ça, c'est du pur calcul.

    Et au final, tu te retrouveras avec une méthode statique, et donc tu auras créé une classe de manière "hypocrite".
    Preuve que cette classe n'a pas vraiment lieu d'exister...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 17
    Par défaut
    Je vous signale que le premier message de ce topic était de demander simplement un peu d'aide, et là... ça part un peu en troll

    Le programme marche nickel

    Et merci encore les gens

  7. #7
    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
    Par défaut
    Citation Envoyé par HanLee Voir le message
    Non, le C++ n'est pas un langage exclusivement objet, il est pragmatique (bien que très orienté impératif).
    En C++, on est libre de nos styles de programmation. On est pas en Java/C# (bien qu'ils commencent à intégrer beaucoup de choses des langages fonctionnels, et ça c'est bien).
    Oui, mais dans le cadre d'un cours/TD sur C++, on peut se contraindre à l'aborder uniquement en approche OO. Ca reste un exercice de style.

    Citation Envoyé par HanLee Voir le message
    Enfin, j'ai pas compris si le but c'était de structurer le programme dont l'intérêt est de rejouer un algorithme, et ceci dans une optique POO, ou bien de structurer notre fonction libre, en l'adaptant sous forme POO-esque.
    L'idée n'est plus de raisonnée en disant 'je cherche un algo pour trouver un nombre à partir d'une saisie' mais de le reformuler avec le vocabulaire OO.

    Citation Envoyé par HanLee Voir le message
    C'est comme tout domaine scientifique, chaque approche a ses domaines de prédilection, et les problèmes minuscules comme ceux-ci bah ne donnent pas un avantage flagrant. D'ailleurs, la POO n'est pas encore la panacée...
    Je répète, l'intérêt est alors pour l'exercice de style.

    Citation Envoyé par HanLee Voir le message
    - Dans le deuxieme cas (= formuler l'algorithme de dichotomie uniquement, c'est-à-dire non couplé avec l'input, sous forme POO) :

    Ca veut dire que tu voudrais transformer std::lower_bound en mode POO ?
    Autre question, std::sin, std::cos, std::log et consort. devraient être dans une classe donc ? Ca en deviendrait ridicule.
    Réecriture des fonctions mathématiques

    Citation Envoyé par HanLee Voir le message
    Et au final, tu te retrouveras avec une méthode statique, et donc tu auras créé une classe de manière "hypocrite".
    Preuve que cette classe n'a pas vraiment lieu d'exister...
    Dans ce cas, effectivement, tu auras transcrit une solution 'C' en 'C++'.

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Euh... Il me semble que métaprogrammation et POO sont deux choses différentes...

    De plus, c'est bon pour du compile-time, mais pas pour des données dépendant de l'exécution...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Euh... Il me semble que métaprogrammation et POO sont deux choses différentes...
    C'était pour illustrer qu'il n'est pas toujours ridicule de réécrire certaine fonction de base.

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    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 292
    Par défaut
    Il y a une erreur de compréhension que je vois de plus en plus souvent (effet troupeau ?) et qui est revenue ici.

    OO et impératif ne sont pas deux choses qui s'opposent. C'est au contraire parfaitement orthogonal. Le modèle OO du C++ EST impératif. D'autres langages vont mixer OO et fonctionnel.

    Ce n'est pas parce que la recherche dichotomique va travailler sur un TAD, qui effet de bord du C++ sera une classe, que son algo sera OO pour autant.

    PS: je vous invite à consulter la livre d'algorithmie qui est maintenu par A.Stepanov (il est disponible en ligne sur son site)
    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...

Discussions similaires

  1. [Débat] Technologie .NET vs JAVA
    Par neo.51 dans le forum Débats sur le développement - Le Best Of
    Réponses: 1047
    Dernier message: 14/01/2019, 16h15
  2. Débat sur l'I.A (Intelligence Artificielle)
    Par Anonymous dans le forum Intelligence artificielle
    Réponses: 457
    Dernier message: 05/07/2016, 01h11
  3. Débat : quelle distribution Linux choisir pour débuter ?
    Par Anonymous dans le forum Distributions
    Réponses: 227
    Dernier message: 18/02/2015, 10h09
  4. Réponses: 87
    Dernier message: 06/07/2011, 15h33
  5. Débat sur la POO
    Par Just-Soft dans le forum Langage
    Réponses: 8
    Dernier message: 26/11/2008, 11h58

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