"Si vous voulez vraiment du sucre OO - allez utiliser C ++" - a été la réponse immédiate d'un de mes amis quand j'ai demandé cela. Je sais que deux choses sont complètement fausses ici. Le premier OO n'est PAS du «sucre» et le second, le C ++ n'a PAS absorbé le C.
Nous devons écrire un serveur en C (dont le front-end sera en Python), et j'explore donc de meilleures façons de gérer de gros programmes C.
La modélisation d'un grand système en termes d'objets et d'interactions d'objets le rend plus gérable, maintenable et extensible. Mais lorsque vous essayez de traduire ce modèle en C qui ne porte pas d'objets (et tout le reste), vous êtes confronté à des décisions importantes.
Créez-vous une bibliothèque personnalisée pour fournir les abstractions OO dont votre système a besoin? Des choses comme les objets, l'encapsulation, l'héritage, le polymorphisme, les exceptions, pub / sub (événements / signaux), les espaces de noms, l'introspection, etc. (par exemple GObject ou COS ).
Ou, vous utilisez simplement les constructions C de base ( struct
et les fonctions) pour approximer toutes vos classes d'objets (et autres abstractions) de manière ad hoc. (par exemple, certaines des réponses à cette question sur SO )
La première approche vous donne un moyen structuré d'implémenter l'intégralité de votre modèle en C. Mais cela ajoute également une couche de complexité que vous devez maintenir. (Rappelez-vous, la complexité était ce que nous voulions réduire en utilisant des objets en premier lieu).
Je ne connais pas la deuxième approche et son efficacité pour approximer toutes les abstractions dont vous pourriez avoir besoin.
Donc, mes questions simples sont: Quelles sont les meilleures pratiques pour réaliser une conception orientée objet en C. N'oubliez pas que je ne demande pas COMMENT le faire. Ceci et ces questions en parlent, et il y a même un livre à ce sujet. Ce qui m'intéresse le plus, ce sont des conseils / exemples réalistes qui abordent les vrais problèmes qui se présentent lorsque dong ceci.
Remarque: veuillez ne pas conseiller pourquoi C ne devrait pas être utilisé en faveur de C ++. Nous avons bien dépassé cette étape.
extern "C"
et puisse être utilisée à partir de python. Vous pouvez le faire manuellement ou demander à SWIG de vous aider. Donc, le désir de frontend python n'est pas une raison pour ne pas utiliser C ++. Cela ne veut pas dire qu'il n'y a aucune raison valable de vouloir rester avec C.