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 IAA27392 for caml-redistribution; Thu, 5 Nov 1998 08:44:16 +0100 (MET) 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 KAA04946 for ; Wed, 4 Nov 1998 10:43:05 +0100 (MET) Received: from julie.univ-savoie.fr (univax.univ-savoie.fr [193.48.120.32]) by nez-perce.inria.fr (8.8.7/8.8.7) with ESMTP id KAA01172 for ; Wed, 4 Nov 1998 10:43:03 +0100 (MET) Received: from univ-savoie.fr (raffalli@bppp3.univ-savoie.fr [193.48.120.22]) by julie.univ-savoie.fr (8.9.0/jtpda-5.2) with ESMTP id KAA03477 ; Wed, 4 Nov 1998 10:44:48 +0100 (MET) Sender: weis Message-ID: <364021C8.4839CF96@univ-savoie.fr> Date: Wed, 04 Nov 1998 10:43:36 +0100 From: Christophe Raffalli Organization: =?iso-8859-1?Q?Université?= de Savoie X-Mailer: Mozilla 4.5 [en] (X11; I; Linux 2.0.33 i686) X-Accept-Language: en MIME-Version: 1.0 To: Serge Fantino , caml-list@inria.fr Subject: Re: Sharing inheritance ? References: <363D7C18.FE3FB555@univ-savoie.fr> <363F3B0C.C2EACDBC@math.unice.fr> Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Serge Fantino wrote: > > Christophe Raffalli wrote: > > > I have a problem with the following situation: > > > > ... > > Losque tu définis d, c'est bien ce qui se passe: la variable d'instance v > communeaux classes b & c est "mergée" dans la classe d (d'où le warning > < variable of the same name>>) > La conséquence c'est que getb/getc (resp. set) accèdent à la meme valeur de v, > c'est à dire celle définie pour la classe d; par contre oldget accède à la var. v > définie dans le context de super, qui n'est pas surchargé. Non, il y a deux valeurs de v qui sont stockes (comme le montre le o#oldget). Les methodes sont surchargees de sorte que les methodes de "a" venues du premier "inherit b x" ne sont pas accessibles si on ne les renomme pas a la main (ce que fait "oldget"). Le partage me parait une meilleur solution, avec un renommage explicite sin on ne veut pas partage (je ne vois pas de syntaxe possible pour demander un partage explicite dans la version actuelle). > > Pourquoi alors vouloir que d hérite syntaxiquement de b et c ?Il me semble plus > simple de définir: > class d x = > object > val b = new a x > val c = new a x > method getb=b#get > method setb=b#set > method getc=c#get > method setc=c#set > end les classes b et c peuvent avoir un interet propre et on peut ne pas vouloir reecrire toutes le methodes de d. La situation ou la methode arrive dans mon cas particulier: class a : matrice legere (on peut faire un minimum (produit matrice vecteur)) class b : matrice ligne (on peut iterer une fonction sur les element non nulls de chaque ligne de maniere efficace) class c : matrice colonne (on peut iterer une fonction sur les element non nulls de chaque colonne de maniere efficace) class d : matrice ligne et colonne a la fois. quelques remarque: on a: class transpose_a : a -> a class transpose_b : b -> c class transpose_c : c -> b class transpose_d : d -> d > > --- > > > > Moreover, the follwing would become possible: > > > > class d = > > object > > inherit b 0 with v -> v0 as b0 > > inherit b 1 with v -> v1 as b1 > > inherit b 2 with v -> v2 as b2 > > end > > ;; > > Ici, tu veux que d soit la réunion de 3 instances de b;il n'y a pas de raison que > d hérite 3 fois de b ? > comment accèdes tu ensuite aux valeurs V0,v1,V2 ? > Ici je veux dire on herite 3 fois de b, le v du inherit b 0 s'appelle maintenant v0 et les methodes sont accessibles par b0#xxx. De meme pour les deux autres inherit Christophe Raffalli