[Zope] "Acquisition Algebra"; interaction of containment and acquisition is confusing
Evan Simpson
evan@4-am.com
Fri, 26 Jan 2001 11:14:25 -0500
From: Fred Yankowski <fred@ontosys.com>
> for the very last case, "a.b.c.x". I just can't follow why the
> equivalent expression isn't
>
> x.__of__(a).__of__(c.__of__(b.__of__(a)))
>
> rather than the more complex answer given:
>
> x.__of__(a).__of__(b.__of__(a)).__of__(c.__of__(b.__of__(a)))
You can expand any access path into an acquisition expression using the
following 3-1/2 rules:
1. Given an unwrapped object 'x', x.child = (child o x)
2. Given a wrapper (self o parent),
a. (self o parent).child = self.child o (self o parent) if 'child' is
found in 'self'.
a. (self o parent).child = parent.child o (self o parent) if 'child' is
found in 'parent'.
3. Reduce ((a o b) o (b o c)) to (a o (b o c)) as soon as it appears.
So, a.b = (b o a). a.b.c = (b o a).c = (b.c o (b o a)) = (c o (b o a)).
Finally, a.b.c.x = (c o (b o a)).x = ((b o a).x o (c o (b o a))) =
((a.x o (b o a)) o (c o (b o a))) = (((x o a) o (b o a)) o (c o (b o a)))
> When I run the test cases given in the document I see that the latter
> does match the behavior, but I find that baffling. In particular, why
> is the effective search order x-a-b-c rather than x-a-c-b? It almost
> looks like the effective search order could be described as "up
> through the containment heirarchy, then down through the remaining
> acquired path", but I'm not at all sure if that's a valid
> generalization.
Almost. It's "up through the containment hierarchy, then the rest of it
somehow". Trying to control or predict the exact search order for any but
the simplest acquisition trees is a dangerous game. You can read it off
directly from the algebra form, as in (((x o a) o (b o a)) o (c o (b o a)))
=> x, a, b, c (ignoring duplicates), but it's unlikely to be useful, as you
saw.
Cheers,
Evan @ digicool & 4-am