Qual è il punto di OOP?

Per quanto posso dire, nonostante gli innumerevoli milioni o miliardi spesi per l’educazione, le lingue e gli strumenti OOP, OOP non ha migliorato la produttività degli sviluppatori o l’affidabilità del software, né ha ridotto i costi di sviluppo. Poche persone usano l’OOP in senso rigoroso (poche persone aderiscono o comprendono principi come LSP); sembra esserci poca uniformità o coerenza per gli approcci che le persone adottano per modellare i domini dei problemi. Troppo spesso, la class è usata semplicemente per il suo zucchero sintattico; mette le funzioni per un tipo di record nel proprio piccolo spazio dei nomi.

Ho scritto una grande quantità di codice per un’ampia varietà di applicazioni. Sebbene esistano luoghi in cui la vera sottotipologia sostituibile ha svolto un ruolo prezioso nell’applicazione, questi sono stati piuttosto eccezionali. In generale, anche se si parla molto del “riutilizzo”, la realtà è che, a meno che un pezzo di codice non faccia esattamente ciò che si vuole, c’è un “riutilizzo” poco costoso. È estremamente difficile progettare le classi per essere estensibili nel modo giusto , e quindi il costo dell’estensione è normalmente così grande che il “riutilizzo” semplicemente non vale la pena.

Per molti aspetti, questo non mi sorprende. Il mondo reale non è “OO”, e l’idea implicita in OO – che possiamo modellare le cose con una certa tassonomia di class – mi sembra molto fondamentalmente imperfetta (posso sedermi su un tavolo, un ceppo d’albero, un cofano di macchina , il grembo di qualcuno – ma nessuno di questi è – una sedia). Anche se passiamo a domini più astratti, la modellazione OO è spesso difficile, controintuitiva e, in definitiva, non utile (si considerino i classici esempi di cerchi / ellissi o quadrati / rettangoli).

Quindi cosa mi manca qui? Dov’è il valore di OOP e perché il tempo e i soldi non sono riusciti a migliorare il software?