Classes en C++, Smalltalk, Objective-C et Java
Todd Blanchard (qui était venu à la première SmalltalkParty à Paris en 2002) dans ce billet compare les notions de classe en C++, Smalltalk, Objective -C et Java. Tous les langages ne sont pas nés équivalents :
- C++ n’a pas de représentation explicite d’une classe. En fait, la notion de classe est plus un sucre syntaxique, où les méthodes sont représentées par des fonctions globales.
On croit que l’on fait des classes, mais en fait ce n’est pas réellement le cas … Il n’y a pas de possibilité de désigner la classe parthis
, ce qui nécessite d’encoder en dur le nom des classes. Il n’y également pas de possibilité d’avoir des méthodes abstraites de création d’objet, sans passer par une méthode complexe de Factory. - Smalltalk représente les classes par des objets ordinaires.
self
permet d’accéder à la classe elle-même, etsuper
à sa super-classe. Les classes Smalltalk prennent la responsabilité des instances et sont donc des Factory par défaut. Todd montre un exemple issu de Squeak montrant le bien-fondé de cette approche. - Objective-C est très proche de son modèle (Smalltalk) avec quelques contraintes supplémentaires (liés à sa consanguinité avec C).
- Java enfin est finalement plus proche de C++ que de Smalltalk sur cet aspect. Même s’il existe la classe
java.lang.Class
pour représenter les classes sous forme d’objet, la création des objets n’est pas réalisée par cette classe. Plus étonnant, il n’est pas possible d’accéder à l’objet représentant la classe sans encoder directement le nom de classe (ce qui limite toute réutilisation pour les sous-classes).