Coordination Patterns for Component-Based Systems * L.F.Andrade 1,2 , J.L.Fiadeiro 2,3 , J.Gouveia 1 , G.Koutsoukos 1 , A.Lopes 3 and M.Wermelinger 4 1 OBLOG Software S.A. Alameda António Sérgio 7 2795 Linda-a-Velha, Portugal {landrade,jgouveia,gkoutsoukos}@oblog.pt 2 ATX Software S.A. Alameda António Sérgio 7 2795 Linda-a-Velha, Portugal 3 Dept. of Informatics Faculty of Sciences, University of Lisbon Campo Grande, 1700 Lisboa, Portugal mal@di.fc.ul.pt, jose@fiadeiro.org 4 Dept. of Informatics Faculty of Sciences and Technology, New University of Lisbon Quinta da Torre, 2825 Monte da Caparica, Portugal mw@di.fct.unl.pt Abstract. The separation between computation and coordination offers the possibility for systems to be evolved through the addition, deletion or substitution of the connectors that coordinate the interac- tion between their components, without interfering with the computations that are performed locally. Ideally, this form of evolution should be applicable regardless of the languages in which these computa- tions are programmed, thus allowing for the integration of third-party, closed components, like legacy systems. In order to establish universal principles that support this level of generality, we propose a mathematical pattern that clarifies essential mechanisms of coordination that support evolution, and a design pattern that allows for such mechanisms to be implemented in platforms for component-based system development like CORBA, EJB and COM. 1 Introduction The separation between computation and coordination, as proposed by recent languages and models [18], has opened important new perspectives for supporting extendibility of systems, i.e. the possibility of adapting soft- ware systems to changes in requirements in an easy way. The evolutionary model that we have been developing, as a genuine, and fruitful, collaboration between academia and industry, is based on the representation of the more volatile aspects of the application domain (e.g. business rules, adapters, monitors) as connectors whose purpose is to coordinate the interaction among core, more stable, components. The idea is that, in this way, evolution can be made to be compositional over the changes that occur in the application domain through the addition, deletion or substitution of connectors, without interfering with the services provided by the core objects of the system. The applicability of this particular approach to evolution has been demonstrated in the field through the devel- opment of software systems in a number of domains using the OBLOG tool [www.oblog.com]. OBLOG pro- vides a language and family of tools for supporting object-oriented development. One of the features that distin- guish it from other products in the market is its collection of primitives for modelling the behavioural aspects of systems. These include the notion of coordination contract [3], a semantic primitive corresponding to connectors as used in Software Architectures [1], which we brought into OO modelling as a means of supporting the coordi- nation layer required by the approach that we described above. Ideally, this method for evolving systems should be applicable regardless of the languages in which the core objects are programmed, thus allowing for the integration of third-party, closed components, like legacy systems. For such a general support to be possible, we need to abstract away from the specific coordination languages and * This paper is an extended and updated version of [6]. This work was partially supported by Fundação para a Ciência e Tecnologia under contract POSI/32717/CHS/2000.