あれから20年後のオブジェクト指向

20年ほど前の僕、プロの職業プログラマとして10年目ぐらいの脂の乗った時期。そんなころ、ずっと当たり前のように使ってきたオブジェクト指向ってなんだろう?そんなことを考え始めた時の文章。

ここで書かれていることは、MacPower誌という一般紙の性格を考えると至極真っ当なオブジェクト指向の説明になっていると思います。おおむね言いたいことはわかるし例えも悪くないかなと。ただプログラミングの世界でオブジェクト指向がもたらすメリットにもデメリットにも触れることができず、だから?という内容で物足りなさを感じてしまうのではないでしょうか?

オブジェクト指向プログラミングとひとくくりにしていますが、実はいくつも派閥があって、有名なところではSmalltalkに代表されるメッセージパッシングによるオブジェクト指向、もうひとつがC++に代表されるクラスによるオブジェクト指向。この辺の区分けは @sumim さんのQuora の投稿が詳しいです。

僕がプログラマ人生で辿ってきた道は、C++とともにクラス志向なんだという話を、この20年前の時期に@sumim さんから何度となくお聞きしていたんですが、あの頃のオレ「は?」という感じでまったく理解できていませんでした。それから時を重ねて、いろいろな言語を実際に触ってみて、ようやくある程度は実感として肌で感じることができるようになってきました。そんな @sumim さんとのオブジェクト指向談義、前にPodcastで公開しています。

そしてさらにプログラミングの世界におけるオブジェクト指向というアプローチも大きく変化しています。

あの当時は猫も杓子もオブジェクト指向、それ以外のプログラミングタイルはあり得ない、というぐらいの勢いでした。いまはそれほどではなく、別のアプローチ、関数型プログラミングという新しい、でも歴史は古いスタイルが主流になってきています。とはいえオプジェクト思考プログラミングが死んだわけではなく、良いところ悪いところをちゃんとみんな考え始めたという結果、使われる部分は限定的になってきたという感じでしょうか。

プログラミングにおけるパラダイムシフトとして大事なのはイミュータブルというコンセプトの重要性がましたことが大きいかと思います。イミュータブル=不変、変更できないデータを扱うプログラミングスタイル、それがコア数の増えた現代のコンピュータと相性が良く性能が出せ、そのスタイルをうまく扱えるのが関数型プログラミング、という流れで今に至ります。という関数型プログラミングの話は、また別の機会に。

オブジェクト指向の主役であるオブジェクトは、一般的に状態を内部に持つことで外部とは隔離された状態で物事の判断・処理をおこなえる、その独立性がプログラム全体の構成をわかりやすくしてくれる、というのが当初のメリットの一つだったのです。ですが、逆に状態を内部にもってしまうことでそのオブジェクトは並列な環境から同時にアクセスしづらい立場になっちゃったのです。オブジェクトも同時に色々できませんのでみんなからの依頼ごとを順番に処理していかないといけません。同時に状態を変更しなくてはいけない依頼が来たらあっというまに何が何だかわかんなくなっちゃいます。これが、先ほどふれた現代のコンピュータとの相性の悪さになってくるわけです。

ということで、見える範囲ではオブジェクト指向プログラミングも少し陰りが出てきていますが、使われる場所次第ではまだまだ役に立ちます。大きな括り、例えばアプリケーションの全体構造とかはまだオブジェクト指向的なフレームワークが主流ですし、逆にもっと末端な、プリミティブに近いもの、文字列とか複素数からソケットとかファイル処理とか実際のリソースと紐づいたものなんかは、オブジェクト指向的に扱った方が便利という感覚があります。適材適所、いろんなパラダイムを使いこなしていくのが最強への近道でしょう。

この記事が気に入ったらサポートをしてみませんか?