やたらとオブジェクト指向を感情的に攻撃する人がいる。そもそもオブジェクト指向とは何かを考えた時に、それは言語でもアーキテクチャでもなく、個別のソフトウェアの性質ではないかと思った。
身の回りを見渡してみるとモノであり、状態を持つ物で溢れている。照明のスイッチやオーディオ機器の音量を調節するダイヤルは「私」とインタラクトする、オン/オフやメモリ位置の状態を持った「オブジェクト」だ。
そしてソフトウェアのフロント部分はまさに現実のモノを模倣しているのだから、これらがオブジェクト指向であるのは自然なことであり、それを否定しても面倒なことになるだけだと思う。
ここまで考えて思いついたのは「私」という存在の特異さである。「私」が朝起きてから夜寝るまでの全ての行動や生まれてから死ぬまでのライフイベントの数々はオブジェクト指向では記述できない。「私」に使われるモノはオブジェクト指向で記述するのが合っているが、主体性を持った「私」を記述するには手続き型が最適だ。
他にも手続き型の性質を持ったモノは存在する。マンガや小説や映画などの物語、音楽、確定申告などのいわゆる「手続き」など意外に多い。世の中の全てをオブジェクト指向で認識するのは間違いだ。
C++などの素朴なオブジェクト指向言語にはmain関数がある。これはオブジェクト指向のコードの中で「私」を代表し、唯一手続き型の性質を持つ「特異点」だ。しかしJavaやC#など、次世代のオブジェクト指向言語はこの特異点を「エレガントでない」とみなし、main関数もオブジェクトの中に組み込んでしまった。
確かに社会から見れば「私」はただのモノに過ぎない。main関数もOSやJava VMに管理されるひとつのモノだ。しかしそれでも、たとえ形式的なものであっても主体性を失いたくはない。そのような思いがオブジェクト指向を攻撃する人の憎悪の源泉ではないかと思う。まあJavaはともかくC#、というよりその開発元のMSはそういうタイプの人に嫌われているからね……。
現在、ソフトウェアの少なくともフロント部分はオブジェクト指向の性質を持っていて、私達はそれを当然のように使っている。しかしAI技術が進歩することによって、私達が「〇〇をしたい」というだけで自動的に全ての手続きが組み上がるソフトウェアが実現するかもしれない(部分的には実現してはいる)。そうなったときには開発者も自ずとオブジェクト指向から脱却する日が来るかもしれない。