pre-communication

模擬会話

FP v.s. OOP に対する Alan Key の回答

Alan Kay's answer to Why is functional programming seen as the opposite of OOP rather than an addition to it? - Quora

関数型とオブジェクト指向は compatible である。

計算とは現実世界のシミュレーションである。 シミュレートするときに現実世界の「時間」概念を CPU時間で表現していると race condition (競合状態) が発生するし、プログラムについて推論するのが難しくなる。 そこで、現実世界全体の「状態」を経歴として持ってそれぞれに現実世界の時間を反映した index を持たせて管理すると上記の問題が発生しなくなる。 ここまでを 1960年頃に Lisp の考案者であるジョン・マッカーシーが考えた。 我々オブジェクト指向考案者はこれがオブジェクト指向でも有用だと気付いた。 例えば、オブジェクト指向でも計算機の状態が正しく現実を模写した状態から次の正しい模写へ遷移するというイメージでプログラムをかける*1。 このように書かれたプログラムには競合がないし推論も簡単だ。経歴という考え方には他にも様々なメリットがあった。

重要なのはオブジェクトが状態を持つかやモナドがどうとかではなく、計算が現実のシミュレーションだと気づくことだ。

--

--

大学で計算機科学を学んだ印象と結構違って面白かった。 大学で得た計算機科学への印象は、全てのものを「問題」だと捉えて計算とはそれを解くために使う学問、といった感じでシミュレーションという感じではなかった。 オブジェクト指向設計者の意図としてこの意見があるのは設計をする上での指針になる。ドメイン駆動設計とかこれを穏健にして技術よりにした発想ですよね。

ふんわりとした推測としてはプログラムの中の「問題解決パート」(複雑なアルゴリズムなどが出てくる)をうまく隠蔽して、アーキテクチャ的に上位のレイヤーでは模倣であるかのように見えるプログラムを書いていけばいいのかなぁ。という感じ。 まぁ上の回答中でもこの思想を現実にしているプログラミングツールはまだないということらしいけど。

*1:オブジェクト指向ではオブジェクトは現実世界の物事を反映したものという考え方は一般的だろう