Posted by & filed under 開発.


今日、オブジェクト指向について1時間ほど語りました。整理するため自分用に書いたメモを公開します。大まかな構成はメモどおりに話しましたが、メモに書いていないこともたくさん話していますし、書いていても話さなかったこともあります。

前提として自分自身のオブジェクト指向へのスタンスを書いておきます。

自分のプログラマとしてのキャリアとオブジェクト指向の隆盛の重なりを考えると客観的に見て自分はオブジェクト指向世代のプログラマなんだと思います。一方で、世間で過剰にもてはやされる技術には反発してきました。オブジェクト指向も例外ではありません。オブジェクト指向を否定はしませんが、金科玉条のように扱う人の前では、オブジェクト指向なんて技法のひとつに過ぎないと、冷たく突き放してきました。

ただここ数年、かつてに比べてオブジェクト指向の威光は下がっている気がします。関数型プログラミング支持者から、オブジェクト指向なんて副作用をベースにした技法だと揶揄されることすらあります。過去10年でプログラミング技法がそれほど進歩したとも思っていませんし、人間の思考能力が大きく進化したとも思えないので、オブジェクト指向の(相対的な)影響力の低下は、価値の低下ではなく、単なるかつてのブームへの反動だと思います。ブームの反動だとしても、オブジェクト指向は時代遅れで無価値だと主張する人は(寡聞にして)ほとんど知りません。要は、オブジェクト指向は過剰に持ち上げられるでもなく、過剰に蔑まれるでもなく、冷静に価値が評価される時代になったのだと思います。これでぼくも無理することなく、普通にオブジェクト指向を話せる時代になりました。

改めてぼく自身のオブジェクト指向への評価は、全能の技法ではないけどれど優れた技法のひとつ、です。率直に言って過剰な思い入れはありません。

大部分のプログラミング技法の価値はコードの依存性の整理をいかに補助するかだと思っています。コードの依存性を整理するひとつの有効な策が、コードの中に不変の部分を作り込んでいくことです。マクロに見ればインターフェースです。ミクロな技法を挙げれば不変オブジェクトや副作用の排除などがあります。コードの中に不変の部分を作っていくことで依存の連鎖を断ち切って、変更の影響を管理可能な範囲に押し込めます。

不変の部分を作っていくにはコードの中の変わりやすい部分とそうでない部分を見極める目も必要です。多くのプログラマはある規模までは無意識にできています。何かを設定ファイルに追い出したり、外部パラメータに追い出したりするのは自然にできていると思います。そうやって無意識に追い出しているのは変わりやすい部分だと認識しているからです。コードの規模が大きくなっても変わりやすい部分を外に追い出す感覚は重要です。

不変を作り込む時にも注意があります。本質的に変わりやすい部分を扱うコードに早々と不変を持ち込むと融通の効かないコードになるからです。早すぎる最適化というプログラミングのアンチパターンがありますが、同じような言い方をすると、早すぎる不変の作り込みと呼んでもいいかもしれません。早すぎる不変の作り込みをすると、回避するためのラッパーコードや無駄なフラグを持ち込む羽目になります。形式的にはインターフェースを使った固いコードで美しいのに、現実的には足かせにしかならないコードができあがります。

だらだら書いていたら前置きのほうが長くなりました。以下がオリジナルメモです。



関連文書:

  • 関連文書は見つからんがな

Comments are closed.