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