Tieni presente che le esigenze di Harper per insegnare un corso introduttivo di CS sono molto diverse dalle esigenze di un progetto di vita reale . Il suo compito è insegnare concetti fondamentali (ad esempio modularità, parallelismo, induzione) alle matricole. In quanto tale, è molto importante che la lingua (e il paradigma) scelti possano esprimere questi concetti con la minima certezza (sintattica e concettuale) possibile. Familiarità, supporto degli strumenti, librerie disponibili, prestazioni di esecuzione, ecc. Sono completamente irrilevanti in questo contesto. Quindi tieni questo a mente quando consideri quanto segue ...
La vista che OO è anti-modulare deriva dal gran numero di dipendenze di altre classi e 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 dei quadri di Iniezione delle Dipendenze , articoli, libri e post sui blog negli ultimi anni (anche l'ascesa di i mock e gli stub sono interessanti).
Un altro suggerimento è la importanza dei modelli di progettazione e la complessità di implementarli - rispetto ad altri paradigmi di programmazione - ad es. Fabbriche, Builder, Adapter, Bridge, Decorator, Facade, Command, Iterator, Mediator, Observer, Strategy e Template Method e forse il Composite sono tutti in qualche modo correlati al miglioramento della modularità del codice OO.
Anche l'ereditarietà è problematica (es. il problema di classe di base fragile ) e il sottotipo (seducente) seducono l'implementazione di un algoritmo tra più classi, dove i cambiamenti possono propagarsi attraverso l'intera catena ereditaria ( su e giù!).
L'accusa di essere anti-parallel è correlata all'enfasi dello stato rispetto al calcolo (alias mutevolezza e immutabilità). Il primo lo rende maggiormente coinvolto nelle dipendenze espresse delle subcomputazioni (che è il punto di vista di Harper sul parallelismo!) Poiché di solito non si può dedurre dalla posizione in cui è gestito lo stato (ovvero il file, dove l'istanza variabile è dichiarata) che gli attori esterni cambieranno in quel momento.
L'enfasi su immutabilità e computazione rende molto più facile esprimere le dipendenze delle subcomputations, poiché non esiste una gestione dello stato, solo funzioni / calcoli che sono combinati nel punto in cui si desidera esprimere le dipendenze delle sottocom- puzioni.