There are many different definitions and characterizing properties of object-oriented programming (OOP). For example, according to Cardelli and Wegner  a language is object-oriented if and only if it satisfies the following requirements:
- [Data abstractions] It supports objects that are data abstractions with an interface of named operations and a hidden local state.
- [Object types] Objects have an associated object type.
- [Type inheritance] Types may inherit attributes from supertypes.
For comparison, concept-oriented programming (COP) is based on the following three basic principles:
- [Duality] A thing is a couple of one identity and one entity
- [Inclusion] A thing has one parent
- [Virtualization] A thing substitutes for some other thing
In the context of COP, one important property of OOP is that all objects exist in one flat space although their classes are defined as a hierarchy. In COP, both concepts and concept instances exist are hierarchically ordered using inclusion relation.
Another property of OOP is that it does not allow for describing arbitrary application-specific references. In OOP, it is assumed that most of the functionality is concentrated in object methods.
- Concept-oriented programming
- Concept (concept-oriented programming)
- Inclusion (concept-oriented programming)
-  L. Cardelli and P. Wegner, On Understanding Types, Data Abstraction, and Polymorphism, Computing Surveys 17(4), December 1985.