Le langage de programmation C est-il orienté object?

Je parlais de C et de C ++ avec un collègue. Il a affirmé que C était orienté object, mais j’ai prétendu que ce n’était pas le cas. Je sais que vous pouvez faire des choses orientées object en C, mais C ++ est un vrai langage orienté object.

Quelles sont vos pensées?

En outre, cela a déclenché une discussion sur qui décide ce que signifie être orienté object et qu’il est difficile de dire ce que signifie réellement orienté object. Que pensez-vous de ça?

Si par “C est orienté object?” vous voulez dire “C est conçu avec des installations spécifiquement pour soutenir la programmation orientée object?” alors, non, C n’est clairement pas orienté object.

Vous pouvez programmer dans un style orienté object dans plus ou moins n’importe quelle langue. (Je pense que le polymorphism d’exécution – c’est-à-dire les méthodes virtuelles – nécessite un langage qui prend en charge les pointeurs de fonction.)

Voici quelques exemples:

C n’est pas orienté object. C’était l’object même du ++

En ce qui concerne la définition de ce qu’il faut pour être orienté object: consultez wikipedia .

Personnellement, si elle prend en charge l’inheritance, l’encapsulation et le polymorphism, alors c’est votre intérêt. Une autre clé est d’avoir de bons mots clés comme classe et object ont tendance à aider …

Exemples de langages orientés object réels (non concluants): Smalltalk, Java, c #, Python, Ruby, C ++.

En outre, il est possible d’avoir des extensions pour fournir des fonctionnalités OO telles que PHP, Perl, VB (not. Net), …

Les vrais programmeurs peuvent écrire du code orienté object dans TOUT langage.

Mais non, C n’est pas un langage “orienté object”. Il n’a pas de concept de classes, d’objects, de polymorphism, d’inheritance.

La confusion peut être que C peut être utilisé pour implémenter des concepts orientés object tels que polymorphism, encapsulation, etc., ce qui peut amener votre ami à croire que C est orienté object. Le problème est que pour être considéré comme un langage de programmation orienté object, ces fonctionnalités doivent être intégrées au langage. Ce qu’ils ne sont pas.

  1. C n’est pas orienté object au sens ssortingct, car il n’a pas de capacité orientée object prise en charge par la syntaxe intégrée telle que la classe, l’inheritance, etc.

Mais si vous connaissez le truc, vous pouvez facilement y append une fonctionnalité orientée object en utilisant simplement struct, un pointeur de fonction et un pointeur automatique. DirectFB est une telle bibliothèque C écrite de manière orientée object. La mauvaise chose est qu’elle est plus sujette aux erreurs car elle n’est pas régie par la syntaxe et la vérification du type de compilation. Il est basé sur la convention de codage à la place.

par exemple

  IDirectFB/*a typedef of a struct*/ *dfb = NULL; IDirectFBSurface/*another typedef of a struct*/ *primary = NULL; DirectFBCreate (&dfb); /*factory method to create a struct (eg dfb) with pointers to function and data. This struct is like an object/instance of a class in a language with build-in syntax support for object oriented capability */ dfb->SetCooperativeLevel/*function pointer*/ (dfb/*self pointer to the object dfb*/, DFSCL_FULLSCREEN); dsc.flags = DSDESC_CAPS; dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING; dfb->CreateSurface/*function pointer, also a factory method to create another object/instance */ ( dfb/*self pointer to the object dfb*/, &dsc, &primary/*another struct work as object of another class created*/ ); primary->GetSize/*function pointer*/ (primary/*self pointer to the object primary*/, &screen_width, &screen_height); 

2 C ++ est orienté object car il prend en charge de manière intégrée les fonctionnalités orientées object telles que la classe et l’inheritance. Mais certains arguent que ce n’est pas un langage orienté object complet ou pur, car il autorise la syntaxe C (syntaxe de programmation structurelle). Je me souviens également que C ++ manque de quelques fonctionnalités orientées object, mais que je ne m’en souviens pas exactement.

C n’est pas un langage OO dans aucune définition de “OO” et “langage”.

Il est assez facile d’utiliser C comme langage d’implémentation pour un composant qui fournit une API OO à ses clients. Le système X Windows est essentiellement un système OO à inheritance unique vu de son API, mais tout un bazar de C lors de la visualisation de son implémentation.

À moins que votre ami ne parle d’Objectif C (un sur-ensemble OO de C), alors non, C n’est pas un langage OO. Vous pouvez implémenter les concepts OO en utilisant C (c’est ce qu’a fait l’ancien compilateur cfront C ++, il a traduit C ++ en C), mais cela ne fait pas de C un langage OO car il ne prend pas spécifiquement en charge les techniques OO standard telles que le polymorphism ou l’encapsulation.

Oui, vous pouvez écrire un style OO de logiciel en C, en particulier avec une utilisation généreuse (abstraite) de macros, mais en tant que personne ayant vu les résultats de certaines de ces tentatives, je suggérerais fortement d’utiliser un langage mieux adapté.

Les vrais programmeurs peuvent écrire du code orienté object dans TOUT langage.

J’ai vu Cobol orienté object. Cobol qui appelle Cobol. Voulez-vous appeler ces programmeurs “Real”?

C n’est pas un langage orienté object. C est un langage général, impératif, supportant une programmation structurée. Comme le langage C n’est pas orienté object, le C ++ a donc été créé pour permettre la fonctionnalité POO et OOP est un modèle de langage de programmation organisé en objects. Un langage pour avoir la fonctionnalité POO nécessite de mettre en œuvre certains principes de POO. Peu d’entre eux sont l’inheritance, le polymorphism, l’abstraction, l’encapsulation.

Non, ce n’est pas votre ami qui a tort.

La réponse peut être oui ou non , selon:

  • si vous demandez “C est un langage orienté object?” , la réponse est “non” car il n’a pas de constructeurs orientés object, de mots-clés, de sémantique, etc.

  • si vous avez l’intention “puis-je réaliser la POO en C?” , la réponse est oui, car la programmation orientée object n’est pas seulement une exigence d’un langage, mais aussi un moyen de “penser”, une approche de la programmation, avant de toucher à un langage ou à un autre. Toutefois, la mise en œuvre de la programmation orientée object en C (ou de toute autre langue non conçue de manière native pour être une programmation orientée object) sera sûrement “forcée” et beaucoup plus difficile à gérer que toute autre langue cible, ainsi certaines limitations sont attendues.