A system specifies which components are used within an application and how they communicate. Within the system, the required interfaces of components are connected to provided interfaces other components. That way it is determined which concrete external services are called by a component.
A component can be used multiple times within a single system. Figure 2.9 illustrates this with a simple example. Three different types of components exist in the system shown there. On the right hand side, we have two I/O components that manage the access either to a file or network connection. Two different kinds of caching components that implement different caching strategies are shown in the middle. The SyncCache component on the left-hand side allows multiple tasks to access the caches concurrently without producing an incorrect state of the connected single-threaded caches.
The same component (SyncCache) is inserted at two different locations within the system. Both representations of the component are connected differently. Thus, users or other components that call the services provided by the different component representations will experience different QoS on the provided interfaces of the respective component representations. This is caused by the different caching strategies and I/O devices used by the SyncCache components. Modelling the component context explicitly allows us to hold the information on the diverse connections and the resulting quality attributes without changing the component specification.