Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment fonctionne l'orienté objet bas niveau

Sujet résolu
    16 janvier 2018 à 23:43:00

    Bonjour,

    j'aimerais savoir comment fonctionne (ou est traduit) du code haut niveau orienté objet (n'importe quel langage) en langage assembleur, ou autres langages plus bas niveau (comme du C par exemple).

    J'imagine que le procédé doit être bien plus différent et complexe que pour de l'impératif par exemple, non ?

    Auriez-vous une idée de comment cela fonctionne :) ?

    Merci, et bonne soirée !

    • Partager sur Facebook
    • Partager sur Twitter
    Le doute est le commencement de la sagesse
      17 janvier 2018 à 8:50:06

      Lu'!

      Geralt de Riv a écrit:

      J'imagine que le procédé doit être bien plus différent et complexe que pour de l'impératif par exemple, non ?

      Non, c'est exactement pareil. Il y a juste le polymorphisme à gérer, ce qui n'a rien de très compliqué : on ajoute une information de type pour les hiérarchies de classes et quand un appel de méthode apparaît, on ajoute un test qui regarde le type et appelle la méthode surchargée correspondante.

      • Partager sur Facebook
      • Partager sur Twitter

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

        17 janvier 2018 à 14:07:02

        Merci Ksass`Peuk :)

        Donc, si je comprends bien, le code généré n'est rien de plus qu'un... assemblage, une structure de données (initialisée ou non en fonction des champs) ?

        • Partager sur Facebook
        • Partager sur Twitter
        Le doute est le commencement de la sagesse
          17 janvier 2018 à 14:22:00

          C'est compilé exactement comme une combinaison structure + fonction, sauf qu'un appel de fonction peut nécessiter d'ajouter un test de typage.

          • Partager sur Facebook
          • Partager sur Twitter

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

            17 janvier 2018 à 15:06:01

            Ok, merci.

            Mais je ne vois pas trop ce que tu veux dire par "test de typage", et surtout le pourquoi ?

            • Partager sur Facebook
            • Partager sur Twitter
            Le doute est le commencement de la sagesse
              17 janvier 2018 à 15:18:50

              Pour expliciter le polymorphisme. Si j'ai un code comme :

              class Base {
              public:
                virtual void bar(){
                  std::cout<<"Base::bar"<<std::endl;
                }
              };
              
              class Derived : public Base {
              public:
                void bar() override {
                  std::cout<<"Derived::bar"<<std::endl;
                }
              };
              
              void foo(Base& b){
                b.bar();
              }

              Au runtime, lors d'un appel à "foo", si b est de type :

              • Base, ça affiche "Base::bar"
              • Devired, ça affiche "Derived::bar"

              Donc il faut mettre le code qui va permettre de prendre cette décision au runtime. Soit par un test de type, soit en C++ par exemple en ayant un pointeur vers la table de fonction virtuelle qui va contenir le bon pointeur de fonction.

              • Partager sur Facebook
              • Partager sur Twitter

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

                17 janvier 2018 à 15:27:48

                Haa ! Je comprend mieux maintenant !

                Merci beaucoup pour toutes tes explications, je passe le sujet en [résolu] !

                Bonne fin de journée :)

                • Partager sur Facebook
                • Partager sur Twitter
                Le doute est le commencement de la sagesse

                Comment fonctionne l'orienté objet bas niveau

                × 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