オブジェクト指向と関数型の関係
オブジェクト指向と関数型の違いは、視点の差異である。可変部分をカプセル化するのか(オブジェクト指向)、それとも可変部分をできるだけ最小化するのか(関数型)によって設計の原則は変わってくる。しかし、「インターフェースを意識した設計とプログラミング」は共通の目標だ。
「インターフェースを意識した設計・プログラミングが共通の目標としてありますが、それをOCPと継承を使って実現するのか、それとも関数型・データ思考の考え方で実現するのかで世界が全く違います。だから、マトリックスを考えて、今自分はどっちの視点で設計しようとしているのかを意識してください」
加えて重要なポイントとして、羽生田氏は「ポリモルフィズムというのは、アブストラクション(抽象思考の道具)である」と強調し、「走る(Run)」という言葉を例に挙げた。元々「走る」という言葉は動物が走るときに使われたが、20世紀になって自動車が登場すると、「自動車が走る」という風にも使われ始めた。そして今では、「ソフトウェアがOS上で走る」場合にも使われている。思考経済の仕組みとしてポリモルフィズムがあるのだ。
羽生田氏は「つまり、クラスという視点でのアブストラクションと、メッセージングという視点でのアブストラクションの両方がある」と説明した。
オブジェクト指向の将来
オブジェクト指向は業務系、Web系のシステムの開発では「オワコン」との声も聞かれるが、「組み込みやゲーム、メタバースの世界では、そうとも言えない」と羽生田氏。メタバースは、ある空間領域がインテリジェントになっていて、そことインタラクションすることで構成される。今後もオブジェクト指向のモデリングや実装は、こうした分野で生き残っていくと予想できる。
また、羽生田氏は冒頭で「マトリクスで物事捉えることが重要だ」と述べたが、これを突き詰めるとカテゴリ論になる。そして「その先にあるのはオブジェクト指向でも関数型でもなく、自然言語プログラミングの世界ではないか」と考察した。
例えば、データベースのスキーマ設計も、カテゴリ論的なビジュアル言語で可能になりつつある。統一モデリング言語というのはカテゴリ論とも言える。「関数型の世界でモナドと呼ばれる概念があるが、モナドに限らずカテゴリ論のいろいろなスキームが統一モデリングには使えるはず」と羽生田氏は言う。
未来は「リ・オリエンテーション」で創造できる
まとめとして羽生田氏はOOPの段階論を今一度示した。
「インターフェース指向設計が大事なんです。ここに行くために、オブジェクト指向的なOCPに基づいて到達するのか、それとも関数型データ思考でいくのかという違いがあり、オブジェクト指向を進化させれば関数的なものに取り組めるわけではないので注意。それでもインターフェースを中心に設計実装していきましょうということは変わらないと思います」
そして、Alan Kayの3つのメッセージにもどり、これは「ある程度実現されている」と羽生田氏。1つ目の「オブジェクト指向の肝はメッセージングによって物事を抽象化し処理を可能な限り遅らせることだ」というのは、ポリモルフィズムをアブストラクションと理解すれば、実現できたと言える。2つ目のダイナブックに関しても、アジャイルなコンピューティングのチームが常に学習し進化を続けることで、マイクロサービスやアジャイルチームという人間系も含めた組織活動として実現しつつある。
そして、3つ目の「未来を予測する最も確実な方法は、自分たちの手でそれを作り出すことである」というメッセージについては、今回の「リ・オリエンテーション」的な行動によって可能になる。羽生田氏は、その意味するところを説明してセッションを締めくくった。
「未知の世界に向き合うとき、まずは気になることをオブジェクトとして自分の目の前にポンと置いてみましょう。そしていい名前をつけてあげましょう(Abstraction)。そしてそいつに『自分はこんなことやりたいんだけど』とメッセージを投げてみましょう。そうすると、そのオブジェクトの裏でどんなことがうごめいているかを想像したくなりますよね。それが新しいサービス、そして未来を創造するということ、そのものだと思います」