Logo
HomeCoCompose2DocumentationDownloadPublicationsContactEventsLinks

Introduction to CoCompose:

In current object-oriented (OO) design approaches (e.g. UML), the initial design of a system is modelled using conceptual design language elements. The elements of this initial design are then gradually refined towards an implementation. This refinement is currently not supported by the design language. A refined version of the design is made, in which each of the original (conceptual) elements is replaced by the refined element(s). By doing so, other feasible refinements are eliminated prematurely. In a later stage it may appear that other refinements would have been better.

The refinement of elements continues up to a point where they are close to implementation language constructs, but still independent of specific implementation languages. All these refinements require additional design language constructs. For example, to refine an association relation to an attribute, it must be possible to express attributes. With the introduction of new software development technologies, such as component-based software development (CBSD), aspect-oriented software development (AOSD), and design patterns, new design language constructs are required to represent the concepts they introduce. Extensions to UML have already been proposed to support these technologies on design-level, introducing several additional design language constructs. The number/complexity of alternative refinements increases with each additional design language construct. This makes it hard to choose one specific refinement. Other feasible refinements are eliminated, since only one refinement is chosen.

CoCompose is a design approach that allows for defining several possible refinements for each design element. CoCompose uses a design language that is based upon conceptual elements. These elements can have several layered refinements. Refinements are represented as structures of existing design language constructs, instead of introducing new design language constructs for each refinement. This way, refinement can be done up to and including the implementation level without introducing the implementation language constructs to the design language.

The general idea behind CoCompose is based upon synthesis-based design. This approach builds on the idea that there are many possible ways to design each specific software element. All these design alternatives create a design space of possible combinations of these design alternatives. Design algebra is introduced as a mechanism to eliminate non-feasible design alternatives and derive the optimal alternative. The CoCompose design language allows for modelling these design alternatives. An automated translation process, based upon design algebra, has been developed to determine which refinements to use and to generate an implementation.

CoCompose summary

Getting started with CoCompose:
To get started with CoCompose, we recommend you to read some papers first to become familiar with the CoCompose concepts. The following paper should get you started. If you need more background information, we refer to the publications section.

Could not connect to R&D database