septembre
2008
Dodo est un langage à prototypes, à l’instar de Self ou de Javascript. Un objet est défini sur la base d’un autre objet. Il permet aussi de définir des classes, qui décrivent des objets tous issus du même prototype.
Cet arrangement permet à dodo de proposer un modèle objet très complet, simple et cohérent.
Avec dodo on peut considérer tout objet comme un prototype. Dès lors, il n’est presque plus nécessaire qu’un objet soit modifiable: il suffit de l’utiliser comme base pour une nouvelle version de l’objet.
Prototype
Un prototype est un objet qui est utilisé comme base pour un autre objet. Le prototype apporte ses attributs, fonctions membres et autres propriétés à l’objet dérivé. Dodo permet de redéfinir la valeur d’un attribut de façon simple. Par exemple:
new maison(habitants: [annie, raymond, mirza])
Cet exemple utilise le prototype maison
et redéfinit l’attribut habitants
. L’objet dérivé est du même type que le prototype.
Il est aussi possible de définir de nouveaux attributs:
new maison { bool garage = true }
Cet objet dérivé hérite des attributs du prototype maison
, auquel il ajoute un nouvel attribut garage
. De ce fait le type de l’objet dérivé est plus précis que celui du prototype. Le type du prototype est appelé parent
.
Le nom d’un prototype commence toujours avec une lettre minuscule.
Attribut
J’appelle attribut une propriété de l’objet qui peut être redéfinie dans les objets dérivés sans en changer le type. Par défaut, un attribut se comporte comme un champ dans un enregistrement de base de données. Mais on peut le rendre « intelligent » en définissant une fonction qui calcule sa valeur (getter).
Fonction membre
Une fonction membre est une fonction qui appartient à l’objet et a accès à ses attributs et autres membres. Une fonction membre sans paramètre peut être utilisée comme un attribut. La différence est qu’elle n’a pas une valeur qui peut être redéfinie comme ce dernier.
En dodo, les fonctions ne peuvent pas modifier des variables qui sont externes à la fonction. Cela s’applique également aux fonctions membres. En particulier, les fonctions membres ne peuvent pas modifier les attributs de l’objet.
Méthode
Une méthode ressemble à une fonction membre, mais elle permet de modifier des variables externes à la méthode. Cela dérive du fait qu’un méthode dodo est vraiment un constructeur de classe, qui ne possède pas les mêmes restrictions que les fonctions.
De plus, il peut y avoir plusieurs méthodes du même nom, toutes avec des arguments différents. Celles-ci doivent être définies dans le même bloc. Par exemple:
method Affiche { make Affiche(int) make Affiche(String, encoding) make Affiche(bool) }
Cet exemple déclare trois méthodes nommées Affiche
.