La programmation orientée objet ne concerne pas les fonctionnalités de syntaxe, c'est une philosophie de codage et de conception. À sa base se trouve le concept d'un objet , qui est une construction qui regroupe l'état avec des routines pour agir sur lui (ou, selon votre point de vue, les réponses aux messages). L'autre aspect important de la POO est l' encapsulation : envelopper les détails d'implémentation dans des structures opaques et les connecter via des interfaces bien définies. Presque tout le reste de la théorie de la POO remonte à ces deux principes fondamentaux.
Ainsi, tout langage qui peut en quelque sorte modéliser des objets (entités qui contiennent à la fois des données et du code) et l'encapsulation peut être utilisé pour faire de la POO. Par exemple, en C, vous pouvez utiliser des pointeurs de fonction pour stocker des fonctions dans des structures, et vous pouvez utiliser le système de fichiers en-tête / source pour réaliser l'encapsulation. Ce n'est pas pratique, mais c'est suffisant pour faire de la POO. Vous pouvez probablement même plier quelque chose comme Haskell ou ML pour faire de la POO, et je ne serais pas surpris si quelqu'un pouvait trouver une façon de faire la POO en assemblage.
En pratique, cependant, un langage peut être appelé «orienté objet» s'il fournit un ensemble complet de fonctionnalités de syntaxe pour une programmation orientée objet explicite. Typiquement, cela signifie qu'un tel langage devrait avoir: * une notion d'objet * une notion d'appel de méthode ou de passage de message * une manière confortable et simple de contrôler l'accès aux membres de l'objet * une manière confortable et simple de définir les interfaces
Par conséquent, j'appellerais un morceau de code orienté objet s'il adhère aux principes de la POO et utilise la syntaxe de POO disponible.
BTW., Votre exemple de code probablement fait polymorphisme l' utilisation et les fonctions virtuelles, bien que la syntaxe C ne rend pas évidente. Je ne suis pas un expert en SDL, mais je m'attendrais à ce SDL_surface
qu'il soit en mesure de représenter différents types de surfaces, chacune avec son propre ensemble spécifique d'implémentations - le fait de coller quelque chose sur une image bitmap de mémoire et de bliter sur une surface d'écran nécessite des différences radicalement différentes mais l'interface (les fonctions qui prennent un SDL_surface*
comme argument) reste la même. Tout comme cela, il implémente également l'encapsulation: vous ne pouvez pas accéder directement à la représentation sous-jacente d'une surface, vous devez passer par des fonctions qui savent comment gérer un SDL_surface
, car c'est tout ce que vous avez. C'est un bel exemple de la façon dont vous feriez la POO en C.