Architectural Pattern for Software Components
Context
-  A common way to handle system complexity is Component-Based Software Engineering 
-  Individual components are composable building-blocks that can be (re-)used in different applications (i.e. systems) 
-  Components in a system are not independent of each other but need to exchange data 
-  Interconnected components realize (and collaboratively execute) overall system functions (e.g. the  navigation stack- ) 
Modeling and developing a software component is the main responsibility of Component Suppliers.
This architectural pattern relates to the following abstraction levels:
-  Skill (level) requires a coordination interface for each component 
-  Service (level) specifies interaction points to other components (i.e. the communication concern) 
-  Function (level) realizes the component’s internal functionality 
-  Execution Container (level) links functionality with the execution platform (i.e. the computation concern) 
-  Hardware (level) allows to directly interact with sensors and/or actuators within a component 
 
Problem
-  The overall system behavior at run-time is the result of sets of interconnected components that need to be executed in a systematic and deterministic way. 
-  Real-world environments are open-ended and unpredictable in nature which requires a certain adaptability and flexibility of the robot system behavior. 
-  There are cases where several provided services might need to be realized in a single component (e.g. because the used library cannot be separated into several components) 
-  The overall role of a component is manifold: - 
-  to realize a coherent set of provided services 
-  to specify dependencies to other services (provided by other components) 
-  to encapsulate (i.e. decouple) the functional (internal) realization of services from their general representation on system level 
-  to specify allowed configuration options and possible run-time modes (i.e. to be used from the skill level) 
-  to hide platform-related details such as communication middleware, operating system and internally used device drivers (i.e. mapping to the execution container and interacting with sensors/actuators) 
 
 
Solution
The concept of a component spans across several abstraction levels:
 
From a functional point of view, a component spans over “Execution Container”, “Function”, “Service” and optionally also the “Skill” levels. From the robotic behavior coordination point of view, a component is on the level of robotic skills1).
A flexible component model that allows different bundlings of several provided services and that decouples the service definition from its realization within a component:
-  a component can realize more than one provided service but a certain provided service is realized by exactly one distinct component 
-  a component should implement or use a service but not define it (service definition is a separated step) 
In addition to the “regular” services a component also implements a generic configuration and coordination interface that provides access to:
-  the component's life-cycle state automaton 
-  admissible run-time modes (i.e. activity states) 
-  the component's configuration parameters (i.e. allowed parameter sets) 
-  the coordinated dynamic wiring of component’s services (i.e. without conflicting with the component's internal functionality) 
See also:
 
Acknowledgement
This document contains material from:
 
                    
                                     
                                general_principles:architectural_patterns:components · Last modified: 2019/05/20 10:49
http://www.robmosys.eu/wiki-sn-02/general_principles:architectural_patterns:components