Previous: Exemples Up: Calculs en Smalltalk
La hiérarchie des classes numériques et assimilées est donnée ci-dessous. Les informations entre parenthèses correspondent aux variables d'instances, c'est-à-dire aux noms des objets constituant l'état des objets de la classe considérée :
Object ()
Magnitude ()
ArithmeticValue ()
Number ()
Fraction ('numerator' 'denominator')
Integer ()
LargeNegativeInteger ()
LargePositiveInteger ()
SmallInteger ()
LimitedPrecisionReal ()
Double ()
Float ()
Point ('x' 'y')
Character ()
Date ('day' 'year')
LookupKey ('key')
Association ('value')
WeakKeyAssociation ()
Time ('hours' 'minutes' 'seconds')
Ainsi un Point est constitué de deux objets, nommés x et y.
Certaines classes ne peuvent pas avoir d'instances, elles apparaissent en gras dans la hiérarchie qui précède. Ce sont des classes abstraites qui servent à factoriser des comportements. Ces classes sont essentielles pour la structuration de la hiérarchie d'héritage. Elles se reconnaissent par certaines de leurs méthodes (façons de répondre à un message) qui déclenchent une erreur en signalant qu'une sous classe, dite concrète aurait dû pouvoir répondre à ce message avant.
___________________________________________
Exercice 6 Le message indiquant qu'une méthode est de la responsabilité d'une des sous-classes est subclassResponsibility. Avec cette information, pouvez-vous détecter les classes abstraites de Smalltalk ?
___________________________________________
Les messages principaux auxquels savent répondent chacune des instances des classes citées sont résumés ci-après :
Object ()
Magnitude () --- les objets comparables
<, >, min:, max:, between:and:
ArithmeticValue ()
+, -, *, /, abs, negated, reciprocal, squared, raisedToInteger:, sign, isZero
Number ()
**, ln, cos, sqrt, log, asDouble, asPoint, ...
Fraction ('numerator' 'denominator')
Integer ()
LargeNegativeInteger ()
LargePositiveInteger ()
SmallInteger ()
LimitedPrecisionReal ()
Double ()
Float ()
Point ('x' 'y')
*, +, r, theta, dist:, dotProduct:, transpose, ...
Character ()
digitValue, isAlphabetic, isVowel, isUppercase, asInteger, asString
Date ('day' 'year')
day, year,weakday, addDays:, substractDate:, substractDays:, previous:, asSeconds
LookupKey ('key')
key, key:
Association ('value')
WeakKeyAssociation ()
Time ('hours' 'minutes' 'seconds')
hours, minutes, seconds, addTime:, substractTime:, asSeconds
Bien entendu, les messages situés dans les super-classes d'une classe sont accessibles aux instances de cette classe grâce au mécanisme d' héritage. Ainsi, toutes les ArithmeticValue comme Number, Fraction, Integer, Point, ... savent répondre au message +.