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) ?
Immagino che tu possa scegliere di guardarlo in questo modo, ma non credo che sia un modo particolarmente utile per guardarlo. Nello specifico, l'uso della parola "dati" (anche se specifichi esplicitamente funzioni in esso) sembra ridurre OOP a un modo di modellare i dati (o almeno, a un approccio incentrato sui dati). A mio avviso, manca il punto.
OOP è un modo particolare per strutturare il codice; sia il comportamento che i dati. Le sue idee principali sono la normalizzazione del comportamento (principio SECCO), al contrario, ad esempio, della normalizzazione dei dati (come nel concetto di DB relazionale) e concetti come l'incapsulamento. Nel modo più semplice, l'incapsulamento si ottiene fornendo un'interfaccia esterna alle classi (le tue cose pubbliche) e un'implementazione interna (materiale privato / protetto). Questo è molto diverso dalla programmazione modulare "tradizionale", poiché i confini del "modulo" sono strutturati in modo completamente diverso: nel caso di OO, ogni classe è un mini-modulo.
È anche importante notare che il concetto di incapsulamento, in senso generico, è molto diverso da una specifica implementazione dell'incapsulamento. OOP ha un modo specifico di eseguire l'incapsulamento, intrinsecamente (ovviamente, mi riferisco solo ai casi fondamentali qui, non ai pattern, ecc.). L'ereditarietà e il polimorfismo sono modi molto più specifici OOP per raggiungere altri principi (il riutilizzo del codice è uno di questi). Non sono sicuro che li inserirò nella stessa frase dell'incapsulamento, esistono ad un livello leggermente diverso.
OOP tende anche a mappare abbastanza bene su un dominio problematico, consentendo di modellare un problema in un modo che rimane comprensibile agli utenti semi-tecnici.
Che senso ha passare attraverso la discussione mini OOP di cui sopra? Quanto sopra è il meglio che posso fare per riassumere OOP in poche frasi: mette in evidenza i punti principali di OOP dal punto di vista di qualcuno che ha lavorato con la tecnologia per molto tempo. Non penso che ridurlo a una composizione gerarchica delle strutture dati sia giusto. Possiamo anche ridurlo a una serie di caratteri nei file di testo, ma ciò non significa che catturi l'essenza del paradigma.