Re: port des d finitions des variables de classe

From: Sylvain BOULM'E (Sylvain.Boulme@lip6.fr)
Date: Tue Oct 06 1998 - 14:35:01 MET DST


Message-Id: <199810061235.OAA13442@ventoux.lip6.fr>
To: Serge Fantino <fantino@math.unice.fr>
Subject: Re: port des d finitions des variables de classe
Date: Tue, 06 Oct 1998 14:35:01 +0200
From: "Sylvain BOULM'E" <Sylvain.Boulme@lip6.fr>

Bonjour,

Il me semble que c'est dans la semantique des classes
de Ocaml, qui supportent desormais les "variables statiques de classes"
partagees par tous les objets de la classe. (Les gens de Ocaml me
corrigeront ...)

Ainsi,

class test1 =
object
    val v = ref 5
    method get = !v
    method set x = v:=x
end;;

est equivalent a

class test1 = let v1=ref 5 in
object
    val v=v1
    ...

Dans les 2 cas,

let a=new test1 and b=new test1 in (b#set 4; a#get);;

retourne 4.

Par contre c'est different de

class test2 () = let v1=ref 5 in
object
    val v=v1
    ...

let a=new test2 () and b=new test2 () in (b#set 4; a#get);;

retourne 5.

Encore mieux,

let f=new test2;;
retourne
val f : unit -> test2 = <fun>

Une classe sert en fait a generer (au travers du new) des fonctions
a valeur dans les objets (de cette classe). Et comme pour les autres
fonctions de Caml, on a la possibilite d'utiliser des variables locales...

Sylvain.

PS: j'aurai pu ecrire aussi test2 sous la forme

class test2 () =
object
  val v=ref 5
  ...

Il est aussi interessant de remarquer que

class test3 =
object
    val mutable v = 5
    method get = v
    method set x = v<-x
end;;

let a = new test3 and b=new test3 in (b#set 4; a#get);;

retourne 5



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:16 MET