Пожалуйста , обратите внимание, что потребности Харпера для обучения в вводном учебном плане CS класса сильно отличаются от потребностей реального проекта жизни . Его работа состоит в том, чтобы преподавать фундаментальные понятия (например, модульность, параллелизм, индукция) новичкам. Таким образом, очень важно, чтобы выбранный язык (и парадигма) мог выражать эти понятия с как можно меньшей церемонией (синтаксической и концептуальной), насколько это возможно. Знакомство, поддержка инструментов, доступные библиотеки, производительность выполнения и т. Д. Совершенно не имеют значения в этом контексте. Поэтому, пожалуйста, имейте это в виду, учитывая следующее ...
Мнение , что OO является анти-модульные результаты большого числа зависимостей с другими классами даже объекты хорошо разработанные классы , как правило, в конечном итоге. То, что это проблема - даже в глазах сторонников ОО - становится ясным, если взглянуть на распространение платформ Dependency Injection , статей, книг и постов в блогах за последние годы (также интересно появление насмешек и заглушек).
Другим указанием является важность шаблонов проектирования и сложность их реализации - по сравнению с некоторыми другими парадигмами программирования - например, фабрики, построитель, адаптер, мост, декоратор, фасад, команда, итератор, посредник, наблюдатель, стратегия и метод шаблона и, возможно, Композитные все так или иначе связаны с улучшением модульности ОО кода.
Наследование также проблематично (например, проблема хрупкого базового класса ), и (подтип) полиморфизм соблазняет человека, чтобы ускорить реализацию алгоритма между несколькими классами, где изменения могут распространяться по всей цепочке наследования (вверх и вниз!).
Обвинение в антипараллельности связано с акцентом на состояние по сравнению с вычислениями (иначе как изменчивость против неизменности). Первое делает его более вовлеченным для выражения зависимостей подкомпьютеров (что Харпер берет на параллелизм!), Так как вы обычно не можете определить из того места, где находится управляемое состояние (то есть файл, где объявлена переменная экземпляра), какие внешние субъекты изменит это в какой момент времени.
Акцент на неизменяемости и вычислениях значительно упрощает выражение зависимостей подкомпьютеров, поскольку отсутствует управление состоянием, только функции / вычисления, которые объединяются в том месте, где вы хотите выразить зависимости подкомпьютеров.