オブジェクトはストックで、関数はフロー

基本的にオブジェクトと関数はおんなじもので、Javaラムダ式では記述は関数だけど扱いはオブジェクトになってたりします。逆に、関数でオブジェクトを実現することもできます。
なので、オブジェクトと関数が、モノとしてどう違うかっていう話にはあまり意味がなくて、問題は表現としてどう違うかってことになると思います。


表現として、オブジェクトはフィールドとかプロパティとかで状態をもって、その状態をもとにいろいろ動いて、状態を変えます。
関数は引数をとって、その引数をもとにいろいろ動いて、戻り値を返します。
オブジェクトは状態が大事、関数はデータの流れが大事、って感じになります。


アプリケーションの中では、ユーザーインタフェースとデータ構造・ストレージは状態が大事です。処理に関してはデータの流れが大事です。
ここで、ユーザーインタフェースやデータ構造はプラットフォームごとに一揃えあれば充分です。ストレージはプラットフォームに依存せず一揃えあれば充分です。ようするに、数がたくさんは不要です。
一方で、データの流れは、アプリケーションごと、処理ごとに必要になります。数がたくさん必要です。


ということで、オブジェクト指向が有効な場面は少なくなるのに対して、関数が重要な場面は多くなる、ってことになるんじゃないかと思います。


もうひとつ。結局オブジェクトと関数というのは、同じものを違う見方で見ているだけであり、しかもそのとき片方が見えてるときには片方は見えなくなるルビンの壺のようなものなので、ある程度排他的になるのは仕方ないかもなーと思います。
全体を両方の考え方にするんではなくて、ここはオブジェクト的、ここは関数的ってやったほうがいいんじゃないかと。