The object-oriented (OO) paradigm claims to promote reuse, reduce
development time and improve software quality. Originally these properties
were considered at the level of single objects, and were achieved using
libraries of reusable classes organized in hierarchies of inheritance.
However, attention is now being shifted from individual objects to the whole
architecture by giving more importance to the fundamental role that rela-
tionships between the elements have in any design. As software systems
grow in size and complexity, the design and architecture of a software
program represent an increasingly large part of the development effort.
In Part I of this topic, we focused on the basic building blocks of object-
oriented analysis and design. The transition from problem specification to
application design was quite seamless: most of the entities found in the
problem domain were mapped into classes in the solution domain.
When dealing with more complex applications (e.g. concurrent appli-
cations), we observe that simple analysis models (e.g. identification of nouns
and verbs in the problem specification) are not suitable for implementation.
We need to turn them into design models that take into consideration
not only functional requirements (what the application does), but non-
functional requirements as well; in particular we have to consider feasibility
First of all the design must be feasible, i.e. it must be relatively easy to
implement in a programming language. It is important to reduce the effort
required to implement a system, therefore issues such as the number of
classes and their complexity are very important. Second, the design must
promote reuse of architectural models and code.
The second part of this topic focuses on the exploitation of architectural
models of object-oriented applications.
In recent years there has been a growing interest in software architectures
(Shaw and Garlan 1996); an architecture is described in terms of identified
system components, how they are connected, and the nature of these
connections (protocols for communication, synchronization, data access).