From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id RAA02489 for caml-redistribution; Tue, 3 Jun 1997 17:19:12 +0200 (MET DST) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA02063 for ; Tue, 3 Jun 1997 16:09:08 +0200 (MET DST) Received: from pcmath65.unice.fr (pcmath65.unice.fr [134.59.10.65]) by nez-perce.inria.fr (8.8.5/8.7.3) with ESMTP id QAA23615 for ; Tue, 3 Jun 1997 16:09:06 +0200 (MET DST) Received: from pcmath65 (localhost [127.0.0.1]) by pcmath65.unice.fr (8.8.3/8.8.3) with SMTP id QAA01620 for ; Tue, 3 Jun 1997 16:09:36 +0200 Message-ID: <339425A0.7A65285D@math.unice.fr> Date: Tue, 03 Jun 1997 16:09:36 +0200 From: Vyskocil Vladimir Organization: UNSA X-Mailer: Mozilla 3.01Gold (X11; I; Linux 2.0.28 i686) MIME-Version: 1.0 To: Caml list Subject: Ocaml et les objets Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: weis Bonjour, J'ai quelques questions sur la programmation objet avec objective caml qui me pose probleme... Je commence a me rendre compte qu'il faut oublier la vision C++ des objets car en caml les notions d'heritage et de type ne sont pas tres lies mais justement ca me pose des problemes. Par exemple si l'on veut creer une liste qui contienne des objets derives d'un type parent il faut les "caster" en ce type parent mais ensuite comment les recuperer en tant qu'objets derives ? J'ai essaye le package Obj avec notamment la fonction Obj.magic mais ca me parait un peu risque et je n'arrive pas a faire une fonction qui puisse renvoyer un objet derive quelconque car justement il n'ont pas des types compatibles, quand est t'il du type #class_parent qui est sense etre compatible avec tout les objets descendants de la classe class_parent ? En fait ce qui me perturbe le plus c'est a quoi sert l'heritage si les objets derives ne sont pas compatible entre eux ? Voici un exemple : class object (class_name : string) = val name = class_name method get_name = name and o_int (new_i : int) = inherit object "o_int" val i = new_i method get_value = i and o_float (new_f : float) = inherit object "o_float" val f = new_f method get_value = f end let o1=new o_int 1;; let o2=new o_float 2.5;; let l = [(o1 :> object); (o2 :> object)];; (* ces fonctions permettent de convertir un objet generique *) (* en objet derive *) let o_int o = (Obj.magic o : o_int);; let o_float o = (Obj.magic o : o_float);; (* mais comment ecrire une fonction qui a partir du nom de *) (* de l'objet (methode get_name) renvoie soit un o_int soit *) (* soit un o_float ? *) Merci d'avance si vous pouvez m'eclaircir les idees a ce sujet... -- Vyskocil Vladimir vyskocil@math.unice.fr http://www.inria.fr/safir/WHOSWHO/Vladimir.html