C2 Style

The C2 Style

C2 is UCI's component- and message-based architectural style for constructing flexible and extensible software systems. A C2 architecture is a hierarchical network of concurrent components linked together by connectors (or message routing devices) in accordance with a set of style rules. C2 communication rules require that all communication between C2 components be achieved via message passing.

Central to the architectural style is a principle of limited visibility, or substrate independence: a component within a given architecture is only aware of services provided by components "above" it in the hierarchy, and is completely unaware of services provided by components "beneath" it. This makes component substitutability tenable, thus promoting component reuse and system extensibility. Click here for a more detailed discussion of C2 style rules.

To learn more about C2, we have a number of technical papers on C2.

C2 Architecture Description Languages

Architecture description languages (ADLs) are the means by which software architectures are defined. ADLs enable software architects to express high level system structure by describing its coarse-grained components and connections among them. Such specifications reduce the cognitive load on designers and enable system-level analysis and code generation. We have developed an ADL for C2-style architectures.

C2 Frameworks

The C2 style focuses on the conceptual architecture of a system, independently of a particular implementation architecture. UCI's Java and C++ class frameworks for C2 concepts, such as components, connectors, and messages, provide development support for implementing C2 architectures in Java and C++. Components, connectors, and messages are explicitly represented as objects. Components may have their own memory space and thread(s) of control, or may share with other components. Components may run on different machines in a network. Architectures may be dynamically reconfigured.

See a selection of C2 Software. This includes a simple graphics application of a Stack and also includes the C++ and Java class frameworks.