uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

発達したオブジェクト指向は見えなくなる - 青鬼としてのオブジェクト指向

業務アプリの業務部分で、オブジェクト指向なんか使わないよね」(Re)という話が出てますのでちょっと思うところを書いてみます。

オブジェクト指向の究極は、オブジェクト指向であることがみえなくなるのだと思う。

フレームワークって言うのがまさにそうで、フレームワーク自身が設計の多くをまかなう故に、オブジェクト指向設計をさせない作りになる。テンプレートメソッドのメソッドを埋めればアプリとして動作する。例えばGrailsを使う場合、アプリをくむ立場からはオブジェクト指向の要素はほとんどありません。でも使ってない訳じゃなくて、間接的に使っていて、使っていることが見えないほど巧妙になっているだけ*1

クラスライブラリというのもそういうものです。継承を多用させるなど、オブジェクト指向を熟知することを利用者に強要するようなクラスライブラリは、API設計としてはよろしくない。

しかし、それは、オブジェクト指向の失敗ではなく成功です。

ソフトウェア工学は、より誰でもが、より簡単に、より均質にシステムを開発できるように、発達してきました*2オブジェクト指向も同じです。

オブジェクト指向は最後は知らなくても済むものとなり、下位層として皆が忘れ去るかもしれません*3。誤解を恐れずに言うと「泣いた赤鬼」における青鬼のような存在なのです。

その意味でソフトウェア工学というのは自滅的学問ですが、自滅しながら新たな領域(抽象レベルの一段高い領域)に軸足を移していくものです。誤解を恐れずに言うと、ジョジョに出てきたカーズが火口に落ちたときに使った「燃えながらも次々と作り出すことで本体を守る甲殻」みたいなものです。

青鬼は、いなくなる訳ではなくて、また別の村(別のレイヤ)で同じことをしているのです。次はDSLとかかね。





ジョジョの奇妙な冒険 11 (ジャンプ・コミックス)

ジョジョの奇妙な冒険 11 (ジャンプ・コミックス)

*1:OOP関連技術として他の例で言うと、AOPもそうですね。プログラミングの問題として当初着目されましたが、今、普通の人はアスペクトとか書きません。書く必要がありません。でもDIコンテナとかを通じてちゃんと使っている。

*2:これを「低スキル者でも開発に参加可能にし、開発総コストを下げられるようにできた」と捉えると技術者から見ると印象悪いのですが、「役割分担を可能にするようにした」といえばフラットな表現でそれ自体を批判することはできません。難しい問題ではあります。

*3:全員が忘れ去るわけではなく、ある限定された人たちは知り続ける必要はあります。今でいうとハンドアセンブルや、ハンドオプティマイズの技術みたいなものは、不要になった訳ではなくて,誰か(たぶんOSやアセンブラコンパイラを書く人)は磨き続けやる必要があるのです。ただ、大半の人たとえば「業務アプリを書く人」は知る必要がない。