Miguel Moquillon wrote:
Laurent Deniau wrote:
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 ;-)
Et peut-on aussi sortir de la syntaxe function(arg1, arg2) et avoir, dans
l'esprit un peu plus objet, plutôt le modèle langage.
Attention, ce n'est pas function(arg1, arg2) mais function(obj1, obj2)! La methode invoquee depende de obj1 *et* obj2. Une multi-methode donc. C++, C#, Java, Objective-C, etc... ne supportent pas les multi-methodes.
Exemple dans ObjC ou Smalltalk:
myarray at: 3 add: myobject
ou encore dans lisaac:
myarray.add myobject at 3
mais peut-être ce n'est pas conforme à l'approche verbe.
Effectivement, ce n'est pas "conforme" a l'approche verbe et de plus cela oblige a avoir une syntaxe differente pour les methodes et les multi-methodes. Quelle extension de syntaxe utiliserais-tu pour un appel de multi-methode en Objective-C ou en C++? Je prefere une approche uniforme, simple et proche du C de surcroit. Meme si un *utilisateur* venant du C ne sait pas ce qu'est un generic, un override ou une multi-methode, il peut quand meme l'utiliser en faisant le parallele avec generic = prototype et methode = fonction et faire abstraction des mechanismes de classes et de resolutions de methodes, le reste (la partie OO) pourrait "presque" etre considere comme secondaire. C'est en ce sens que je pense que COS sera beaucoup plus simple a expliquer que OOC (tres proche de Java).
a+, ld.