next up previous
Next: Composers Up: The Meta-level Protocol of Previous: The kernel of Guaranį

Meta-Objects

We define a meta-object as a compoundable meta-level object responsible for implementing part of the reflective behavior of an application. Each object may be directly associated with either zero or one meta-object, called the primary meta-object of that object. Its role is to observe all operations addressed to its associated object, as well as their results. The observation is guaranteed by the interception and reification mechanisms implemented in the kernel.

A class can also be associated with a primary meta-object, that will observe all class-related operations, and no instance-related ones. Thus, the meta-objects of classes and its instances are independent of each other. Even if a class is associated with a meta-object, if some of its instances are not, operations addressed to these instances will not be intercepted.

Software engineering techniques, inclusive object-oriented, recommend the design and implementation of highly coherent and loosely coupled objects. One of the interesting attributes of Guaranį is its support for transparent loose coupling between objects. In Guaranį, unlike most of the other existent reflective architectures, base-level objects do not refer to their meta-level counterparts; they are not allowed to obtain references to their meta-objects. Coupling between object and meta-object is supported by the interception and reification of operations and by a dynamic binding mechanism; the kernel method reconfigure is responsible for binding objects to their meta-objects.

A primary meta-object inspects operations and reflects upon their contents, returning to the kernel one of three possible outcomes:

1.
a result, that will be regarded by the kernel as if it were produced by the actual execution of the operation;
2.
a replacement operation, that the kernel will deliver to the base-level object, discarding the original one; or
3.
none of the above, i.e., the kernel will deliver the original operation to the application object.

In the alternatives 2 and 3, where the meta-object does not provide a result, it may signal to the kernel that it intends to inspect or even to modify the result of the operation. In this case, after the operation is performed, the kernel will reify its result and present it to the primary meta-object. At this point, the primary meta-object may perform any appropriate action. For example, it may compute a different result for the operation, and return it. The kernel will only accept this modified result if the meta-object had indicated that it would modify it.


next up previous
Next: Composers Up: The Meta-level Protocol of Previous: The kernel of Guaranį
contact the authors