Previous: Exemples Up: Calculs en Smalltalk

Les classes numériques

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 ?

Indications ...

___________________________________________

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 +.

beugnard@enst-bretagne.fr