Previous: Commentaires sur la programmation orientée objet Up: Programmer en Smalltalk
Conseils pour la programmation en Smalltalk
- Commentez avec soin toutes les classes, et les méthodes qui le méritent !
- Un commentaire de classe doit préciser pourquoi la classe existe, ce qu'elle offre comme services, et pourquoi il est utile de créer de ses instances. C'est le minimum vital.
- Un commentaire de méthode doit préciser le rôle de la méthode et des paramètres. Point n'est besoin de détailler l'algorithme, pour cela on lit le code ; il faut décrire le quoi pas le comment !
- Utilisez un protocole private pour grouper les méthodes à accès limité.
- Accédez et modifiez les variables d'instances par l'intermédiaire des méthodes. N'utilisez pas de nom commençant par "set" ou "get" pour ces méthodes, mais le nom de l'attribut directement (sauf peut-être pour des méthodes privées).
- Précisez les effets de bords, modification d'objet passés en paramètre,...
Le mieux est d'adopter une politique globale, et de mettre en évidence les exceptions...
- Choisissez bien le nom des méthodes. En général, on distingue deux types de méthode :
- Celle qui retournent une valeur,
- Celle qui modifient un objet
On choisira pour les premières des noms comme sélecteur et pour les secondes des verbes.
- Évitez les abréviations dans les noms des messages, des classes ; seule exception, les variables temporaires.
- Évitez les tests explicites à une classe, préférez le double-dispatching.
Cette technique consiste à échanger récepteur et paramètre pour tenir compte de la classe des deux objets lors de l'application d'une méthode. Le système fournit des exemples avec l'addition des "Number". #+ devient selon le récepteur, sumFromInteger:, sumFromFloat: ou sumFromFraction:.
- Faites relire votre code.
- Quelques "erreurs" fréquentes
- Quand vous redéfinissez #=, revoyez #hash. Deux objets egaux (#=) ont le même #hash.
- #add: retourne l'objet ajouté, pas la collection.
- nil n'est pas un récepteur acceptable pour #ifTrue: ou #ifFalse:
- Le récepteur de #whileTrue ou #WhileFalse est un BLOC.
Some advice on engineering if you program in Smalltalk