XOTcl premiers pas: Class

 

Après avoir exploré XOTcl premiers pas: Object, me voici prêt à créer un objet plus compliqué, la classe "Piece", capable de définir des instances (objets instanciés).

 Class create Piece

Grace au mécanisme unknown, le flemmards peuvent aussi écrire simplement

 Class Piece

"Piece" est maintenant une commande Tcl. C'est une classe, mais aussi un objet. J'ai donc la commande "Piece proc ..." tout comme j'avais la commande "cuisine proc ...". Ça me permettrait de créer une méthode associée à l'objet "Piece", mais ce que je souhaite, c'est créer des méthodes associées aux objets que je créerai dans le futur. C'est la commande "Piece instproc ..." qu'il faut utiliser. "instproc" veut dire "proc des instances de la classe"

 Piece instproc entre {nom} {
     my set NOMS($nom) {}
 }
 Piece instproc qui {} {
     return [my array names NOMS]
 }

Maintenant je crée un objet de la classe "Piece"

 Piece create salon

Et je peux retrouver les méthodes "entre" et "qui"

 salon entre tatie
 salon entre maman
 salon qui

Flute, j'ai oublié de créer la méthode "sort". Pas grave, XOTcl traite les objets de manière dynamique. Je peux compléter la classe "Piece", l'objet "salon" en bénéficiera

 Piece instproc sort {nom} {
     my unset NOMS($nom)
 }

 salon sort tatie
 salon qui

J'ai dit que "Piece" était un objet. Je lui applique la procédure "montre_tout"

 montre_tout Piece

Je retrouve des informations nouvelles, comme l'héritage :

 class -> ::xotcl::Class
 parent -> ::
 children ->
 vars ->
 commands ->
 procs ->
 filter ->
 invar ->
 mixin ->
 forward ->
 methods -> __next abstract alloc append array autoname check class cleanup configure copy create defaultmethod destroy eval exists extractConfigureArg filter filterappend filterguard filtersearch forward hasclass incr info init instdestroy instfilter instfilterappend instfilterguard instforward instinvar instmixin instmixinappend instmixinguard instparametercmd instproc insttclcmd instvar invar isclass ismetaclass ismixin isobject istype lappend mixin mixinappend mixinguard move new next noinit parameter parameterclass parametercmd proc procsearch recreate requireNamespace self set superclass tclcmd trace unknown unset uplevel upvar volatile vwait
 *** informations restantes : ***
 instances -> ::salon
 subclass ->
 parameter ->
 heritage -> ::xotcl::Object
 instforward ->
 instmixin ->
 instdefault -> wrong # args: should be {::Piece info instdefault <instproc> <arg> <var>}
 instpre -> wrong # args: should be {::Piece info instpre <proc>}
 superclass -> ::xotcl::Object
 instinvar ->
 instfilterguard -> wrong # args: should be {::Piece info instfilterguard filter}
 classparent -> ::
 instcommands -> sort entre qui
 instpost -> wrong # args: should be {::Piece info instpost <proc>}
 instfilter ->
 instbody -> wrong # args: should be {::Piece info instbody <instproc>}
 instprocs -> sort entre qui
 classchildren ->

La commande "montre_tout" n'est pas complète. Qui veut peut la compléter.

Avant de passer à XOTcl premiers pas : instproc, proc et next, quelques petits points de vocabulaire.