Previous Table of Contents Next


Part I
Object-Oriented Programming

1  Object-Oriented Programming
2  Applying Design Patterns and Frameworks to Develop Object-Oriented Communication Software

Chapter 1
Object-Oriented Programming

by Timothy A. Budd

My first exposure to the concept of object-oriented programming came in 1983, soon after the publication of the famous “Blue Book” (Smalltalk-80: The Language and Its Implementation) by Adele Goldberg and David Robson (Goldberg & Robson, 1983). At the time, I was ignorant of the programming language Smalltalk-80, but I soon learned that a few of my colleagues at the University of Arizona—and more than a few of my students—had at least heard of the language from a series of articles that appeared in 1981 in Byte magazine. Some could even recall the earlier 1977 article by Alan Kay in Scientific American (Kay, 1977).

Despite my rather late start, I quickly became entranced with the ideas I found discussed in the Goldberg and Robson book, and determined that my students and I should explore them further. At that time, the computing facilities available to us were common for university laboratories. We had a small room full of VT-100-type terminals (24 columns of 80 characters of ASCII text), and we had only recently replaced our PDP-11/70 (128K memory, divided into a 64K data space and 64K code space) with a state-of-the-art VAX computer.

Clearly, using the Xerox PARC Smalltalk-80 system—which required a personal workstation with more computing power than our VAX, as well as a bitmapped display and an exotic new pointing device called the mouse—was out of the question. Not to be daunted by adversity, my students and I resolved to create a system to experiment with the Smalltalk language, even if we could not experience the full Smalltalk programming environment. In the 1984-1985 academic year, we created the system we christened “Little Smalltalk,” an ASCII-based, non-graphical, non-event-driven implementation of a subset of the Smalltalk-80 language.

About this same time, Gary Levin—my colleague at the University of Arizona who is now at BellCore—was starting to experiment with a system developed at Bell Laboratories called Classes: An Abstract Data Type Facility for the C Language (Stroustrup, 1982). This was an interesting collection of C language macros that later evolved into the C++ programming language. Although the system had an annoying habit of using huge amounts of memory and regularly crashing the machine, it nevertheless contained some intriguing new features. Over lunches, Gary and I compared the ideas found in the C language extensions promulgated by Bell Laboratories with the concepts my students and I dealt with in Smalltalk.

Over the course of the next two years, I massaged my course lecture notes into a book format. The result was A Little Smalltalk (Budd, 1987). I distinctly recall thinking during this period that I better move fast to write and publish this book. Not only was tenure a very pressing concern, but many fads had come and gone in the recent history of computer science, and object-oriented programming could be just another fad. If I wanted to catch the wave, I needed to move quickly. If anybody had tried to tell me then that a decade later object-oriented programming would still be a hot topic, I would have thought they were crazy.

But here we are a dozen years later, and object-oriented programming is still being discussed and shows no sign of disappearing. What has become clear in the meantime is that, in fact, object-oriented techniques force a fundamental reevaluation of almost all aspects of computer programming.

This chapter introduces the basic ideas of object-oriented programming in a fashion that is independent of any particular programming language and is applicable to a wide number of different languages. The following sections first illustrate these ideas by depicting how problems are solved in the real world. The chapter then puts object-oriented programming in the context of a wider history of abstraction techniques that have been developed in computer programming. In short, this chapter explores the validity of the following two statements:

  OOP is a revolutionary idea, totally unlike anything that has come before in programming.
  OOP is an evolutionary step, following naturally on the heels of earlier programming abstractions.

1.1. Object-Oriented Programming: A Revolutionary Approach

The fundamental concept in understanding object-oriented programming has nothing to do with programming languages. Instead the key involves thinking about how one goes about structuring the solution to problems. This approach can easily be described without reference to any particular programming language, and even without reference to programming at all. My book An Introduction to Object-Oriented Programming (Budd, 1997) offers the following scenario:

Suppose I wish to send some flowers to a friend for her birthday. She lives in a city many miles away, so my picking the flowers and carrying them to her door myself is out of the question. Nevertheless, sending her the flowers is an easy enough task; I merely go down to my local florist (who happens to be named Flo), tell her the variety or number of flowers I want sent and my friend’s address, and I can be assured the flowers will be delivered expediently and automatically.


Previous Table of Contents Next