Meaning that OOP allows me to have data-trees, of arbitrary depth and breadth, with some leafs being functions (and those leafs would be called methods) ?  Because everything else that people often put near OOP mark, just don't seem to have anything to do with it. (Inheritance, subtype polymorphism and encapsulation seem to be orthogonal to OOP).Am I right? Or I'm missing something ?
Is it fair to reduce OOP to mere hierarchical composition of data structures?
object oriented;paradigms;definition
Is it fair to reduce OOP to mere hierarchical composition of data structures?  Meaning that OOP allows me to have data-trees, of arbitrary depth and breadth, with some leafs being functions (and those leafs would be called methods) ?I guess you can choose to look at it that way, but I don't believe it's a particularly useful way to look at it.  Specifically, your use of the word data (even if you specifically mention functions in there) seems to reduce OOP to a way to model data (or at least, to a data-centric approach).  In my opinion, this is missing the point.OOP is a particular way to structure code; both behaviour as well as data.  Its main ideas are the normalisation of behaviour (DRY principle), as opposed to, say, the normalisation of data (as in the relational DB concept), and concepts like encapsulation.  At its simplest, encapsulation is achieved by providing an external interface to classes (your public stuff), and an internal implementation (private / protected stuff).  This is quite different to traditional modular programming, since your module boundaries are structured completely differently - in the case of OO, each class is a mini-module.  It is also important to note that the concept of encapsulation, in the generic sense, is quite different to a specific implementation of encapsulation.  OOP has a specific way that encapsulation is done, inherently (of course, I'm only referring to the core cases here, not patterns, etc).  Inheritance and polymorphism are much more OOP specific ways to achieve other principles (code reuse being one of them).  I'm not sure I'd lump them in the same sentence as encapsulation, they exist at a slightly different level.OOP also tends to map quite nicely on to a problem domain, allowing you to model a problem in a way that remains understandable to semi-technical users.What was the point of going through the above mini OOP discussion?  The above is the best I can do to summarise OOP in a few sentences - it highlights the main points of OOP from the perspective of someone who has worked with the technology for a long time.  I don't think reducing it to a hierarchical composition of data structures does it justice.  We can also reduce it to an array of characters in text files, but it doesn't mean that it captures the essence of the paradigm.