今日教えられているソフトウェア工学は、完全にオブジェクト指向プログラミングと「自然な」オブジェクト指向の世界観に焦点を当てています。ドメインモデルをいくつかのステップとユースケース図やクラス図のような多くの(UML)アーティファクトを持つクラスモデルに変換する方法を説明する詳細な方法があります。多くのプログラマーがこのアプローチを取り入れており、オブジェクト指向アプリケーションをゼロから設計する方法について優れたアイデアを持っています。
新しい誇大広告は関数型プログラミングであり、多くの本やチュートリアルで教えられています。しかし、機能的なソフトウェア工学についてはどうでしょうか?LispとClojureについて読んでいるとき、私は2つの興味深いステートメントについて思いつきました。
関数型プログラムは、多くの場合、トップダウンではなくボトムアップで開発されます(「On Lisp」、Paul Graham)
関数型プログラマーはマップを使用し、オブジェクト指向プログラマーはオブジェクト/クラスを使用します(「Clojure for Java Programmers」、Rich Hickleyによる講演)。
では、LispやClojureなどの機能的アプリケーションの体系的な(モデルベースの)設計の方法論とは何でしょうか。一般的な手順は何ですか、どのアーティファクトを使用しますか、それらを問題空間からソリューション空間にどのようにマッピングしますか?