Программная инженерия, как ее преподают сегодня, полностью ориентирована на объектно-ориентированное программирование и "естественный" объектно-ориентированный взгляд на мир. Существует подробная методология, которая описывает, как преобразовать модель домена в модель класса с несколькими шагами и множеством (UML) артефактов, таких как диаграммы-примеры или диаграммы классов. Многие программисты усвоили этот подход и имеют хорошее представление о том, как проектировать объектно-ориентированное приложение с нуля.
Новый обман - это функциональное программирование, которое преподается во многих книгах и учебниках. Но как насчет функциональной разработки программного обеспечения? Читая о Lisp и Clojure, я получил два интересных утверждения:
-
Функциональные программы часто развиваются снизу вверх, а не сверху вниз ('On Lisp', Paul Graham)
-
Функциональные программисты используют Карты, где OO-Programmers используют объекты/классы ('Clojure для Java-программистов', говорят Rich Hickley).
Итак, какова методология для систематического (на основе модели?) дизайна функционального приложения, то есть в Lisp или Clojure? Каковы общие шаги, какие артефакты я использую, как мне отобразить их из проблемного пространства в пространство решений?