La stessa OOP non è cambiata molto dal suo inizio. Sono stati esplorati alcuni nuovi angoli, ma i principi fondamentali sono sempre gli stessi. Semmai, le conoscenze collettive raccolte nel corso degli anni rendono la vita del programmatore più semplice che difficile. I modelli di progettazione non sono un ostacolo; forniscono una cassetta degli attrezzi di soluzioni a problemi standard, distillati da anni e anni di esperienza.
Quindi perché percepisci OOP oggi come più complesso di quando hai iniziato a usarlo?
Uno dei motivi potrebbe essere che il codice a cui ti stai esponendo diventa più complesso, non perché OOP è diventato più complesso, ma perché sei avanzato sulla scala di apprendimento e leggi basi di codice più grandi e complesse.
Un altro motivo potrebbe essere che mentre il paradigma della complessità non è cambiato, le dimensioni e la complessità di un progetto software medio potrebbero benissimo avere. Con la potenza di elaborazione disponibile su cellulari di livello cliente che sarebbe stato il sogno di uno sviluppatore su un server meno di due decenni fa, il pubblico in generale si aspettava che le GUI animate slick fossero anche l'app a basso costo più economica e che i PC desktop entry-level fossero più potenti rispetto a un "supercomputer" degli anni '80, è naturale che la barra sia stata alzata fin dai primi giorni di Smalltalk e C ++.
E poi c'è il fatto che nelle applicazioni moderne, la concorrenza e il parallelismo sono la norma piuttosto che l'eccezione, e le applicazioni hanno spesso bisogno di comunicare tra macchine diverse, producendo e analizzando un intero zoo di protocolli. Sebbene OOP sia ottimo come paradigma organizzativo, ha i suoi limiti, proprio come qualsiasi altro paradigma: ad esempio, non fornisce molta astrazione per la concorrenza (la maggior parte delle implementazioni sono più o meno un ripensamento o esternalizzate interamente alle librerie) e non è l'approccio migliore per la creazione di parser e la trasformazione di dati. La programmazione moderna si imbatte spesso nei limiti del paradigma OOP e i modelli di progettazione non possono che portarvi così lontano. (Personalmente, Considero il fatto che abbiamo bisogno di schemi di progettazione un segno di questo: se il paradigma fornisse queste soluzioni immediatamente, sarebbe più espressivo per questi problemi e le soluzioni standard sarebbero ovvie. Non esiste un modello di progettazione per descrivere l'ereditarietà del metodo, poiché è una caratteristica fondamentale di OOP; ma esiste un modello di fabbrica, perché OOP non fornisce un modo naturale ovvio di costruire oggetti polimorficamente e in modo trasparente.)
Per questo motivo, i più moderni linguaggi OOP incorporano funzionalità di altri paradigmi, che li rende più espressivi e più potenti, ma anche più complessi. C # è il primo esempio per questo: ha ovvie radici OOP, ma caratteristiche come delegati, eventi, inferenza di tipo, tipi di dati varianti, attributi, funzioni anonime, espressioni lambda, generici, ecc., Provengono da altri paradigmi, in particolare la programmazione funzionale .