next up previous contents index
Next: Table comparative sommaire Up: Le paradigme Target/Action Previous: Le paradigme Target/Action

Un Interface-Builder typé?

On peut imaginer de pouvoir construire des outils similaires sans ces contraintes si on renonce à la flexibilité que l'on obtient en exposant séparément le target et l'action. On aurait alors, on Objective Caml,

#class slider p =

val mutable pos = p

val mutable action = fun () -> ()

method pos = pos

method setAction f = action <- f

method sliderMoved n = pos <- pos+n; action()

method stringValue = string_of_int pos

method print () = print_int pos

end;;

class slider (int) = val mutable action : unit -> unit val mutable pos : int method pos : int method setAction : (unit -> unit) -> unit method sliderMoved : int -> unit method stringValue : string method print : unit -> unit end

class textfield (s:string) =

val mutable stringValue = s

method stringValue = stringValue

method setstringValue sv = stringValue <- sv

end;;

class textfield (string) = val mutable stringValue : string method stringValue : string method setstringValue : string -> unit end

let s = new slider 0;;

val s : slider = <obj>

let t = new textfield "";;

val t : textfield = <obj>

s#sliderMoved 3;;

  • : unit = ()

    t#stringValue;;

  • : string = ""

    s#setAction (fun () -> t#setstringValue s#stringValue);;

  • : unit = ()

    s#sliderMoved 3;;

  • : unit = ()

    t#stringValue;;

  • : string = "6"

Cependant, on ne peut pas passer à l'objet recevant l'action l'objet qui la déclenche, et cela réduit la généralité du mécanisme.



Roberto DiCosmo
Mon Jun 3 18:29:31 MET DST 1996