En supposant que je doive utiliser le langage C (pas de compilateur C++ ou orienté objet) et que je ne dispose pas d'allocation dynamique de mémoire, quelles sont les techniques que je peux utiliser pour implémenter une classe, ou une bonne approximation d'une classe ? Est-ce toujours une bonne idée d'isoler la "classe" dans un fichier séparé ? Supposons que nous puissions préallouer la mémoire en supposant un nombre fixe d'instances, ou même en définissant la référence à chaque objet comme une constante avant la compilation. N'hésitez pas à faire des hypothèses sur le concept de POO que je devrai mettre en œuvre (cela variera) et à suggérer la meilleure méthode pour chacun d'entre eux.
Restrictions :
- Je dois utiliser le C et non un OOP parce que j'écris du code pour un système embarqué, et le compilateur et la base de code préexistante est en C.
- Il n'y a pas d'allocation dynamique de la mémoire car nous n'avons pas assez de mémoire pour supposer raisonnablement que nous n'en manquerons pas si nous commençons à l'allouer dynamiquement la mémoire.
- Les compilateurs avec lesquels nous travaillons n'ont pas de problèmes avec les pointeurs de fonction.
29 votes
Question obligatoire : Devez-vous écrire du code orienté objet ? Si c'est le cas pour une raison ou une autre, c'est très bien, mais vous allez devoir mener une bataille plutôt difficile. C'est probablement mieux si vous évitez d'essayer d'écrire du code orienté objet en C. C'est certainement possible - voir l'excellente réponse de unwind - mais ce n'est pas exactement "facile", et si vous travaillez sur un système embarqué avec une mémoire limitée, ce n'est peut-être pas faisable. Je peux me tromper, cependant - je n'essaie pas de vous convaincre de ne pas le faire, juste de présenter des contrepoints qui n'ont peut-être pas été présentés.
1 votes
À proprement parler, nous ne sommes pas obligés de le faire. Cependant, la complexité du système a rendu le code impossible à maintenir. Mon sentiment est que la meilleure façon de réduire la complexité est d'implémenter certains concepts OOP. Merci à tous ceux qui ont répondu dans les 3 minutes. Vous êtes fous et rapides !
8 votes
C'est juste mon humble opinion, mais la POO ne rend pas le code instantanément maintenable. Elle peut le rendre plus facile à gérer, mais pas nécessairement plus facile à maintenir. Vous pouvez avoir des "espaces de noms" en C (l'Apache Portable Runtime préfixe tous les symboles globaux avec le symbole
apr_
et GLib les préfixe avecg_
pour créer un espace de noms) et d'autres facteurs d'organisation sans POO. Si vous devez restructurer l'application de toute façon, j'envisagerais de passer un peu de temps à essayer de trouver une structure procédurale plus facile à maintenir.0 votes
Cela a déjà été discuté à l'infini auparavant. Avez-vous regardé les réponses précédentes ?
0 votes
Cette source, qui se trouvait dans une de mes réponses supprimées, peut également être utile : planetpdf.com/codecuts/pdfs/ooc.pdf Il décrit une approche complète pour faire de l'OO en C.
0 votes
Beaucoup de ces commentaires tentent de pas répondre à la question lol. Pourquoi tout ce découragement ? Cette question m'intéresse également, mais d'un point de vue purement théorique.