多くの場合、OOPは自然に人々が世界について考える方法に対応していると聞きます。しかし、私はこの声明に強く反対します:私たち(または少なくとも私は)遭遇するものの間の関係の観点から世界を概念化しますが、OOPの焦点は個々のクラスとその階層を設計することです。
日常生活では、OOPの無関係なクラスのインスタンスになるはずのオブジェクト間に、ほとんどの関係とアクションが存在することに注意してください。このような関係の例は次のとおりです。「私の画面はテーブルの上にあります」。「私(人間)は椅子に座っています」; 「車が道路にあります」; 「キーボードで入力しています」。「コーヒーマシンは水を沸かす」、「テキストはターミナルウィンドウに表示される」。
動詞が2つのオブジェクトに作用して何らかの結果/アクションを生成するアクション(関係)である2価(たとえば、「私はあなたに花を贈った」など)の動詞の観点で考えます。フォーカスがアクションであり、2つ(または3つ)の文法上の】オブジェクトが等しく重要です。
それとは対照的に、最初に1つのオブジェクト(名詞)を見つけて、別のオブジェクトに対して何らかのアクションを実行するように指示する必要があるOOPとは対照的です。考え方は、名詞で動作するアクション/動詞から名詞で動作する名詞にシフトします。これは、すべてが受動的または再帰的な音声で言われているようです。たとえば、「テキストはターミナルウィンドウで表示されています」。または、「テキストは端末ウィンドウに表示されます」。
焦点が名詞にシフトされるだけでなく、名詞の1つ(文法主題と呼びましょう)には、他の名詞(文法オブジェクト)よりも高い「重要性」が与えられます。したがって、terminalWindow.show(someText)とsomeText.show(terminalWindow)のどちらを言うかを決定する必要があります。しかし、実際にshow(terminalWindow、someText)を意味するのに、操作に影響を与えることなく、このような些細な決定を人々に負わせるのはなぜですか?[結果は操作上重要ではありません。どちらの場合もテキストはターミナルウィンドウに表示されますが、クラス階層の設計において非常に深刻な場合があり、「間違った」選択は複雑で保守が難しいコードになります。
したがって、OOP(クラスベース、シングルディスパッチ)を行う主流の方法は難しく、それは非自然的であり、人間の世界に対する考え方に対応していないためです。CLOSの汎用メソッドは私の考え方に近いものですが、残念ながら、これは一般的なアプローチではありません。
これらの問題を考えると、OOPを行う現在の主流の方法が非常に一般的になったのはどうしてですか。そして、もしあれば、それを退位させるために何ができるでしょうか?