Proszę wziąć pod uwagę, że potrzeby Harpera dotyczące nauczania wstępnej klasy CS są bardzo różne od potrzeb projektu z prawdziwego życia . Jego zadaniem jest nauczanie studentów podstawowych pojęć (np. Modułowości, równoległości, indukcji). Jako takie jest bardzo ważne, aby wybrany język (i paradygmat) mógł wyrażać te pojęcia z możliwie najmniejszą ceremonią (składniową i konceptualną). Znajomość, obsługa narzędzi, dostępne biblioteki, wydajność wykonywania itp. Są w tym kontekście całkowicie nieistotne. Pamiętaj o tym, rozważając następujące kwestie ...
Pogląd, że OO jest antymodułowy, wynika z dużej liczby zależności od innych klas, a nawet obiektów dobrze zaprojektowanych klas. To, że jest to problem - nawet w oczach zwolenników OO - staje się jasne, gdy spojrzysz na rozprzestrzenianie się szkieletów , artykułów, książek i postów na blogu w ciągu ostatnich lat (ciekawe jest również pojawienie się próbnych i pośredniczących artykułów).
Inną wskazówką jest znaczenie Wzorów projektowych i złożoność ich wdrażania - w porównaniu z innymi paradygmatami programowania - np. Fabryki, Konstruktor, Adapter, Most, Dekorator, Fasada, Dowodzenie, Iterator, Mediator, Obserwator, Strategia i Metoda szablonów i może Composite są w jakiś sposób związane z poprawą modułowości kodu OO.
Dziedziczenie jest również problematyczne (np. Problem delikatnej klasy bazowej ) i polimorfizm (podtypu) uwodzi jednego do rozlania implementacji algorytmu między wieloma klasami, w którym zmiany mogą falować w całym łańcuchu dziedziczenia (w górę iw dół!).
Zarzut bycia nierównoległym wiąże się z naciskiem na stan w porównaniu do obliczeń (czyli np. Zmienność vs. niezmienność). Pierwszy z nich bardziej angażuje się w wyrażanie zależności podliczeń (co Harper przyjmuje na paralelizm!), Ponieważ zwykle nie można wywnioskować z lokalizacji, w której zarządzany jest stan (czyli pliku, w którym deklarowana jest zmienna instancji), które podmioty zewnętrzne zmieni to w jakim momencie.
Nacisk na niezmienność i obliczenia sprawia, że wyrażanie zależności podliczeń jest znacznie łatwiejsze, ponieważ nie ma zarządzania stanem, tylko funkcje / obliczenia, które są łączone w miejscu, w którym chcesz wyrazić zależności podliczeń.