Book Description
Software engineering for complex systems requires abstraction, multi-domain expertise, separation of concerns, and reuse. Domain experts rarely are software engineers and should formulate solutions using their domain's vocabulary instead of general purpose programming languages (GPLs). Successful integration of domain-specific languages (DSLs) into a software system requires a separation of concerns between domain issues and integration issues while retaining a loose enough coupling to support DSL reuse in different contexts. Component-based software engineering (CBSE) increases reuse and separation of concerns by encapsulating functionalities in components. Components are GPL artifacts, which raises accidental complexities. Model-driven engineering (MDE) abstracts from GPLs by lifting models to primary development artifacts. Models can be abstract and better comprehensible by using domain vocabulary instead of a GPL. They can be platform-independent and translated into GPLs for different target platforms. Component & connector (C&C) architecture description languages (ADLs) combine CBSE and MDE to compose of architectures from component models. We present concepts for engineering software systems with exchangeable component behavior languages. The concepts are realized in a software architecture modeling infrastructure that comprises modeling languages to develop applications based on C&C software architectures with exchangeable component behavior DSLs. It supports transformations from platform-independent to platform-specific software architectures and compositional code generation. With this, it enables domain experts to (re-)use the most appropriate component behavior DSL and facilitates composition of domain solutions through encapsulation in components.