Miguel Moquillon wrote:
Laurent Deniau wrote:
OOC (Object Oriented C, completement C89)
est beaucoup plus simple, beaucoup plus evolue et fournit beaucoup de
checks a la compilation. OOC est inspire de Java, C# et C++.
Je ne connais pas OOC.
Je suis aussi depuis une semaine entrain de travailler sur COS (C Object System,
completement C89) qui lui est inspire d'Objective-C et de CLOS et est
encore plus simple, plus flexible et plus dynamique que OOC. Les deux
valent (voir surpasse ;-) ) pas mal de langages OO tres connus.
Là, tu m'intéresse au plus haut point ;) As tu des liens dessus ?
Non pas encore. En fait je profitais des vacances pour commencer a documenter OOC en vu d'une mise sur le web. Au cours de l'ecriture du manuel, j'ai trouve que OOC avait finalement beaucoup (trop?) de concepts (alors que je le voulais simple) et que le manuel qui devait faire 30 pages allait plutot vers les 150p - tres demoralisant. En parallele, j'ai lu le livre de Sonya Keene sur CLOS et on m'a mentionne l'existance de Dynace qui utilise un preprocesseur specifique (dpp) et ne supporte pas les multimethodes.
Avec l'experience de OOC et ce que je connaissais de CLOS et d'Objective-C, il n'a pas ete difficile de faire qques macros pour faire COS (defclass, defgeneric, defmethod), et je suis toujours dessus probablement encore pour qques semaines. Je finalise ce soir le package de macros pour manipuler des listes a la compilation.
Ce qui me seduit dans cette approche, c'est la programmation par verbes (generiques) au lieu de noms (classes), ces derniers etant generalement beaucoup plus nombreux. En fait, ce ne sont plus les classes (qui ont tres peu de couplage entre elles) qui dominent le design, mais d'avantage les methodes que l'on veut leur ajouter (ce qui peut etre fait independament de la classe). Le couplage existe mais au niveau des generiques (defgeneric). C'est la que le design est important, mais normalement ca devrait etre plus simple que le design OO classique puisqu'on pense naturellement en terme de comportement (verbe). De plus la facon de l'utiliser est beaucoup naturelle pour ceux qui viennent du C puisque les generiques se manipulent comme des fonctions (ex: object gAdd(object, object)). Bon, mais il faut que j'avance si je veux que ca marche un jour ;-)
a+, ld.