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