After this interesting conversation with Neno, let me start
the lesson by defining what a software architecture is.
And to do that, I'm going to use two
seminal definitions. The first one is from Dewayne Perry
and Alex Wolf. And they define a software architecture
as elements, form and rationale. In this definition, the
elements are the what, which means the processes, data,
and connectors that compose a software architecture. The form
is the how, the set of properties of
in relationships among these elements. And, finally, the rationale
is the why, the justification for the elements and
their relationships. The second definition I want to use
is from Mary Shaw and David Garland. And
they defined a software architecture as a level of
design that involves four main things, a description of
elements from which these systems are built, the interactions
among those elements, the patterns that guide their composition, and
finally, the constraints on these patterns. As you can see, these
definitions are fairly similar and there are many more alternative
definitions of software architecture. In fact, if we try to search
the term software architecture, we get over two million entries.
And if we look at the images in the results of
the search this is what we get. And I like this
sort of graphical depiction because it gives you a clear idea
the software architecture are prevalent concept, given the number of
results. But they also show you clearly, that software architecture are
complex entities, if you look at some of these pictures.
And ultimately, they show that software architecture are presented in all
kinds of ways including in 3D, if you look at this
picture. We cannot clearly cover all of these definitions in one
lesson. So what I will do instead, is to introduce
a very general definition that encompasses most of the existing ones.