Principal mis-concepts in mainstream object-oriented programming languages:
1. Encapsulation, inheritance, polymorphism - only encapsulation is required (and makes sense) for object-oriented approach. Inheritance and polymorphism look like related to data types subject.
2. Encapsulation is resulting to protocols, but not to classes/objects. For message-passing approach, it's necessary and sufficient to have a concept of protocols. Objects are a consequence of encapsulation and protocols.
3. Object composition (and aggregation as a kind of composition) is not a composition at all, but actually a definition of a type-product in algebraic data types sense.
4. Object composition doesn't take into consideration a processity. A procedure is a process, a function is also a process, but object is not a process.
5. Everything is not objects. Objects and data/values should be distinguished on a language syntax (and semantics) level. Objects define a topology of system communications, data/values have data types and operations.
6. Object modeling is not separated from recourse management (programming). Resources are tightly coupled to language elements. Resources are combinations of notions "algorithm" and "memory" in wide sense.
7. Data types are one of kind of resources. Early resource binding (and early data types assignment in particular) doesn't allow defining semantic (linguistic) abstractions.