“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 292 — #302
i
i
i
i
i
i
i
i
292
6
• La programmation orientée objet
class VerboseAccount from Account
meth verboseTransfer(Amt)
{self transfer(Amt)}
{Browse ´Balance :´#@balance}
end
end
Nous ajoutons simplement une nouvelle méthode, verboseTransfer. Comme les
méthodes existantes ne sont pas changées, le contrat sera toujours respecté. Un objet
de VerboseAccount sera valable dans tous les cas où un objet de Account l’est.
Voici une deuxième extension plus dangereuse :
class AccountWithFee from VerboseAccount
attr fee:5
meth transfer(Amt)
VerboseAccount,transfer(Amt-@fee)
end
end
La figure 6.8 montre la nouvelle hiérarchie. La flèche ouverte dans cette figure est
la notation habituelle d’un lien d’héritage. AccountWithFee redéfinit la méthode
transfer. La redéfinition n’est pas un problème en soi. Le problème est qu’un objet
AccountWithFee ne fonctionne pas correctement en tant qu’objet Account.
VerboseAccount
Account
AccountWithFee
Figure 6.8 Une hiérarchie simple avec trois classes.
Considérez la séquence des trois appels suivants :
{A getBalance(B)} {A transfer(S)} {A getBalance(B2)}
Précédent

- 307/370

Suivant