No registered users in community xowiki
in last 10 minutes
in last 10 minutes
Re: [Xotcl] Mixins don't respect class hierarchy
From: Gustaf Neumann <neumann_at_wu.ac.at>
Date: Thu, 23 Feb 2012 12:31:49 +0100
Dear Artur,
the mixins respect the class hierarchies, but maybe in a
different way than you expected. Mixin classes have a higher
precedence than the intrinsic classes (the actual class
structure implied by the "class" relation and the
"superclass" relations of this class). The details of the
mixin semantics and mixin composition is defined in detail
in the following paper:
http://nm.wu-wien.ac.at/research/publications/b613.pdf
As a summary, the full precedence order of an object is
POMs PCMs O C
where
POMs: a sequence of per-object mixins (classes, implying
their super-classes)
PCMs: a sequence of per-class mixins (classes, implying
their super-classes)
O: the actual object, not shown in "info precedence"
C: the class of the object (implying its super-classes)
Mixins are sometimes criticized for their "total composition
ordering"; a more fine-grained control can be provided via
traits, see for an introductory example in:
http://nm.wu-wien.ac.at/research/publications/b886.pdf
all the best
-gustaf neumann
On 23.02.12 11:29, Arthur Schreiber wrote:
> Hello Gustaf,
>
> playing around with mixins, I came across the following behaviour:
>
> package require nx
>
> nx::Class create TestMixin {
> :public method test {} {
> puts "mixin"
> }
> }
>
> nx::Object mixin TestMixin
>
> nx::Class create TestClass {
> :public method test {} {
> puts "class"
> }
> }
>
> set test [TestClass new]
> puts [$test info precedence]; # => ::TestMixin ::TestClass ::nx::Object
> $test test; # => mixin
>
> Is that intended? I would have expected that the class hierarchy of
> ::TestClass instances would look like "::TestClass ::TestMixin
> ::nx::Object".
>
> Kind regards,
> Arthur
> _______________________________________________
> Xotcl mailing list
> Xotcl_at_alice.wu-wien.ac.at
> http://alice.wu-wien.ac.at/mailman/listinfo/xotcl
Date: Thu, 23 Feb 2012 12:31:49 +0100
Dear Artur,
the mixins respect the class hierarchies, but maybe in a
different way than you expected. Mixin classes have a higher
precedence than the intrinsic classes (the actual class
structure implied by the "class" relation and the
"superclass" relations of this class). The details of the
mixin semantics and mixin composition is defined in detail
in the following paper:
http://nm.wu-wien.ac.at/research/publications/b613.pdf
As a summary, the full precedence order of an object is
POMs PCMs O C
where
POMs: a sequence of per-object mixins (classes, implying
their super-classes)
PCMs: a sequence of per-class mixins (classes, implying
their super-classes)
O: the actual object, not shown in "info precedence"
C: the class of the object (implying its super-classes)
Mixins are sometimes criticized for their "total composition
ordering"; a more fine-grained control can be provided via
traits, see for an introductory example in:
http://nm.wu-wien.ac.at/research/publications/b886.pdf
all the best
-gustaf neumann
On 23.02.12 11:29, Arthur Schreiber wrote:
> Hello Gustaf,
>
> playing around with mixins, I came across the following behaviour:
>
> package require nx
>
> nx::Class create TestMixin {
> :public method test {} {
> puts "mixin"
> }
> }
>
> nx::Object mixin TestMixin
>
> nx::Class create TestClass {
> :public method test {} {
> puts "class"
> }
> }
>
> set test [TestClass new]
> puts [$test info precedence]; # => ::TestMixin ::TestClass ::nx::Object
> $test test; # => mixin
>
> Is that intended? I would have expected that the class hierarchy of
> ::TestClass instances would look like "::TestClass ::TestMixin
> ::nx::Object".
>
> Kind regards,
> Arthur
> _______________________________________________
> Xotcl mailing list
> Xotcl_at_alice.wu-wien.ac.at
> http://alice.wu-wien.ac.at/mailman/listinfo/xotcl