POO en C ?

Le
Xavier Maillard
Bonjour,

C'est mon premier post ici, merci de me rediriger si je suis
hors-charte.

J'ai une question.

Je voudrais savoir si il vous paraît réalisable de transformer (pour le
plaisir) tout un programme écrit en C++ (et avec des paradigmes de POO)
vers du C en conservant le côté Objet.

En gros pouvoir instancier des classes d'objets, utiliser du
polymorphisme, et ce genre de chose ?

Je ne vous cache pas que c'est juste pour le plaisir et le fun mais
j'aimerais bien pouvoir réaliser ce genre de choses assez «sales»(tm).

Alors, cela vous paraît-il réalisable ?

Avez-vous des pointeurs pour m'aider dans ma tâche ? L'idée pour le
moment est de me contenter de reprendre seulement quelques objets et
voir si je peux étendre cela à l'ensemble du programme.

Merci
--
No e-patents, pas de brevets logiciels
Pétition contre les brevets logiciels : http://petition.eurolinux.org
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Marc Boyer
Le #626027
Xavier Maillard wrote:
Je voudrais savoir si il vous paraît réalisable de transformer (pour le
plaisir) tout un programme écrit en C++ (et avec des paradigmes de POO)
vers du C en conservant le côté Objet.


Oui, bien sur. C'est ce que faisaient les premiers compilateurs
C++.

En gros pouvoir instancier des classes d'objets, utiliser du
polymorphisme, et ce genre de chose ?


Tout a fait.

Je ne vous cache pas que c'est juste pour le plaisir et le fun mais
j'aimerais bien pouvoir réaliser ce genre de choses assez «sales»(tm).

Alors, cela vous paraît-il réalisable ?

Avez-vous des pointeurs pour m'aider dans ma tâche ? L'idée pour le
moment est de me contenter de reprendre seulement quelques objets et
voir si je peux étendre cela à l'ensemble du programme.


Il y a l'approche de Laurent Deniau par exemple
http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html

Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...

Laurent Deniau
Le #626025
Marc Boyer wrote:
Xavier Maillard wrote:

Je voudrais savoir si il vous paraît réalisable de transformer (pour le
plaisir) tout un programme écrit en C++ (et avec des paradigmes de POO)
vers du C en conservant le côté Objet.



Oui, bien sur. C'est ce que faisaient les premiers compilateurs
C++.


En gros pouvoir instancier des classes d'objets, utiliser du
polymorphisme, et ce genre de chose ?



Tout a fait.


Je ne vous cache pas que c'est juste pour le plaisir et le fun mais
j'aimerais bien pouvoir réaliser ce genre de choses assez «sales»(tm).

Alors, cela vous paraît-il réalisable ?

Avez-vous des pointeurs pour m'aider dans ma tâche ? L'idée pour le
moment est de me contenter de reprendre seulement quelques objets et
voir si je peux étendre cela à l'ensemble du programme.



Il y a l'approche de Laurent Deniau par exemple
http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html


Juste pour info, cette approche est *didactique* mais pas vraiment
utilisable (trop lourd et pas complet). Je suis entrain de finaliser le
'core' de OOC-2.0 que je mettrais sur le web d'ici la fin du mois. La
lib venant avec OOC n'est en revanche pas prevue avant un petit moment
(elle fait 40000 lignes alors il me faudra un peu de temps)...

OOC-2.0 est tout a fait utilisable pour faire de la POO en C sur des
gros projets (> 50000 lignes). L'objectif est de programmer en C comme
on le ferait en Java ou en Objective C, mais pas en C++ car les
templates et l'heritage multiple ne sont plus supportes. Les templates
parce que cela complique enormement les macros et OOC en general sans
apporter qqchose de decisif lorsque l'on supporte les protocols
(interface a la Java) et les messages (messages a la Objective-C). Et
l'heritage multiple par choix, parce que je considere 'finalement' qu'il
apporte plus de problemes qu'il n'en resout sauf cas tres rares. Les
protocols me paraissent plus 'propre' pour le cas general qui necessite
surtout un heritage multiple de comportements (et pas d'etats) et dont
la resolution se fait au runtime (dynamic binding), mais cela n'engage
que moi :-).

OOC-2.0 est davantage oriente vers:

- la simplicite d'utilisation et la portabilite
- la robustesse avec un maximum d'erreurs connues a la compilation
- l'encapsulation et un ADT fort.
- un typage fort des que l'on programme en tout objet.
- le polymorphisme 'transverse', c'est-a-dire sans obligation d'heritage
ce qui evite un couplage fort des classes souvent present en C++ et ou
il est necessaire de recourir aux templates ou a des Patterns complexes
pour contourner ces couplages.
- la flexibilite en controlant complement le modele objet.
- le debug et la tracabilite

De tous ces points, c'est surtout le polymorphism 'transverse' (en plus
du polymorphisme d'heritage) qui a motive le development de OOC, d'ou le
support des protocols et des messages en plus des methodes.

OOPC restera accessible meme une fois OOC sur le web.

a+, ld.


Xavier Maillard
Le #625777
On 11 May 2004, Laurent Deniau wrote:

Marc Boyer wrote:
OOPC restera accessible meme une fois OOC sur le web.

a+, ld.


Miam ! Je vais aller voir ça pour m'amuser un peu ;)

Merci à tous les 2 pour vos réponses.

@++ (avec sûrement des tonnes de questions ;)).

zeDek
--
Hacker Wonderland Xavier Maillard| "Stand Back! I'm a programmer!"
.0. |
..0 (+33) 326 770 221 | Webmaster, emacsfr.org
000 PGP : 0x1E028EA5 | Membre de l' APRIL

tristan
Le #632402
Xavier Maillard wrote:

Bonjour,

C'est mon premier post ici, merci de me rediriger si je suis
hors-charte.

J'ai une question.

Je voudrais savoir si il vous paraît réalisable de transformer (pour le
plaisir) tout un programme écrit en C++ (et avec des paradigmes de POO)
vers du C en conservant le côté Objet.

En gros pouvoir instancier des classes d'objets, utiliser du
polymorphisme, et ce genre de chose ?

Je ne vous cache pas que c'est juste pour le plaisir et le fun mais
j'aimerais bien pouvoir réaliser ce genre de choses assez «sales»(tm).

Alors, cela vous paraît-il réalisable ?

Avez-vous des pointeurs pour m'aider dans ma tâche ? L'idée pour le
moment est de me contenter de reprendre seulement quelques objets et
voir si je peux étendre cela à l'ensemble du programme.

Merci


Ces exatement ce que fait gtk+.
La lib qu'elle utilise a ete externaliser et est integrer dans la glib2
(gobject) secialement pour les developpeurs intersser par cette approche.
Un certain nombre d'applis ou de lib sous gnome utilise cette approche.
C'etait un choix a l'origine de gnome de faire du pure c tout en
programant object. A mon sense pour developper une appli dans l'espris
gnome cette approche me semble toute designer.

Publicité
Poster une réponse
Anonyme