Some history
In sections [what] and [abstraction], we have sketched the history
underlying the development of object-oriented
programming languages, as directed towards
increasingly powerful abstractions and constructs
for developing reliable software.
}
\setlength{\unitlength}{0.0050in}%
\begin{picture}(135,298)(40,485)
\thicklines
\put(175,565){\vector( 0,-1){ 60}}
\put(150,660){\vector( 0,-1){ 55}}
\put(100,760){\vector( 0,-1){ 65}}
\put(150,485){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]Ravioli code}}
\put( 85,580){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]Object Oriented Programming}}
\put( 40,770){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]Spaghetti code}}
\put( 85,670){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]Structured Programming}}
\end{picture}
slide: Some history
In short, we may characterize the genesis of
structured programming as the outcome of the
war against the goto and its associated
spaghetti code.
The subsequent development of object-oriented
programming may then be understood as
the realization that data is as important
as control.
Ironically, the disciplined use of encapsulation
and inheritance (as mechanisms for data abstraction)
may lead to another proliferation of control,
threatening the integrity and manageability of
object-oriented code.
One part of the control problem of object orientation
is known as ravioli code,
which expresses depictively the existence of
a large number of (small) objects with well-defined
interfaces, which interact in a complex way.
See slide [11-history].
The other part of the control problem
is known as the yo-yo problem,
which characterizes the difficulty of locating control
in a class hierarchy with virtual functions.
These problems are notoriously hard to solve,
yet lie at the core of good library design.
As a partial solution to the problem of structuring
the interaction between objects we have
discussed the notion of events to define
generic interactions.
However, essential to a successful component-based
approach, we need sufficiently high-level components
to start with.