[t]40ex
UniversitéPierre & Marie Curie
U.F.R d'infomatique
[t]45ex
Maîtrise -- 2000-01
Programmation Objet et Distribution
Tavaux dirigés n° 3
Des vecteurs sous toutes les coutures
Exercice I Classe paramètrée par une classe (type) concrète.
Question (I.1) Définir une classe abstraite vectabs pour les vecteurs
à deux dimensions, les composants étant de type
quelconque. Les opérations permettent :
- d'accèder aux composants
x,y
- de construire un chaîne de caractères pour affichage
- d'ajouter un autre vecteur aux composants
x,y (translation)
Question (I.2) Définir la classe concrète vectfloat pour des composants
de type float et écrire quelques lignes l'utilisant.
Question (I.3) Définir une classe complex minimale, dont les
opérations permettent :
- d'accéder aux composants
im, re
- de construire un chaîne de caractères pour affichage
- d'ajouter un autre complexe aux composants
im, re
Question (I.4) Définir la classe concrète vectcomplex pour des
composants complex et écrire quelques lignes l'utilisant.
Exercice II Classe paramètrée par une classe abstraite.
Le code écrit dans les classes concrètes a de nombreux points
communs. On peut factoriser l'écriture des méthodes en
supposant que chaque classe de composants dispose des méthodes
to_string, plus, value.
Question (II.1) Définir une classe abstraite nombre paramètrée par le
type de base des valeurs (qui sera int pour la classe concrète
entier, float*float pour la classe concrète complex).
Question (II.2) Définir la classe concrète entier, enrobant un int.
Question (II.3) Modifier la définition de la classe complex.
Question (II.4) Définir une classe vect2 pour les vecteurs à deux
dimensions paramètrée ; les méthodes sont écrites
en fonction de la classe nombre.
Question (II.5) Définir des objets iv et cv pour des composants
respectivement entier et complex; écrire
quelques lignes les utilisant.
Exercice III Classe abstraite, héritage, super-classe.
Question (III.1) Le code écrit précédemment dans les classes concrètes
héritées de nombre ne peut utiliser que les méthodes
déclarées dans nombre (éventuellement
redéfinies localement). On supprime la méthode value
de la classe nombre. Pourtant, une telle méthode est
indispensable dans les types dérivés pour écrire la
définition de la méthode plus. Redéfinir une classe
abstraite non paramétrée nombre qui ne déclare que les
méthodes plus et to_string; puis, par héritage,
définir la classe entier qui rajoute la méthode
value nécessaire àla définition de plus.
Question (III.2) On veut étendre la classe concrète vect2 en
vect3 ; écrire la méthode to_string de
vect3 en utilisant la méthode to_string de
vect2. Écrire une méthode d'addition.
Exercice IV Foncteur et modules paramétrés
On reprend l'exercice 2 en termes de modules. On ne dispose plus de
l'héritage, le module définit le type de
la représentation mais les valeurs des objets sont extérieures.
Question (IV.1) Définir la signature NOMBRE.
Question (IV.2) Définir la structure FvecteurNb paramétrée par un
module Nb de signature NOMBRE.
Question (IV.3) Définir la signature VECTEUR correspondante.
Question (IV.4) Construire la structure d'un module Rationnel implantant
NOMBRE.
Question (IV.5) Créer et tester un module VecteurRat.
Question (IV.6) Donner une autre écriture du module paramètré en faisant
apparaitre explicitement le foncteur capable de créer le module
concret implantant VECTEUR à partir d'une structure
implantant NOMBRE.
This document was translated from LATEX by HEVEA.