Software architecture and components are closely related. All software systems have an architecture that can be viewed in terms of the decomposition of the system into components, connectors, and attachments representing units of system functionality and their potential run-time interactions. Placing constraints on their interactions permits the assembly of groups of component and connector types into families of systems designated architectural styles. Patterns of interaction can support reasoning with respect to certain system-related quality attributes such as modifiability, reliability, and confidentiality.
Traditionally, software architecture is focused on in the early design phase when the overall structure of the system is designed to satisfy functional and non-functional requirements. In monolith applications, the architecture specified in the design process is concealed at execution time in one block of executable code. Component technologies focus on composition and deployment, closer to or at execution time. In a component-based system, the architecture remains recognisable during the application or system execution, the system still consisting of clearly separated components. The system architecture thus remains an important factor during the execution phase. Component-based Software Engineering embraces the total lifecycles of components and component-based systems and all the procedures involved in such lifecycles. It is therefore of interest to consider the similarities and differences between software architecture and component-based development. The aim of this chapter is to show components and component-based systems from software architecture point of view.
In chapter 3 Architecting Component-based Systems, Jan Bosch and Judith Stafford provide a birds-eye view of software architecture and relate this subject, with particular reference to architectural style, to the development of component frameworks, the analysis of component-based systems for functional and extra-functional correctness, and to the more general problem of creating systems from software components.
In chapter 4 Component Models and Technology, Jacky Estublier and Jean-Marie Favre present a survey of several component models (Java Bean, CORBA Component model, .NET Component Model and “Open Service Gateway Initiative” Component Model) from the software architecture point of view. The main characteristics of Architectural Definition Languages are described first, these being subsequently used in descriptions of component models. In addition to the main characteristics of each component model, the following component forms are presented: the interface of a component, the implementation of a component, component assembly, component packaging and deployment.