Modern OOP vs Alan Kays OOP [chiuso]

3

Recentemente ho scoperto che c'è in realtà una strong dose di critiche nei confronti di ciò che la gente definisce "OOP moderno" - spesso confrontandolo con la programmazione funzionale o con l'OOP di Alan Kays.

Ecco la domanda che mi ha fatto riflettere: link

Wikipedia ha una sezione sulla critica OOP: link

Venendo da un diploma di laurea in ingegneria informatica, ho fatto la mia parte di programmazione di corsi di programmazione e sviluppo. Ho fatto Java e C ++ a scuola così come NodeJS, Python, Perl e PHP nel mio tempo libero. In tutti questi linguaggi (tranne forse in Python), ho implementato alcune librerie OOP o usate che hanno fatto.

Quindi qual è il grosso problema contro il moderno OOP (o OOP in generale)? Perché così tante persone apparentemente non amano e respingerlo?

    
posta n0pe 12.12.2014 - 01:21
fonte

1 risposta

4

Prima di tutto, "OOP moderno" non è una deviazione da OOP di Alan Kay. Kay potrebbe aver coniato il termine stesso, ma "OOP" in stile Smalltalk è una deviazione significativa dall'effettiva programmazione di classe e oggetto come esisteva prima di Smalltalk. Il sistema originale OOP si chiamava Simula ed era un dialetto esteso di ALGOL i cui concetti OOP si sarebbero sentiti a proprio agio in linguaggi moderni come Delphi, Java o C #. Lo stile Smalltalk è l'aberrazione, ed è stato un fallimento ovunque sia stato provato. (Con la piccola eccezione di Objective-C, la cui popolarità è dovuta nella sua interezza a Apple che spinge giù la gola degli sviluppatori iOS, al di fuori dell'ecosistema Apple la sua quota di mercato è essenzialmente nulla.)

Per quanto riguarda la domanda, la ragione principale per cui molte persone criticano è semplice, "uva acerba" vecchio stile. Guardando l'articolo di Wikipedia collegato, i critici che nomina non sono oggettivi: uno è uno dei principali protagonisti di ML, l'altro è il protagonista di Erlang, entrambi linguaggi che hanno fallito nel "mercato delle idee" mentre OOP ha conquistato il mondo.

Luca Cardelli has claimed that OOP code is "intrinsically less efficient" than procedural code, that OOP can take longer to compile, and that OOP languages have "extremely poor modularity properties with respect to class extension and modification", and tend to be extremely complex.

Intrinsically less efficient ? Forse, ma è anche molto più potente. La principale inefficienza intrinseca deriva dal polimorfismo: il dispatch virtuale richiede più cicli di CPU e la cache è inefficiente, ma può ottenere alcune astrazioni incredibilmente utili in cambio di questo compromesso di progettazione. E dubito che chiunque cerchi di ottenere la stessa cosa in un linguaggio procedurale senza supporto linguistico possa farlo in un modo che risulti essere notevolmente più efficiente, quindi è una specie di lamentela stupida.

that OOP can take longer to compile ? Ha! Prova a dirlo a uno sviluppatore Delphi. Può letteralmente compilare il codice più velocemente di quanto il disco rigido possa offrire.

that OOP languages have "extremely poor modularity properties" ? Prova a dirlo a qualsiasi sviluppatore Delphi, Java o .NET che utilizzi il ricco ecosistema di codice modulare che è stato costruito nel corso degli anni su base giornaliera. Questo semplicemente non è vero.

tend to be extremely complex ? Bene sicuro; stanno risolvendo problemi complessi. Non puoi far scomparire la complessità essenziale; puoi aggiungere l'astrazione e spazzarla sotto il tappeto, ma tornerà a morderti a un certo punto, garantito.

Bottom line: se OOP non funzionasse bene, non funzionerebbe bene. E quindi nessuno lo userebbe perché semplicemente non funziona. Ma un semplice sguardo alla realtà del mondo della programmazione mette la menzogna su quel concetto.

    
risposta data 12.12.2014 - 01:46
fonte

Leggi altre domande sui tag