Partage
  • Partager sur Facebook
  • Partager sur Twitter

POO : C != C++ ? Pourquoi ?

Sujet résolu
    29 août 2013 à 23:43:57

    Bonsoir tout le monde, je viens d'apprendre qu'il est possible de faire de la POO en C alors je ne comprend plus la différence entre le C et le C++ et je suis plutôt perdu (il m'en faut pas beaucoup). Merci de partager votre sagesse ! HO SAGE ZERO PUISSIEZ VOUS M'EBLOUIR DE VOTRE INTELLIGENCE SUPERIEUR ...  et caetera (pour changer et non je ne suis pas fou ! Seulement FATIGUE)

    Veuillez agréer l'expression de ma considération distinguée. (sa veut dire cordialement)

    • Partager sur Facebook
    • Partager sur Twitter
      30 août 2013 à 0:13:31

      Comment utiliser la POO dans le C °_O

      Au contre c'est la POO qui fait la difference entre C et C++ ;)

      -
      Edité par Mohack 30 août 2013 à 0:14:40

      • Partager sur Facebook
      • Partager sur Twitter

      Je suis juste un débutant expérimenté. RTFM | RTFD

        30 août 2013 à 1:42:11

        Avant tout merci beaucoup de m'avoir répondu aussi vite.

        Je m'explique, dans son excellent tutoriel Matthieu Nebra explique, je cite :" Si vous avez fait du C, vous connaissez le mot-clé struct. On peut aussi l'utiliser en C++ pour créer des classes. La seule différence avec le mot-clé class est que, par défaut, les méthodes et attributs sont publics au lieu de privés."

        Il explique également que les classes sont des prototypes de la POO, donc faire une classe est faire un "genre" de POO ?


        Cordialement.

        Ma bible -> Le langage C++ par Bjarne stroustrup (je comprend pas tout mais il sait de quoi il parle !)

        -
        Edité par SP94500 30 août 2013 à 1:45:46

        • Partager sur Facebook
        • Partager sur Twitter
          30 août 2013 à 1:57:44

          Salut

          La POO, c'est plus que de l’encapsulation de données dans des structures. Il faut aussi pouvoir encapsuler des fonctions, faire de l'héritage, polymorphisme, etc. Attention : struct (C++) ~ class (C++), mais struct (C) != struct (C++).

          Même s'il est possible de "simuler" la POO en C, ce n'est pas un langage POO. En particulier parce qu'il ne permet pas d'abstraction forte.

          Et le C++ n'est pas un langage POO, c'est un langage qui permet la POO (mais pas que)

          • Partager sur Facebook
          • Partager sur Twitter
            30 août 2013 à 3:53:27

            Déjà, la POO c'est bien plus que des struct comme cela a été dit.

            Mais la différence majeure entre le C++ et le C, ce n'est pas la POO. C'est le RAII.

            • Partager sur Facebook
            • Partager sur Twitter
            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
              30 août 2013 à 9:04:31

              Lu'!

              J'ajouterais qu'on peut faire des classes et malgré tout avoir une conception pas du tout orientée-objet.

              Mohack a écrit:

              Comment utiliser la POO dans le C °_O

              Ça dépend jusqu'où tu veux aller. Mais typiquement, l'encapsulation est assez simple :

              Fichier header :

              #ifndef _TRUC
              #define _TRUC
              
              typedef struct machin* machin_t;
              
              machin_t create();
              void service(const machin_t m, int* autre_truc);
              void mutant(machin_t m, int a);
              void destroy(machin_t m);
              
              #endif

              Fichier source :

              #include "machin.h"
              
              struct machin{
                int m_a;
                int m_b;
                float m_f;
              };
              
              void fonction_privee(machin_t m){
              
              }
              
              //et on implémente les fonctions publiques.

              Et voilà, on a une manière d'encapsuler les données et les fonctionnalités en C, c'est une première étape pour l'objet. Après, on peut faire des choses pour le polymorphisme mais je vais pas écrire d'exemples parce que c'est très chiant. La question c'est pas "est-ce possible de faire de l'OO en C ?" parce que, oui évidemment, même si c'est la croix et la bannière. Mais plutôt "est-ce que c'est pratique ?", non clairement pas.

              Et puis pour finir, et rebondir sur ce que dit @lmghs, dans le cas présent, tu es obligé d'appeler le create/destroy à la main pour entraîner la libération des ressources (mémoire, socket, mutex, handler de fichier, handler de machin à espresso ...). En C++, non, le destructeur c'est automatique quand on dépile, c'est ça la magie du RAII.

              -
              Edité par Ksass`Peuk 30 août 2013 à 9:07:40

              • Partager sur Facebook
              • Partager sur Twitter

              Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                30 août 2013 à 12:26:15

                C++ se veut compatible C (la plupart du temps un code C fonctionnera parfaitement avec un compilateur C++), une des différences c'est qu'en C++ les struct peuvent contenir des fonctions et hériter d'autre struct. L'héritage n'existe pas en C.

                La différence ne s'arrête pas là, par défaut en C++, le struct se comporte comme en C, tu peux t'en apercevoir lorsque tu effectue un cast, sauf que lorsque ton struct hérite d'une autre struct (rappel : l'héritage n'existe pas en C), le comportement du cast change avec les types d'une même famille. Le polymorphisme n'existe pas en C.

                Il n'est pas possible de faire de la POO en C, car déjà tu n'as pas d'héritage et polymorphisme.

                -
                Edité par Gugelhupf 30 août 2013 à 12:26:54

                • Partager sur Facebook
                • Partager sur Twitter
                Site : https://gokan-ekinci.appspot.com | Miagiste en recherche d'emploi | Profil [Dév. Java SE & EE | Dév. QlikView]
                  30 août 2013 à 12:55:01

                  Gugelhupf a écrit:

                  Il n'est pas possible de faire de la POO en C, car déjà tu n'as pas d'héritage et polymorphisme.

                  Si, tu peux, mais tu ne veux pas, sans déconner.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                    30 août 2013 à 14:00:20

                    Ksass`Peuk a écrit:

                    Gugelhupf a écrit:

                    Il n'est pas possible de faire de la POO en C, car déjà tu n'as pas d'héritage et polymorphisme.

                    Si, tu peux, mais tu ne veux pas, sans déconner.

                    Ce n'est pas parce que tu as des struct en C que c'est de la POO.

                    Tu peux peut-être forcer une techno à avoir un style POO, comme en JavaScript ici ou .

                    Sauf que c'est pas vraiment fait pour et je plains la personne qui sera là pour maintenir cela.

                    En effet je ne veux pas me forcer à adopter un style OO pour un langage fonctionnel (pas de mot-clé class dans le langage, par de POO).

                    PS: Je tiens à préciser que JavaScript c'est de la POO par prototype.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Site : https://gokan-ekinci.appspot.com | Miagiste en recherche d'emploi | Profil [Dév. Java SE & EE | Dév. QlikView]
                      30 août 2013 à 14:20:30

                      Des articles qui expliquent comment faire de la "POO" (*) en C, il y en a (cf google / SO). On peut d'ailleurs allez assez loin dans la simulation de mécanismes du C++ (ie avoir des éléments proche du polymorphisme), sauf que, si pour des éléments de base ça se passe sans trop de mal, dès qu'on complexifie un peu, ça devient rapidement assez peu lisible et utilisable.

                      (*) J'aime de moins en moins cet acronyme personnellement, j'ai de plus en plus l'impression qu'il est vide de sens, ou plus exactement qu'il n'a pas le même sens pour tout le monde (ce qui n'aide pas à la discussion).

                      • Partager sur Facebook
                      • Partager sur Twitter
                      FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
                        30 août 2013 à 14:20:56

                        Gugelhupf a écrit:

                        Ksass`Peuk a écrit:

                        Gugelhupf a écrit:

                        Il n'est pas possible de faire de la POO en C, car déjà tu n'as pas d'héritage et polymorphisme.

                        Si, tu peux, mais tu ne veux pas, sans déconner.

                        Ce n'est pas parce que tu as des struct en C que c'est de la POO.

                        Je parle pas à légère tu sais ? Tu peux jouer d'héritage, de polymorphisme et tout le tralala qui permet la POO en langage C, ça n'a rien à voir avec le fait qu'on aie struct (le post plus haut montre la technique pour encapsuler, mais je précise bien qu'on peut faire le reste quand on est fou). Tu peux aussi faire du méta-programming si ça te chante. Le fait que ce soit ultra chiant ne rend pas ça impossible. 

                        Gugelhupf a écrit:

                        En effet je ne veux pas me forcer à adopter un style OO pour un langage fonctionnel.

                        C est procédural, pas fonctionnel. Par ailleurs, il existe des langages fonctionnels et objets.

                        @Freedom : POO est trop générique sans doute, et regroupe trop de concepts à mon goût.

                        -
                        Edité par Ksass`Peuk 30 août 2013 à 14:21:59

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                          30 août 2013 à 14:40:06

                          Ksass`Peuk a écrit:

                          Gugelhupf a écrit:

                          En effet je ne veux pas me forcer à adopter un style OO pour un langage fonctionnel.

                          C est procédural, pas fonctionnel. Par ailleurs, il existe des langages fonctionnels et objets.

                          "Un langage fonctionnel (parfois appelé langage procédural) est un langage dans lequel [...]" (source).

                          Oui il existe des langages fonctionnels et objets, C++, Python, PHP, Visual Basic .NET...

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Site : https://gokan-ekinci.appspot.com | Miagiste en recherche d'emploi | Profil [Dév. Java SE & EE | Dév. QlikView]
                            30 août 2013 à 14:47:14

                            Mes derniers mots sont :

                            "Le C++ est le C incrementé "

                            Donc faut pas le differencié !Ces sont "deux langages jumaux"!

                            J'ai des question pour kass ,qui jusqu'a la a donné des arguments très covaincant!

                            Pourquoi avoir creer le C++ alors qu'on pouvait nous montrer (nous le dev C) le principe du POO en C?

                            Et les C a t-il des conteneurs autre que "struct"? 

                            La reponse est (surement ) NON ! Car on ne peut appeler un constructeur en C ,donc on ne peut creer un objet!

                            En fait moi je deteste ni l'un ni l'autre !! Puisque j'ai affaire a deux jumaux C/C++ ;)

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Je suis juste un débutant expérimenté. RTFM | RTFD

                              30 août 2013 à 14:51:14

                              Leur définition de procédural n'est pas bonne.

                              fonctionnel -> non impératif ; fonctions qui s’enchainent -> lisp

                              procédural : impératif ; avec des procédures -> Pascal, C, Ada, C++, Eiffel, Python, javascript, php, ...

                              Une excellente lecture sur des sujets connexes -> http://www.codeproject.com/Articles/635264/Open-Multi-Methods-for-Cplusplus11-Part-1

                              • Partager sur Facebook
                              • Partager sur Twitter
                              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                                30 août 2013 à 14:54:20

                                Gugelhupf a écrit:

                                Ksass`Peuk a écrit:

                                Gugelhupf a écrit:

                                En effet je ne veux pas me forcer à adopter un style OO pour un langage fonctionnel.

                                C est procédural, pas fonctionnel. Par ailleurs, il existe des langages fonctionnels et objets.

                                "Un langage fonctionnel (parfois appelé langage procédural) est un langage dans lequel [...]" (source).

                                Oui il existe des langages fonctionnels et objets, C++, Python, PHP, Visual Basic .NET...

                                DAMNED ! Eh ben ça c'est de l'erreur ! Ta source a un gros problème et est fausse.

                                Particulièrement si tu dis à un programmeur Haskell et Ocaml (ou autre) que C est fonctionnel, il va te regarder avec les yeux comme des billes. sans rire. Je te conseille d'aller jeter un oeil aux langages proposés par la page Wikidedia du paradigme fonctionnel, pas que wikipedia soit plus une référence mais pour le coup c'est pas faux.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                  30 août 2013 à 14:58:31

                                  Mohack a écrit:

                                  Donc faut pas le differencié !Ces sont "deux langages jumaux"![...]

                                  En fait moi je deteste ni l'un ni l'autre !! Puisque j'ai affaire a deux jumaux C/C++ ;)


                                  Tu n'as toujours pas compris le C++ donc.

                                  La vraie différence entre ces deux langages, c'est le code à la fin ici: http://alexandre-laurent.developpez.com/cpp/retour-fonctions-ou-exceptions/

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                                    30 août 2013 à 14:59:44

                                    Mohack a écrit:

                                    Mes derniers mots sont :

                                    "Le C++ est le C incrementé "

                                    Donc faut pas le differencié !Ces sont "deux langages jumaux"



                                    Je ne vois pas trop ou tu veux en venir en fait. Il est vrai que le C++ a pour but de simplifier/corriger ce qui entraîne des erreurs en C. Mais ça n'a rien avoir avec du C. Le Java est à mon avis plus proche du C++ que le C.

                                    Mohack a écrit:

                                    J'ai des question pour kass ,qui jusqu'a la a donné des arguments très covaincant!

                                    Pourquoi avoir creer le C++ alors qu'on pouvait nous montrer (nous le dev C) le principe du POO en C?

                                    Et les C a t-il des conteneurs autre que "struct"? 

                                    La reponse est (surement ) NON ! Car on ne peut appeler un constructeur en C ,donc on ne peut creer un objet!

                                    Alors la j'ai l'impression que t'écris ce message depuis un coffee-shop d'Amsterdam.

                                    struct n'a jamais été un conteneur.

                                    Pour le reste, on a l'impression que les débuts de tes phrases ne font pas partie de la même phrase que la fin.

                                    EDIT : au passage puisque t'as pas l'air d'avoir lu ce que je t'ai dis sur l'autre topic, je m'autoquote

                                    Mohack : "Tout pour te dire que le C++ est le C avec des classes , des templates etc... Ce qui facilite enorme le codage et sa comprehension !!"

                                    Cytosol --> bullshit. Le C++ est le C++. si tu veux des classes tu peux le faire en C orienté objet. C'est lourd mais c'est faisable.


                                    Deux langages bien différents malgré ce que certains se forcent à dire... Peut-être qu'un codeur C te dira que le C++ n'est "qu'une amélioration du C", un codeur C++ te dira que c'est bien un langage différent. Il y à certes des similitudes, un code C compilera en C++, mais un langage ne se résume pas à sa syntaxe. Le style de programmation est totalement différent en C++ qu'en C, et faire C -> C++ amène à faire beaucoup plus d'erreurs que si on commence directement par le C++.

                                    Mohack : "Ben dans le C++ ,ton code de jeu serait bien structuré avec la POO o_O !!"

                                    Cytosol : Total bullshit. Vu la ou t'en es [le PO du thread], tu vas suivre le tutoriel C++, si tu te lances tout de suite après dans la programmation de ton jeu autant le faire en C, parce que sinon bonjour les classes monolithiques, l'héritage à outrance, et les problèmes évidents de conception qui à un moment donné t'obligeront à arrêter le développement pour tout refactorer.



                                    -
                                    Edité par Cytosol 30 août 2013 à 15:11:27

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      30 août 2013 à 15:01:19

                                      Mohack a écrit:

                                      "Le C++ est le C incrementé "

                                      Donc faut pas le differencié !Ces sont "deux langages jumaux"!

                                      Heureusement, ce n'est plus vrai. C++ aujourd'hui est C++ et plus du C amélioré. Ce sont deux langages complètement différents

                                      Mohack a écrit:

                                      Pourquoi avoir creer le C++ alors qu'on pouvait nous montrer (nous le dev C) le principe du POO en C?

                                      C++, ce n'est pas que l'objet. C'est aussi des possibilités de fonctionnel, de la programmation générique, etc ... Et comme l'a déjà dit @lmghs, C++ c'est surtout le RAII.

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                        30 août 2013 à 15:17:31

                                        Donc en gros tout ce que vous me dite est :

                                        "On peut faire tout ce que le C++ nous offre en C"

                                        Dites donc vous me mettez des doutes! :(

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Je suis juste un débutant expérimenté. RTFM | RTFD

                                          30 août 2013 à 15:22:49

                                          Mohack a écrit:

                                          Donc en gros tout ce que vous me dite est :

                                          "On peut faire tout ce que le C++ nous offre en C"

                                          Dites donc vous me mettez des doutes! :(

                                          Si c'est ta conclusion, relis plusieurs fois le topic.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            30 août 2013 à 15:30:13

                                            lmghs a écrit:

                                            Leur définition de procédural n'est pas bonne.

                                            fonctionnel -> non impératif ; fonctions qui s’enchainent -> lisp

                                            procédural : impératif ; avec des procédures -> Pascal, C, Ada, C++, Eiffel, Python, javascript, php, ...

                                            Une excellente lecture sur des sujets connexes -> http://www.codeproject.com/Articles/635264/Open-Multi-Methods-for-Cplusplus11-Part-1

                                            Je ne connais pas Lisp. Donc en gros, le terme "procédural" est synonyme de "impératif", et une procédure est une fonction qui ne retourne pas de valeur (void).

                                            Mais JavaScript, et autres langages que tu cites pour procédural, peuvent retourner des valeurs et la récursivité est possible. Donc tous ces langages sont fonctionnel et procédural... sauf Lisp qui est que fonctionnel ?

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Site : https://gokan-ekinci.appspot.com | Miagiste en recherche d'emploi | Profil [Dév. Java SE & EE | Dév. QlikView]
                                              30 août 2013 à 15:38:59

                                              Non, procédural englobe impératif.

                                              Impératif, c'est des instructions. Fais machin, fais ceci, change l'état de truc, etc.

                                              Du procédural, c'est avec des sous-routines. Quand on rentre dedans, on ressort par où on est arrivés.

                                              De l'impératif non procédural, c'est du code spaghetti, à la façon des vieux BASIC si on n'utilisait pas gosub, mais que des goto.

                                              Dans les langages fonctionnels, c'est plus tourné mathématiques: des fonctions s'enchainent, il n'existe pas vraiment de notion de variable (dont l'état va changer). Certains disent que c'est plus intuitif que l'impérativo-procédural. Perso, quand je cuisine, ou donne des directions à quelqu'un qui cherche son chemin, je fais de l'impératif. Mais bon.

                                              En C++11, constexpr oriente les fonctions vers du fonctionnel : pas de variables, pas de changement d'état, les fonctions doivent toute renvoyer des valeurs et ne rien faire d'autre.

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                                                30 août 2013 à 15:43:00

                                                @Gugelhupf: La différence sur fonctionnel/impératif est sur la notion d'instruction/expression/mémoire. Un langage impératif est caractérisé par un état et une suite d'instruction qui fait évoluer cet état. Un langage fonctionnel est caractérisé par l'absence d’état et la notion d'expression et son évaluation.

                                                Sur le fond impératif/fonctionnel s'opposent, tu es l'un ou l'autre, mais pas les deux. Ceci dit il s'avère que des features proposés par des langages sont plus ou moins associés aux paradigmes de ces langages et qu'ainsi lorsqu'un autre langage propose une feature proche, on finit par dire "il permet du fonctionnel".

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
                                                  30 août 2013 à 15:50:22

                                                  Pour ceux qui disent qu'on ne peux pas faire de l'orienté objet en C, je pense que le projet GTK vous montre que c'est tout à fait possible et tout à fait propre :) .
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    30 août 2013 à 16:10:32

                                                    En faisant une petite recherche sur google ,j'ai vu et entendue de termes qui me semble un peu fou!

                                                    Premierement j'ai vu :

                                                    Le C est un langage procédural (terme qui j'ignore completement)

                                                    Le C++ est un langage Orienté objets tout comme le PHP et Java ... (ca je le connaissais ;) )

                                                     Donc en relisant ,tout ce grand debat :p , je viens d'en conclure :

                                                    Le C et C++ sont en finale deux langages très differents . Meme leur facon de programmer sont differents !

                                                    Seule la syntaxe se ressemble!Le C++ a garder la syntaxe du C tout en ajoutant d'autres fonctionnalités et bien sur en facilitant et corrigant quelques notions .

                                                    Au final :

                                                    Le C++ est du C++ et le C est du C

                                                    Euuhh oui meme si leur syntaxe se covoisine !

                                                    Voila ce que moi je conclus :

                                                    Si tu sais faire du C++ ,tu saura faire du C (dans mon cas je appris le C++ est je connais aussi le C [je n'ai pas lu son tuto])

                                                    Le cas contraire serait bien impossible !

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Je suis juste un débutant expérimenté. RTFM | RTFD

                                                      30 août 2013 à 16:21:12

                                                      Merci de m'avoir répondu, mes connaissances étant limitées.

                                                      Je vais juste retenir que l'héritage multiple fait la différence entre le C et le C++ pour me permettre d'avancer sans trop me prendre la tête et finir par comprendre toutes les nuances.

                                                      Cordialement

                                                      -
                                                      Edité par SP94500 30 août 2013 à 16:35:20

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        30 août 2013 à 17:13:50

                                                        ???? o_O

                                                        On a parlé de l'héritage multiple ? La différence, je le dis depuis le début, certes avec des messages de 2 phrases, c'est la gestion des ressources et des erreurs. Soit, le RAII. Tout le reste c'est du sucre syntaxique. Le RAII, c'est une philosophie de développement radicalement différente.

                                                        C'est cette seule différence qui fait que de faire du C me casse les pieds.

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                                                          30 août 2013 à 18:50:05

                                                          Mohack a écrit:

                                                          1) Le C est un langage procédural (terme qui j'ignore completement)

                                                          Le C++ est un langage Orienté objets tout comme le PHP et Java ... (ca je le connaissais ;) )

                                                          2) Si tu sais faire du C++ ,tu saura faire du C (dans mon cas je appris le C++ est je connais aussi le C [je n'ai pas lu son tuto])


                                                          1) Tu y es presque C++ est multi-paradigme : tu peux y être objet, procédural, fonctionnel (dans une certaine mesure seulement), générique et d'autres petites choses que je suppose.

                                                          2) Tu sauras faire du C ... mais en galérant beaucoup car beaucoup des mécanismes du C++ n'y existent plus. Donc il faudra que tu sois beaucoup plus rigoureux. En l'occurrence, un très bon programmeur C++ sera éventuellement un bon programmeur C et il peut devenir très bon programmeur C avec du travail. Pour le programmeur C c'est plus compliqué de devenir très bon programmeur C++ parce qu'il aura généralement tendance à vouloir en faire trop.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                                            31 août 2013 à 1:29:35

                                                            lmghs a écrit:

                                                            Non, procédural englobe impératif.

                                                            Impératif, c'est des instructions. Fais machin, fais ceci, change l'état de truc, etc.

                                                            Du procédural, c'est avec des sous-routines. Quand on rentre dedans, on ressort par où on est arrivés.

                                                            De l'impératif non procédural, c'est du code spaghetti, à la façon des vieux BASIC si on n'utilisait pas gosub, mais que des goto.

                                                            Dans les langages fonctionnels, c'est plus tourné mathématiques: des fonctions s'enchainent, il n'existe pas vraiment de notion de variable (dont l'état va changer). Certains disent que c'est plus intuitif que l'impérativo-procédural. Perso, quand je cuisine, ou donne des directions à quelqu'un qui cherche son chemin, je fais de l'impératif. Mais bon.

                                                            En C++11, constexpr oriente les fonctions vers du fonctionnel : pas de variables, pas de changement d'état, les fonctions doivent toute renvoyer des valeurs et ne rien faire d'autre.

                                                            Merci @lmghs, @Freedom pour l'explication, je comprends mieux.

                                                            Du coup je viens d'apprendre un peu Lisp, ça me fait penser au langage DAX de Microsoft, ce sont des expressions qui s'emboitent ou s'encapsule (pas vraiment des fonctions qui s'enchainent :o ). Beaucoup de parenthèses, j'ai eu du mal à m'y retrouver par moment :-°

                                                            J'ai l'impression que les langages fonctionnelles ne doivent pas êtres simples à maintenir, surtout si elles sont longues... et puis commencer à lire du code à partir du milieu :euh:

                                                            @Ksass`Peuk -> Du coup un exemple de langage fonctionnel et objet à la fois (donc multi-paradigme) -> OCaml
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Site : https://gokan-ekinci.appspot.com | Miagiste en recherche d'emploi | Profil [Dév. Java SE & EE | Dév. QlikView]
                                                              31 août 2013 à 6:39:20

                                                              "gbdivers" me repond : "La POO, c'est plus que de l’encapsulation de données dans des structures. Il faut aussi pouvoir encapsuler des fonctions, faire de l'héritage, polymorphisme, etc. Attention : struct (C++) ~ class (C++), mais struct (C) != struct (C++)." Cela confirme les propos de wikipedia concernant ce qui fait que le C++ se démarque des langages populaires comme le C, JAVA ou C# est l'héritage multiple, ton argument aussi est intéressant cependant.

                                                              Cordialement,

                                                              Je m'excuse pour l'orthographe mais vue l'heure ...

                                                              -
                                                              Edité par SP94500 31 août 2013 à 6:41:31

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              POO : C != C++ ? Pourquoi ?

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown