* Jalote Chapter 5 - Software Architecture
* what is "software architecture"?
one definition: (that Jalote references from
a *software* architecture text):
"The software architecture of a system is the
structure OR STRUCTURES of the system which
comprise
* software elements,
* the externally visible properties of those
elements, and
* the relationships among them."
...hopefully, provides for USEFUL abstraction of
the system;
* since software architecture partitions
a system into LOGICAL parts,
... there can be MULTIPLE architectural views
of the same system;
(more than one way to logically partition
it)
... (and for different purposes, such different
views may reveal different insights about
the system)
* why might a software project team create and
document such architectural structure?
* UNDERSTANDING and COMMUNICATION
...within the team
...amongst other stakeholders as well
(that software project team,
and the users who'll use the system,
the clients who commissioned the system,
* may help with potential reuse of components
* may help in planning construction and evolution
* may allow for additional analysis...!
* Architecture views
* a view consists of elements and relationships
between them, and describes a structure
* the elements of a view depend on what the view
seeks to highlight
* many types of views have been proposed;
most belong to one of these 3 types:
* module
* component and connector
* allocation
...not unrelated!
.. but they are different views of the SAME
system, each representing the same system;
* module view -
* looking at a system as a collection
of (static) code units -- they do
not represent runtime entities
* elements in this view may be
modules such as: class, package, function,
procedure, trigger, etc.
* relationships in this view are code-based --
part of, depends on, calls,
generalization-specialization
* component and connector view
* elements are run-time entities called components
* that is, a component is a unit that has identity
in an executing system -- objects, processes,
.exe, .dll
* connectors provide a means of interaction
between components -- pipes, shared memory,
sockets
* allocation view
* focuses on how software units are allocated
to resources like hardware, file systems,
people
* i.e., specifies the relationship between
software elements and execution units
in the environment
* exposes structural properties such as
which process runs on which processor,
which file resides where, etc.
* note how different views may be necessary for
different goals --
may need an allocation view for certain kinds
of performance analysis, may need a module
view for project implementation planning,
may need component and connector (C&C) view for
both analysis and planning, etc.
* Jalote notes that the C&C view is almost always
done, and has become the primary view
* C&C in a little more detail:
* two main elements: components and connectors
* components: computational elements or data stores
* connectors: means of interaction between
components
* a C&C view defines the components,
and which components are connected
through which connector(s)
* describing runtime structure!
* a C&C view is typically a graph;
often shown as a box-and-line drawing