And let's start with software components. A
software component is an architectural entity that encapsulates
a subset of the system's functionality and or
the system's data. So basically components typically provide
application specific services. In addition to that, a
software component also restricts access to that subset
via an explicitly defined interface. And, in addition,
which I'm not showing here, a component
can also have explicitly defined dependencies
on its required execution environment. In complex
systems, interactions might become more important and
challenging than functionality. And this is why
connectors are very important architectural elements. A
software connector is an architectural building block
tasked with effecting and regulating interactions among
components. So basically, connectors typically provide application
independent interaction facilities. And it's worth noting here
that in many software systems, connectors might simply be
procedure calls or shared data accesses. So all constants
that we're familiar with. But consider that much more
sophisticated and complex connectors are also possible. And
components and connectors are composed in a specific way
in a given system architecture to accomplish that system's
objective And this is expressed through an architectural configuration.
More precisely, an architectural configuration, or topology, is a
set of specific associations between the components and connectors
of a software system's architecture. So now, let's look
at an example that brings all of this together.