Object-Oriented Programming
Spring 2022
Introduction
In previous readings we saw that leading computer scientists were already expressing concerns about the complexity of software projects by the end of the 1950s, and we've read a couple of papers about possible ways forward (e.g. getting more rigorous and mathematical about correctness, using programming models that "scale" better). So far, in our historical explorations, none of the pie-in-the-sky approaches has had much of an impact. In the 1970s, more pragmatic approaches were embraced that focused on more disciplined programming practices, and on decomposing large systems into more manageable software "modules". As Dijkstra observed in 1979, "The technique of mastering complexity has been known since ancient times: divide et impera (divide and rule)".
Object-oriented programming languages grew out of these efforts to better organize large software projects in the post-software-crisis era. Simula, an ALGOL offshoot designed in Norway in the 60s to ease implementation of software simulations, was one of the first to use objects, though the concept of objects predates Simula. Simula inspired the Smalltalk language, developed by a team at Xerox Palo Alto Research Center led by Alan Kay in the early 1970s, but not widely known until the Smalltalk-80 release in 1980. Bertrand Meyer's language/system Eiffel, first released in 1985, was explicitly designed to support the construction of large software systems. These languages, in turn, influenced C++ and Java in the 1990s.
In the paper below, Grady Booch explains object-oriented program development and compares it to existing approaches. The author went on to become an influential advocate for all things Object, and developed an early UML-like technique for describing object interactions. Here you'll see him trying to explain OO to a predominantly non-OO world. It's interesting from our "modern" perspective to see how he explains the approach and its strengths. As he compares it to alternative approaches, you'll also get a better sense of what those non-OO approaches were like.
Questions
Here are some questions you might try to answer as you read:
-
What is the "only major building block available" in non-OO languages?
-
What does Booch mean by a "functional development method"?
-
What are the limitations of functional development methods?
-
In the non-OO cruise-control design, what data is stored? Where? Where is it in the OO version?
-
What is the fundamental criteria for decomposing a system using object-oriented techniques?
-
What are the major steps in the object-oriented development process?
-
What's with the nouns and verbs stuff?
-
How does the "global flow of control" in an object-oriented system differ from that of a functionally decomposed system?
-
What are the "two major goals in developing object-based software" Booch quotes?
-
Why are understandability and maintainability enhanced by OO?
-
OO was the result of the "confluence" of which events in CS?
-
Which language introduced the term "object oriented"?
-
What's the "emotional debate" surrounding inheritance?
-
What's the outside vs. inside view of an object?
Papers
-
Grady Booch. 1986. "Object-oriented development." IEEE Transactions on Software Engineering SE-12, 2 (February 1986), 211-221. DOI=10.1109/TSE.1986.6312937 (link)