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

C Discussion :

Différence entre langage orienté objet et langage procédural


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Différence entre langage orienté objet et langage procédural
    Je suis un étudiant et mon prof m'a dit le langage C est un langage procédural qui est différent des langages orientés objet tel que le JAVA
    Mais je comprends pas la différence merci de m'expliquer avec des exemples

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    tu aurais dû écouter ton prof...

    Sinon va voir sur le forum Général Développement, il y a un débat sur ce sujet...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    je vous demande la différence qui est entre langage procédural et orienté objet svp avec les exemples

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    dans un cas, on définit des procédures, dans l'autre, des objets.

    Tu peux donc commencer par chercher ce qu'est une procédure en informatique, ainsi que ce qu'est un objet.

    Contrairement à ce qu'on en dit, ces deux propriétés ne sont pas contradictoires.

    le C++, le C# ou le python sont les deux (entre autres choses).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Avant, il y avait des langages listings (COBOL par exemple): on prend la première ligne pour aller à la dernière ligne.

    Mais on s'est aperçu que dans ce "listing"/ bloc, il y a des redondances. Par exemple, pour afficher ou saisir des données, on fait quasi tout le temps la même chose.

    D'où l'idée des langages procéduraux: on va découper ce [gros] bloc et sortir des traitements afin de pouvoir les réutiliser.

    L'idée des langages orienté objet: c'est d'aller encore plus loin. On va encapsuler dans une classe à la fois les traitements, mais aussi les variables qui s'y rapportent.
    On a dû te parler aussi d'un système de messages entre les objets

    Je pense qu'on a fait cela pour des raisons de maintenance/ évolution. Parce que l'on a sorti les traitements du [gros] bloc, on a dû créer des variables globales pour paramétrer/ effectuer ces traitements. Or 1) ceci crée plus de variables 2) on pouvait les modifier et cela posait des problèmes (d'où l'idée de l'encapsulation publique, privée, protégée)

  6. #6
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 460
    Points : 6 064
    Points
    6 064
    Par défaut
    Un des grands principes de la programmation orientée objet est l'encapsulation.

    Exemple en langage C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // Extrait de String.h
    typedef struct String
    {
        char* m_data;
            // S'il vous plaît, n'utilisez pas directement m_data.
            // Passez par une fonction de "String.h".
            // Comme ça, je pourrai changer le contenu de cette structure
            // (par exemple pour implémenter la "small string optimization")
            // et l'implémentation des fonctions déclarées dans "String.h"
            // sans que vous n'ayez besoin de changer votre code.
            // Le respect de ce principe s'appelle l'encapsulation.
    } String;
        // En programmation orientée objet, on dit que String est une classe
        // et que ses instances sont des objets.
     
    void String_Constructor(String* string);
    void String_Destructor(String* string);
     
    static inline bool String_IsEmpty(const String* string)
    {
        assert(string != NULL);
        return string->m_data != NULL && string->m_data[0] != '\0';
    }
    Deux autres grands principes de la programmation orientée objet sont l'héritage et le polymorphisme d'inclusion.
    Exemple très simplifié en langage C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    // Extrait de ObjetGeometrique.h :
     
    typedef struct ObjetGeometrique
    {
        void (*m_virtual_transate)(struct ObjetGeometrique*, double, double);
    } ObjetGeometrique;
     
    static inline void ObjetGeometrique_Virt_Translate(ObjetGeometrique* objet, double x, double y)
    {
        (objet->m_virtual_transate)(objet, x, y);
    }
    // Le premier argument de la fonction ObjetGeometrique_Virt_Translate
    // peut être l'adresse de n'importe quelle structure dont
    // le tout premier membre est une structure de type ObjetGeometrique.
    // Une telle structure peut être vue comme un sous-type de ObjetGeometrique.
    // Comme la fonction accepte tous les sous-types de ObjetGeometrique,
    // on parle de polymorphisme d'inclusion ou de polymorphisme par sous-typage.
     
    // Extrait de ObjetPoint.h :
     
    typedef struct ObjetPoint
    {
        ObjetGeometrique parent;
        double m_x;
        double m_y;
    } ObjetPoint;
    // ObjetPoint est un sous-type de ObjetGeometrique
    // et possède le contenu de ObjetGeometrique.
    // On dit que ObjetPoint dérive de ObjetGeometrique.
     
    static inline void ObjetPoint_Translate(ObjetPoint* point, double x, double y)
    {
        assert(point != NULL);
        point->m_x += x;
        point->m_y += y;
    }
     
    static inline void ObjetPoint_Constructor(ObjetPoint* point)
    {
        assert(point != NULL);
        point->parent.m_virtual_transate = &ObjetPoint_Translate;
            // Ainsi, quand on appellera ObjetGeometrique_Virt_Translate(point, x, y),
            // cela appellera ObjetPoint_Translate(point, x, y).
        point->m_x = 0;
        point->m_y = 0;
    }
    Dans la réalité, dans la classe parente, on n'aura pas un pointeur vers une seule fonction, mais un pointeur vers un tableau de fonctions appelé table virtuelle.

    Le problème du langage C est qu'il n'est vraiment pas pratique pour faire de la programmation orientée objet.

    En C++ et en Java, pour l'encapsulation, à la place d'écrire un commentaire "S'il vous plaît", on peut mettre la visibilité des variables membres en private pour que seules les fonctions associées à la classe puissent accéder à ces variables membres.
    En langage C, pour vraiment faire de l'encapsulation, on peut utiliser la technique du pointeur opaque, mais elle réduit les performances.

    En C++ et en Java, pour l'héritage et le polymorphisme, au lieu de coder à la main une table virtuelle et des pointeurs de fonctions, le compilateur le fait à notre place.
    Pour aller plus loin en C++, lire : FAQ C++ L'héritage.

Discussions similaires

  1. Direct3D langage orienté objet
    Par eemii dans le forum DirectX
    Réponses: 8
    Dernier message: 20/06/2010, 19h50
  2. Langages orienté objet indispensable?
    Par djoulju dans le forum Débuter
    Réponses: 7
    Dernier message: 04/05/2010, 11h37
  3. Réponses: 0
    Dernier message: 06/06/2008, 09h41
  4. régles de passage d'un diagramme de classe à un langage orienté objet
    Par lasmarmann dans le forum Diagrammes de Classes
    Réponses: 7
    Dernier message: 22/01/2007, 19h16
  5. VBA est-il un langage orienté objet ?
    Par Kcirtap dans le forum Général VBA
    Réponses: 5
    Dernier message: 06/12/2005, 10h46

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