Object-Oriented
A paradigm of programming.There's a craze about any new software using the term "Object-Oriented". But if you ask people what it means to be "OO", most won't be able to tell anything, because it's only a buzzword.
The meaningful ideas that have to be isolated and distinguished behind this fad are that of having a unified way to manipulate objects, but few understand it even partially, and even fewer are those fully conscious of what it means.
Another buzzword associated to "OO" is inheritance, often incorrectly presented as the essence of "OO" design, whereas it is only a braindead special-case way of organizing objects, often done with a lot of confusion.
Typical confusion in "OO" approaches are between (constant) values and (variable) state-holders, between (semantical) objects and (meta-semantical) environments, between (specificational) abstraction level and (implementational) dispatch-time (run-time vs compile-time), etc. In a sane design, these concepts would be distinguished and made orthogonal; they would not even intervene at all at the same place in the semantics.
For instance, most "OO" languages (like Java, C++) can't distinguish the notion of a constant, absolute, value, as soon as this value is not "atomic" in the hardware (a curious limitation for alleged "high-level" languages); all objects are then modifiable records, which leads to all kinds of unsafety, bugs, and contortions when manipulating putatively constant recursive structures.
Languages with single-dispatch (among which are C++ and Java again) also confuse the objects being manipulated with the environment in which they are manipulated; they force the programmer to define the semantics of "an integer", or "a polynomial", whereas anyone with a little background in formal mathematics knows that an isolated integer or polynomial has no meaning; only the set of integers, or the set of polynomials, has meaning. More generally, isolated objects mean nothing, only structured sets of objects do; and these language don't allow to manipulate those sets, to describe their properties. Languages with multiple dispatch, such as CLOS or Cecil, do a better job of not associating environments to objects.
Even with multiple dispatch, all the widespread OO languages have a unique global environment to dispatch (multi)methods according to objects' class. This means that there is only one fixed way of looking at objects, whereas mathematicians will also tell you how the interesting properties of structures lie in the infinity of ways to isomorphically reformulate them. The only way round this unicity of view is the explicit wrapping of objects into new classes; but most languages do not allow generic wrappers, and/or impose restrictions in the specification and implementation of wrapped objects.
Kent M. Pitman has written a great essay about object-orientation as a term, What's in a name? Uses and Abuses of Lisp Terminology within his set of articles, Parenthetically-Speaking.
For true OO languages, see CLOS, Simula, Beta, Dylan, Self, Smalltalk, OCAML.
For languages with true OO extensions, see Lisp, Perl, Scheme, Forth.
For false OO languages, see Ada, C++, Java, Visual BASIC.
- The great Cetus links.
- Bob Hathaway's OO FAQ.
- The FOOL workshop proceedings.
- Copying and Comparing: Problems and Solutions, a paper dealing with the issue of identity and value semantics in the paradigm.
Pages in this topic: ABCL Agora Amiga E Brain C# Cecil Cel Claire CLIPS CLOS Dylan E Eidola Eiffel Ellie EuLisp Functional and Object-Oriented Goo Haskell Hobbit Io Kaleidoscope Kevo kew Lava LENS LIFE Moby Moostrap Morphe Mozart/Oz Needle NetCLOS NUT O'Haskell Objective-C Obliq OCAML OOP Pike Python Ruby Sather Scala Self Simula Sina Slate TOM Unicon
Also linked from: Actor Ada AdaOS Aldor AmigaOS BASIC Benjamin C. Pierce Blue C++ Caper CLIM Dispatch Forth FramerD GENS Hidden Algebra Java Luca Cardelli Object OO OZONE Prolog prototype-based RbCl Reverse Literate Programming Scheme Sigil Smalltalk Squeak Tigger Unified Unity Project