Mécanique Smalltalk - (6)




(6) Exemples de création d'une sous-classe de collection

 

Les collections sont des objets contenant d'autres objets. Nous présentons ici deux implémentations de collections triés. Les éléments de la collection sont rangés dans l'ordre croissant.

 

Chargement des classes exemples (Tas1 et Tas) :

Cliquez ici :  Tas.st , utilisez la fonction Save as… du navigateur puis faites un file in dans VisualWorks.

 

Tas1 Premiere version de la classe Tas

 

La classe Tas1 représente des collections d'objets comparables entre eux par le message >.

Chaque instance est un noeud valué (la valeur est portée par la variable d'instance valeur) d'une arborescence binaire.

Le fils gauche d'un noeud (variable d'instance gauche), s'il n'est pas nil, pointe vers une autre instance dont la valeur est supérieure.

Le fils droit (droite), s'il n'est pas nil, pointe vers une autre instance dont la valeur est inférieure.

 

Lors de l'énumeration avec le message do:, la branche droite est parcourue avant la valeur courante elle même énumérée avant la branche gauche. Les éléments apparaissent ainsi dans l'ordre croissant.

 

Pour créer une instance on doit utiliser les message new et ensuite spécifier une valeur avec le message valeur:

Ceci implique que les messages collect: select: et autres énumerations ne fonctionnent pas comme pour les autres collections : le message species est (re)défini pour qu'une OrderedCollection soit créée dans ce cas. Sinon, par défaut, collect: provoque l'envoie d'un message new à la classe, puis des messages add: or, avec le message new, la valeur du premier élément créé est nil. ensuite, les comparaisons entre nil et les valeurs ajoutes par add: échouent. La définition de la classe Tas (ci-dessous) propose une autre solution à ce problème.

 

Tas Deuxième version

La classe Tas représente des collections d'objets comparables entre eux par le message >

A la différence de la classe Tas1, la collection peut être vide.

Chaque instance est un noeud valué (la valeur est portée par la variable d'instance valeur) d'une arborescence binaire.

Si la valeur est nil, on considère qu'il n'y a pas de valeur.

Le fils gauche d'un noeud (gauche), s'il n'est pas nil, pointe vers une autre instance dont la valeur est supérieure.

Le fils droit (droite), s'il n'est pas nil, pointe vers une autre instance dont la valeur est inférieure.

Lors de l'énumeration avec le message do:, la branche droite est parcourue avant la valeur courante elle même énumérée avant la branche gauche. Les éléments apparaissent ainsi dans l'ordre croissant.

 Pour créer une instance on peut utiliser new (ce qui produit une collection vide), ou les messages with: with:with: withAll: etc...

Les messages collect: select: et autres énumerations fonctionnent comme les autres collections en céant des collections de la même classe.

Par rapport à la classe Tas1, Le message valeur: a été intégré au message add:. Le message do: à été modifié pour ne pas prendre en compte les valeurs nulles (contenant nil).


Date de mise à jour 18/3/1997 m a i l t o : v i @ a i . u n i v - p a r i s 8 . f r
Vincent LESBROS, Mécanique Smalltalk