I am amazed that there would still be discussions about what OOP is or is not.<p>The only agreement seems to be around "polymorphing" -- the ability to define a behaviour that works consistently over many "things" that share some similarities. Good.<p>But the root of evil comes back to very initial definition of what an object is:<p>An "object" is something very concrete, it is not a mere "thing", it has:
- an identity
- a state
- a behaviour<p>Is a "hello" an object? No, no more than 9 or any number is an object, because these beasts are "values".<p>However, the way a string is implemented is probably an object at some level (this is not true of a number, CPUs can deal with them directly). But this is an implementation detail.<p>Unfortunately the essential difference between what is a Value and what is an Object is poorly promoted/teached. But this is improving thanks to functional languages.<p>In a perfect world there would be "things", that are either "values" or "objects". In the imperfect world of us we have "objects", that are more or less mutable.