🚀

概念の依代としてのオブジェクト指向

2024/09/19に公開

プログラマ界隈では、オブジェクト指向は失敗だとか、真のオブジェクト指向はそういうものではない、いや世間に広まった解釈が正しい等々の論争を繰り返している。
定期的に論争になるところを眺めるに、オブジェクト指向という概念には何か不思議な魅力があるに違いないと思い無駄なことを考えてみることにした。

アラン・ケイのオブジェクト指向

アラン・ケイのオブジェクト指向で核心だと思う点を勝手に挙げると——

  1. オブジェクトという単位よりも細分化する必然性はあるのかという問い
  2. オブジェクトという単位がメッセージングにより協調動作する

——ということだと思う。

還元主義からすれば、オブジェクトという単位よりも細分化できるのは明白だと思うが、それはしないというのが味噌かと思う。
インターネットを構成する一つのサーバーを一つのオブジェクトと考えた場合、サーバーのメモリとかストレージなどに分けて考える意味はあるのかと問われれば、あるという人と無いという人がいるだろう。

プログラミング言語で用いるオブジェクトは、オブジェクトという独立で最小の単位を尊重する意義は薄い場合、実装効率の都合からフォンノイマンアーキテクチャ上で効率のよい表現となる。オブジェクトの集合体を基本とするアーキテクチャ上であれば、嫌でもオブジェクト指向になるのかもしれない。

オブジェクト指向哲学(OOP)

最初に耳にした時には、オブジェクト指向哲学ってふざけているのかと思ったが、真面目なものらしい。
オブジェクト指向存在論というものもあるらしいが、この百年位のそこそこ大きめな哲学のトレンド(だと私は考えている)から勝手に斜めな解釈をすると——

  1. オブジェクト(人間という存在)という単位よりも細かく要素を還元して考えることの必然性はあるのかという問い
  2. 主体者たるオブジェクトがメッセージングにより協調することで世界が構成される

——くらいのところかと思った。デカルトから始まる要素還元主義により、人間存在自体が何かの役に立つという人間自身の視点により分解され疎外されるということへの問題意識が、この百年位のそこそこ大きめな哲学のトレンドだと勝手に考えている。

人月商売としてのオブジェクト指向プログラミング

基本的に物作りの仕事は、成果物単位でやりとりすることと親和性が高い。
オブジェクト指向プログラミングがメジャーになる前から、様々な開発手法は存在するが、モジュールを疎結合にして、担当モジュールを開発者に割り当てられれば、人月商売としては非常に効率が良い。
開発言語のエコシステムと言語がサポートするモジュールの粒度として、オブジェクトという単位は非常に相性がよかったのではないだろうか。
割り当てるタスクがオブジェクト単位であれば、頭数と成果物のかけ算により開発工数の見当もつけやすそうにみえる。

  1. オブジェクトという単位よりも細かく開発するのは効率が悪い。
  2. 疎結合のオブジェクトを結合して製品とするのが色々都合がよい。

上流工程がインターフェイスや継承を適切に設計することにより、より筋よく、それなりに制御されたコピペプログラミングが可能になるだろう。

Discussion