どういう表現をすると、関数型プログラミング(FP)とオブジェクト指向プログラミング(OOP)の適用分野を適切に表現できるのか、というのを考えているのですが、難しいです。
なんとなく、ある処理に対してアプローチをする場合に、次のような考え方ができるような気がしています。
- 要素に対する処理はオブジェクト指向プログラミングで検討せよ
- 集合に対する処理は関数型プログラミングで検討せよ
集合を表現するオブジェクトも実際のプログラミングで必要なので、そこがハイブリッド言語でどちらのプログラミングパラダイムを使うかの判断上、境界線になりそうな気がします。現実的な解は、「集合に対する処理をするときはコピーして関数へ渡す」になりそうですが…
もともと現実世界のものを高度に抽象化して数式で表してモデルとするのが関数型プログラミングだと考えています。抽象度を高めることができると、再利用性が高まったり、アルゴリズムとして正しいことを証明できたりするので、便利なのだと考えています。しかし、現実世界では抽象化しすぎると困ることがあり、適度なモデル化で済ませた方がわかりやすい場合も多くあります。適度なモデル化に適した分析方法のひとつにオブジェクト指向があり、そこで設計したものを実装しやすいオブジェクト指向言語の人気が高いのだと考えています。このあたりの抽象度に対しての認識を持っていれば、適切な方法を採用できるようになる気がします。