Definition of "Object Oriented"
William Cook made an attempt at defining what "Object Oriented" means.
Here's the core of the definition (from http://wcook.blogspot.ch/2012/07/proposal-for-simplified-modern.html):
- An object is a first-class, dynamically dispatched behavior.
- A behavior is a collection of named operations that can be invoked by clients where the operations may share additional hidden details. Dynamic dispatch means that different objects can implement the same operation name(s) in different ways, so the specific operation to be invoked must come from the object identified in the client's request. First class means that objects have the same capabilities as other kinds of values, including being passed to operations or returned as the result of an operation.
Note the things that are not part of the definition:
- Any notion of data stored within an object. (Mentioned in a remark, but left open.)
- Any notion of encapsulation.
From what I can tell, the definition seems accurate to me, but it's also quite technical.
You could certainly use this definition to judge whether a programming language qualifies as object oriented. I wonder whether a similar definition could be found to judge whether a program qualifies as object oriented. (This seems quite a bit harder to me, but would maybe be more useful as a guideline for practitioners.)