CodA is an object meta-level architecture which features decomposition by logical behaviour as its primary design guideline The basic idea is to try (obliquely) and address the software engineering problems which occur in so called 'monolithic' meta-architectures. By applying common OO programming techniques of decomposition we can enhance understanding and re-use and take some small steps towards the demystification of meta-level programming.

In concrete terms, rather than having one meta-entity which logically describes all aspects of object behaviour, CodA has many smaller entities (meta-components) each of which describes one small, largely orthogonal, aspect (behaviour) of an object. The important points here are: 1) a relatively fine-grained decomposition and 2) realization of the decomposition with objects (rather than methods).

Object behaviour is defined by component composition. Since each meta-component's API is small, simple and clear, they can be combined and re-used in many different contexts.

Realization of this via objects rather than methods further facilitates composition and the construction of complex behaviours. Other meta-architectures decompose the meta-level to a similar (or finer) granularlity as CodA but they implement their units of behaviour (i.e., components) as methods on some monolithic (set of) meta-objects. We feel that this is somehow fundamentally counter to sound software engineering practices.

The main problem is that in creating object behaviours which involve several meta-level components there is no basis for interaction. Their components are, at best, method objects with no durable state or interaction protocol. Cooperation and contention are only be represented in code.

In contrast, CodA components are real objects and have a simple, known interface. Their fine granularity reduces the possibility/ramifications of contention and allows meta-level programmers to limit the effects of their changes.

CodA does not solve the composition problem. Users wishing to compose object models whose behaviours conflict are still faced with a problem. CodA does however, help in identifying the location and scope of the problem. In addition, since many object models are built from the same fundamental meta-components, new meta-components which resolve conflicts between two particular object models are immediately available for use in resolving other conflicts.

Several documents describing CodA and related projects are available on-line.

|m 94.03.23