Si prega di considerare che le esigenze di Harper per l'insegnamento di un corso introduttivo sul curriculum CS sono molto diverse dalle esigenze di un progetto di vita reale . Il suo compito è insegnare concetti fondamentali (ad es. Modularità, parallelismo, induzione) alle matricole. Pertanto è molto importante che la lingua (e il paradigma) scelti possano esprimere questi concetti con il minor numero di cerimonie (sintattiche e concettuali) possibile. Familiarità, supporto degli strumenti, librerie disponibili, prestazioni di esecuzione ecc. Sono completamente irrilevanti in questo contesto. Quindi tienilo a mente quando consideri quanto segue ...
L'opinione che OO sia un risultato anti-modulare dal grande numero di dipendenze verso altre classi, anche gli oggetti di classi ben progettate tendono a finire. Che questo sia un problema - anche agli occhi dei sostenitori di OO - diventa chiaro quando si osserva la proliferazione di quadri di iniezione di dipendenza , articoli, libri e post di blog negli ultimi anni (anche l'ascesa di beffe e mozziconi è interessante).
Un altro suggerimento è l' importanza dei modelli di progettazione e la complessità della loro implementazione - rispetto ad alcuni altri paradigmi di programmazione - ad es. Fabbriche, Costruttore, Adattatore, Ponte, Decoratore, Facciata, Comando, Iteratore, Mediatore, Osservatore, Strategia e metodo del modello e forse i Compositi sono tutti in qualche modo legati al miglioramento della modularità del codice OO.
L'ereditarietà è anche problematica (ad es. Problema di classe di base fragile ) e il polimorfismo (sottotipo) seduce a rovesciare l'implementazione di un algoritmo tra più classi, in cui i cambiamenti possono incresparsi attraverso l'intera catena ereditaria (su e giù!).
L'accusa di essere anti-parallelo è legata all'enfasi dello stato rispetto al calcolo (ovvero mutabilità vs. immutabilità). Il primo rende più coinvolto l' espressione delle dipendenze delle sottocomputer (che è la tesi di Harper sul parallelismo!) Poiché di solito non si può dedurre dalla posizione in cui è gestito lo stato (ovvero il file, dove viene dichiarata la variabile di istanza) quali attori esterni lo cambierà in quel momento.
Un'enfasi sull'immutabilità e sul calcolo rende l'espressione delle dipendenze delle sottocomputer molto più semplice, poiché non esiste una gestione dello stato, ma solo funzioni / calcoli che sono combinati nel luogo in cui si desidera esprimere le dipendenze delle sottocomputer.