I originally posted a proposed definitions and rationale
about a week ago. But I've revised them based on feedback and I think I'm ready for the PL community to review the proposal.
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.
A language or system is object oriented if it supports the dynamic
creation and use of objects. Support means that objects
are easy to define and use. It is possible to encode objects in C
or Haskell, but an encoding is not support.