| • Science | • People | • Locations | • Timeline |
| Contents | ||
Self was designed primarily by David Ungar and Randall Smith in 1986 while working at Xerox PARC. Their objective was to push forward the state of the art in object-oriented programming language research, once Smalltalk-80 had gone out of the labs and began to be taken seriously by the industry. They moved to Stanford University and continued work on the language, building the first working compiler in 1987. At that point focus changed to attempting to bring up an entire system for Self, as opposed to just the language.
The first public release was in 1990, and the next year the team moved to Sun Microsystems where they continued work on the language. Several new releases followed until falling largely dormant in 1995 with the 4.0 version. The latest 4.1 version was released in 2002 and runs on Mac OS XMac OS X is the latest version of the Mac OS operating system for Macintosh computers. Developed and published by Apple Computer, it provides the stability of a Unix operating environment and adds popular features of the traditional Macintosh user interfa and SolarisThe Solaris Operating Environment (OE) Solaris is a computer operating system, the proprietary Unix variant developed by Sun Microsystems (Solaris is slated to be released under on OSI certified Open-Source license with the release of Solaris 10 by the fi.
Self also inspired a number of languages based on its concepts. Most notable, perhaps, was the NewtonScript language for the Apple NewtonNewton was one of the world's first personal digital assistants (PDA). Developed by Apple Computer and sold from 1993 to 1998, it was based on the ARM processor, and featured handwriting recognition. Apple's official name for the device was MessagePad the. Other examples include IoIo is a pure object-oriented programming language inspired by Smalltalk, Self, Lisp and NewtonScript. Io has a prototype-based object model similar to the ones in Self and NewtonScript, eliminating the distinction between types and classes. Like Smalltalk, CelCel An object-oriented prototype-based programming language based on Self and Smalltalk. Obviously it is not longer supported or developed (2004). and Agora.
Traditional object languages are based on a deep-rooted duality. Classes define the basic qualities and behaviours of objects, and instances are a particular object based on a class.
For instance you might have a "Vehicle" class that has a "name" and the ability to perform "drive to work" and "deliver construction materials". "Porsche 911" is a particular instance of the class Vehicle with the name set to Porsche 911. In theory you can then send a message to Porsche 911, telling it to "deliver construction materials".
This example shows one of the problems with this approach. A Porsche is not capable of delivering construction materials (in any general sense anyway!) but this is something that a vehicle can do. In order to avoid this problem we have to add additional specialization to Vehicle via the creation of subclasses. In this case one could imagine "sports car" and "flatbed truck".
This is a contrived example but it illustrates a very real problem. Unless you can predict with certainty what qualities the objects will have in the distant future, you cannot design your class hierarchy properly. All too often the program will evolve to require additional behaviours, and suddenly the entire system has to be re-designed (or refactored) to break out the objects in a different way.
Experience with early OO languages like Smalltalk showed that this sort of issue came up time and time again. Systems would tend to grow to a point and then become very rigid, as the basic classes deep below the programmer's code were simply "wrong". Without some way of easily changing the original class, you may have a serious problem.
Dynamic languages such as Smalltalk allowed for this sort of change via well-known methods in the classes, by changing the class the objects based on it would change their behaviour. But in other languages like C++ there is no such ability, and making such a change can actually break other code, a problem known as the fragile base class problem. In general such changes had to be done very carefully, as other objects based on the same class might be expecting this "wrong" behavior - "wrong" is often dependent on the context.