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.