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






Exercice I Des arbres binaires de recherche, encore ; oui mais en objets impératifs !

On veut définir des structures d'arbres paramétrés ayant les méthodes 
is_void de type unit -> bool qui renvoie true si l'arbre est vide et false sinon.
add de type 'a -> unit qui rajoute un élément àl'arbre selon la discipline des arbres binaires de recherche (on utilisera la relation polymorphe <).
to_list de type unit -> 'a list qui rend la liste des éléments contenus dans l'arbre (de la gauche vers la droite).

Question (I.1) Définir une classe ['a] void pour représenter l'arbre vide. La méthode add échouera toujours.


Question (I.2) Définir une classe ['a] node pour représenter les arbres binaires non vides.


Question (I.3) Construiser une valeur contenant l'arbre suivant :


Question (I.4) (subsidaire) Utiliser les classes d'arbres pour obtenir une fonction de tri de listes.




Exercice II Un exercice simple utilisant le sous typage.


Question (II.1) Définir une classe num qui contient un champ de type int et une méthode d'accés àce champ. Définir une classe print_num héritière de num qui fournit une méthode d'affichage (print).


Question (II.2) Définir une valeur de type num puis une valeur de type print_num et construire une liste contenant ces deux valeurs.


Question (II.3) Définir sans hériter de num une classe var_num qui contient une champ modifiable de type int, une méthode d'accés àce champ et une méthode de modification de la valeur de ce champ.


Question (II.4) Peut-on définir une liste contenant une valeur de type num et une valeur de type var_num ?




Exercice III Classes abstraites et contraintes de type pour listes ordonnées paramétriques.


Question (III.1) Définir une classe abstraite 'a olist telle que :
class virtual ['a] olist :
  object ('b)
    constraint 'a = < is_le : 'a -> bool; to_string : unit -> string; .. >
    val mutable content : 'a list
    method virtual add : 'a -> unit
    method merge : 'b -> unit
    method to_string : unit -> string
  end
Notez que le type de l'objet est nommé('b). La valeur initiale de content sera une liste vide. La méthode merge est programmée en utilisant la méthode abstraite add.


Question (III.2) Définir, par héritage de 'a olist, la classe 'a inc_list des listes triées par ordre croissant et la classe 'a dec_list des listes triées par ordre décroissant.


Question (III.3) Définir, par héritage de la classe num de la question 1, une classe onum répondant àla contrainte posée sur le paramétre de type de 'a olist. Construire deux listes dl et il contenant les trois premiers entiers ; la première de type 'a dec_list et la seconde de type 'a inc_list.


Question (III.4) Peut-on fusionner les deux listes dl et il en utilisant la méthode merge ?




Exercice IV Méthodes fonctionnelles et type de (self).

On donne la classe abstraite 'a stack :
class virtual ['a] stack =
 object
  method virtual is_empty : unit -> bool
  method virtual push : 'a -> 'a stack
  method virtual top : 'a
  method virtual pop : 'a stack
 end ;;

Question (IV.1) Définir, par héritage de 'a stack, la classe 'a cons_stack qui prend un paramètre de type 'a et un de type 'a stack.


Question (IV.2) Définir la classe empty_stack.




This document was translated from LATEX by HEVEA.