|
Postscript, PDF | Didier Rémy | Polytechnique, INRIA |
|
|
||||
|
· | Les modules gèrent l'abstraction de type et de valeur et la paramétrisation par des types et des valeurs en gros. |
· | Les classes n'offrent pas d'abstraction de type, ni la possibilité de groupement. |
· | Elles offrent le mécanisme de liaison tardive (classes), l'héritage (classe) et bien sûr la programmation par envoi de message (objets). |
|
· | De nombreux programmes peuvent être écrits dans un style ou dans l'autre. |
· | Cependant, la modularité n'est pas toujours la même selon le style utilisé. |
· | Pour des exemples peu modulaire et qui utilisent peu le mécanisme à objet, le choix du style n'est pas fondamentale... au point que ces exemples peuvent également être écrit dans le langage de base. |
|
|
|
Résumé | classe | module | ||||
Le type des piles | 'a stack |
'a Stack.t |
||||
Création d'une pile | new stack |
Stack.create () |
||||
Empiler x sur s | s#push x |
Stack.push x s |
||||
Dépiler s | s#pop |
Stack.pop s |
|
|
|
pop
n'affectera pas le comportement de top
.
|
· | utilisation orthogonale: chacun son rôle, indépendemment. |
· | combinaison intime: l'un complète l'autre. |
|
nil
et cons
sont liées, mais seulement par l'usage.
|
|
|
|
|
append
, ce qui revient à ajouter une
nouvelle classe avec la même interface.
|
append
prenant deux listes et se
comportant comme une liste.
Montrer que les listes peuvent être définies à partir d'une classe
['a,'b] cellule
implémentant une cellule à deux cases (non
homogènes) et d'une classe ['a, 'b] nulle
ayant la même
interface mais implémentant le pointeur vide. Retrouver les classes
nil
et cons
comme des spécialisations des classes
nulle
et cellule
.
|
new
. Pour obtenir plusieurs constructeurs de la même classe, on peut
· | utiliser des fonctions auxiliaires de construction.
| ||
· | utiliser des classes auxiliaires.
| ||
· | utiliser des wrappers?
| ||
· | mettre les constructeurs dans des méthodes privées et utiliser les clauses
initializers pour les sélectionner. | ||
· | -1em
|
|
|
|
Ces constructeurs ne peuvent pas être hérités. |
|
|
|
Ces constructeurs peuvent être hérités, mais individuellement, sans partage du code ajouté. |
|
|
Situation idéale... mais assez rare |
|
|
On peut hériter des constructeurs, |
mais pas changer leur type. |
|
|
|
|
|
|
|
|
|
Compte
. compte_bancaire
utilisée pour des extensions
ultérieures. (On pourra reprendre, par exemple, la classe
compte_avec_relevé
Elle sera cachée dans la vue montrée au client.VUE_DU_CLIENT
. client
permettant au client de gérer ses comptes
(sans pouvoir en créer) et si besoin d'hériter de cette classe pour
personnaliser la gestion de son compte.promotion
permettant
une offre promotionnelle, non modifiable, (qui ne pourra donc pas être
héritée).
Le client spécialise sa vision du compte client.
Par exemple, founrnir une version dérivée de la classe client
lui permettant de gérer lui-même ses comptes (indépendemment du
relevé de la banque). Cette classe prend en paramètre un compte auxilliaire
servant d'épargne et sur lequel sont effectuer automatique des dépôts
lorsque le solde dépasse une valeur limite.
|
· | Les modules réalisent l'abstration par excellence. |
· | Les classes permettent l'héritage avec son mécanisme de liaison tardive. |
|
· | Tous les objets ont accès à la partie rendue visible. |
· | Aucun autre objet que self n'a accès à la partie restant cachée. Pas même les objets de la même classe. |
· | rendre la représentation visible pour comminiquer entre amis |
· | rendre la représentation abstraite (les amis ont la même vue) pour la sécurité, en utilisation les modules. |
|
|
|
|
· | Les ensembles avec une opération d'union. |
· | Les tables de hachage avec une opération de fusion. |
|
· | Héritage multiple, |
· | Liaison tardive; |
· | Pas d'encapsulation de l'état; |
· | Les modules, à la place. |
|
· | Difficulté de l'abstraction de la représentation. |
· | Dissymétrie des méthodes binaires |
· | Absence d'héritage (définition incrémentale) |
· | Absence de liaison tardive (ré-implémentation plus efficace d'une implémentation par défaut). |
· | Les classes fournissent l'héritage et la liaison tardive. |
· | Les modules fournissent l'abstraction (et aide à l'organisation du code) |
|
|
|
'a
est le type de la représentation des éléments de
la structure.
|
|
|
|
|
|
|
|
|
Set
. On réalisera donc un module Oset
. Set
est-elle implémentée par un foncteur
Make
qui retourne une structure?
Set
implémente une version fonctionnelle des ensembles
par opposition à version impérative. Qu'est-ce que cela veut dire?
Oset
(on ne retiendra que les opérations
principales (tests, ajout retrait, union, comparaison, iter)
Oset
(on ne retiendra que les opérations
principales (tests, ajout retrait, union, comparaison, iteration)
'a
est le type de la structure retournée.
La méthode fold
devrait être polymorphe.
(Abstraire la classe par rapport à 'a
est possible mais pas
satisfaisant). · | Définir les anneaux comme une classe (virtuelle) qui étend la classe des groupes. |
· | Définir les polynômes comme une classe (virtuelle) qui étend la classe des anneaux. |
· | Implémenter les polynômes à coefficients sur un anneau. |
This document was translated from LATEX by HEVEA and HACHA.