History of Object-Oriented Programming

SIMULA

In the late 1940s and early 1950s two Norwegians - Kristen Nygaard and Ole-Johan Dahl - working for the Norwegian Defense research establishment on the problem of Resonance-absorption computations for a nuclear reactor did Monte Carlo simulations by hand.

In early 1960s they created SIMULA1 to solve modeling problems.
SIMULA1 as influenced by ALGOL60.
Significant changes from ALGOL
  1. clusters of data and process actions parceled together (encapsulation and objects)
  2. Tony Hoare's work with record handling -secure technique for external access to object attributes-compile-time checking
  3. Class of objects share properties - hierarchy.
  4. Class objects related or equivalent in abstract but different realization-virtual functions and dynamic binding
  5. Action interleaving enabled simulation of concurency.

SIMULA67 first compilers in late 1960s and early 1970s

Some other languages

Object-Oriented Programming and Graphic User Interfaces.

1962 Ivan Sutherland wrote SketchPad the first modern interactive graphics program. The user pointed at the screen to input commands.

Dave Collins in "Designing Object-Oriented User Interfaces" says

"Basic Human capabilities for perceiving, thinking and acting on objects in the world have not changed for thousands of years, and these capabilities will not change within the lifetime of anyone reading this book.

"This creates a tension between rapidly changing technology on one side of the interface and unchanging capabilities of the human on the other side."

Collins suggests two ways to resolve the problem:
  1. Designers can use technology to create user interfaces to fit the capabilities and limitations of their human users.
  2. Culture can change, altering attitudes, styles of work and play and sets of tasks to which computers are applied.

At Xerox PARC early in 1970 Alan Kay created a group (Learning Research Group) to design a book size computer (which there was no technology to implement).

He wanted an interface anyone could use:

The result was Smalltalk.

Larry Tesler (at PARC) showed the strong connection between properties of objects in object-oriented languages and properties of objects on the screen.

Early Smalltalk had a mostly text based interface. Dan Ingalls working at PARC developed the Model-View Controller (MVC) architecture used in Smalltalk.

Also at PARC 1975 David Canfield - Pygmalion system was the first iconic programming system. Used manipulation of icons to accomplish tasks. InterLisp was the first environment to equate icons with minimized windows.

1980s

  • 1981 Xerox Star systems $15000
  • 1983 Apple Lisa $10,000
  • 1984 Apple Macintosh ~$2000
  • All were slow, under powered.

    Relationship between OOPS and GUI. Example a click on a window results in a message to that window from the system that says it has been clicked. Its response to the click may be just to become the active window (The Listener) or to pop-up (pull-down) another window (menu), or send message to a parent window to close.

    Smalltalk

    Specifically:
    1. All instances of a class respond to the same set of messages and use the same set of methods (procedures) to do so.
    2. All instances of a class have the same number of named instance variables and use the same names to refer to them.
    3. An object can have indexed instance variables only if all instances of its class can have indexed instance variables.

    All Smalltalk components are members of classes, therefore classes themselves must belong to classes (Meta-Classes). Each class is contained in its own meta class which is created at the same time the class is created. The functions of the meta class are listed under class functions for its class.

    Meta classes are not instances of meta classes and they have no name so the only way to access them is through the class functions and variables of the class they contain.

    Rectangle class.

    Examples of a message
    Point x:100 y:150
    
    	Rectangle 
    		origin:(Point x: 50 y: 50)
    		corner:(Point x: 250 y: 300)
    
    	Selector (message name) origin: corner:
    

    Look at some samples of the old interface and the new interface.