[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° 2








Exercice I Héritage, agrégation : variante sur l'exemple du cours. On reprend (en partie) la classe point :
class point (x0,y0) = 
object  
  val mutable x = x0
  val mutable y = y0
  method get_x = x
  method get_y = y
  method rmoveto (dx,dy) = begin x <- x +. dx; y <- y +. dy end
  method print () =
   print_string "( "; print_float x; print_string " , "; 
   print_float y; print_string ")"
end;;

Question (I.1) Définir, par agrégation de la classe point, une classe double_point qui représente un couple de points (p1, p2). Elle fournira les méthodes suivantes :
Question (I.2) Ecrire une fonction do_rect qui prend en arguments quatre entiers x, y, h, w et calcule la liste des quatre point's du rectangle de coin inférieur gauche (x,y), de hauteur h et de largeur w.


Question (I.3) Définir, par héritage de la classe double_point, la classe moving_points qui fournit les deux méthodes : On rappelle que l'on obtient une rotation de a par rapport àl'origine en appliquant les équations
{
x' = x.cos a - y.sin a
y' = x.sin a + y.cos a
.


Question (I.4) Écrire une fonction de type double_point -> point list dont l'argument représente les deux points opposés d'un rectangle et qui calcule la liste des quatre points du rectangle.




Exercice II Des piles, encore.


Question (II.1) En vous inspirant du module Stack, définir une classe pour des piles d'entiers.

Faut-il conserver une méthode create ? Quel type donner àpush, pop, etc. ?


Question (II.2) Étendre la classe précédente pour obtenir une classe de piles oùles opérations de dépilage et d'accés àla valeur du sommet de pile sont disjointes (top donne la valeur sans modifier la pile et pop dépile sans donner la valeur)


Question (II.3) On se donne le type suivant :
type arsym = Num of int | Op | Plus | Moins | Mult | Div ;;
On considère qu'une arsym list représente une expression arithmétique postfixée. Écrire une fonction d'évaluation utilisant les piles de la question précédente.




Exercice III Types sommes, expressions arithmétiques (encore !) et classes abstraites.


Question (III.1) Écrire une classe abstraite expar fournissant deux méthodes :
Question (III.2) Écrire, par héritage de expar, les six classes représentant les constantes entières, le moins unaire, l'addition, la soustraction, la multiplication et la division.


Question (III.3) Écrire une fonction qui prend en argument une arsym list représentant une expression arithmétique postfixée (cf exercice précédent) et construit l'objet correspondant.


Question (III.4) Écrire, par héritage de expar, trois classes (toujours abstraites) prenant zéro, un et deux arguments pour représenter les opérations 0-aires (ie : les constantes), les opérations unaires et les opérations binaires. En déduire six classes pour représenter les constantes entières, le moins unaire, l'addition, la soustraction, la multiplication et la division.




This document was translated from LATEX by HEVEA.