Lo stesso OOP non è cambiato molto dal suo inizio. Alcuni nuovi angoli sono stati esplorati, ma i principi fondamentali sono rimasti gli stessi. Se non altro, la conoscenza collettiva acquisita nel corso degli anni rende la vita del programmatore più facile 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é oggi percepisci l'OOP come più complesso di quando lo hai iniziato?
Un motivo potrebbe essere che il codice a cui sei esposto diventa più complesso - non perché l'OOP sia diventato più complesso, ma perché tu sei avanzato sulla scala di apprendimento, e puoi leggere basi di codice più grandi e più complesse.
Un altro motivo potrebbe essere che, mentre il paradigma della complessità non è cambiato, le dimensioni e la complessità di un progetto software medio possono benissimo avere. Con la potenza di elaborazione disponibile sui telefoni cellulari di grado cliente che sarebbe stato il sogno bagnato di uno sviluppatore su un server meno di due decenni fa, il pubblico in genere si aspettava una GUI animata slick per l'app per il lancio più economico, e l'entrata -levelo PC desktop è più potente di un "supercomputer" del 1980, è naturale che la barra sia stata sollevata sin 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 spesso hanno bisogno di comunicare tra macchine diverse, emettendo 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 è più o meno un ripensamento, o esternalizzata interamente alle librerie) e non è il miglior approccio possibile per la costruzione di parser e la trasformazione dei dati. La programmazione moderna spesso si scontra con i limiti del paradigma OOP e gli schemi di progettazione possono solo portarti a termine. (Personalmente, considero il fatto che abbiamo bisogno di schemi di progettazione un segno di questo - se il paradigma fornisse queste soluzioni in modo immediato, sarebbe più espressivo per questi problemi e le soluzioni standard sarebbero ovvie. nessun modello di progettazione per descrivere l'ereditarietà del metodo, perché è una caratteristica fondamentale di OOP, ma esiste un Pattern di fabbrica, perché OOP non fornisce un modo ovvio naturale di costruire oggetti polimorficamente e in modo trasparente.)
Per questo motivo, i linguaggi OOP più moderni incorporano funzionalità di altri paradigmi, che li rendono più espressivi e più potenti, ma anche più complessi. C # ne è l'esempio principale: 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 .