オブジェクト指向について

最近ネット界隈で、「オブジェクト指向は必要か」という議論が盛り上がっています。自分も便乗して、意見表明しておこうと思います。

 

オブジェクト指向は便利です

結論から言うと「現在のところ、オブジェクト指向は設計、実装、単体テストを包括的にサポートすることのできる唯一の手法なので、積極的に利用するべき」ということです。例えば、設計にはUML、実装には各種OO言語、単体テストはxUnit(あるいはそのクローン)が揃っています。システム開発を一貫して一つの概念で押し通せるので、とても便利に感じています。個別のフェーズでは、例えばOOで設計するのかDOAで設計するのか、OO言語で実装するのか関数型言語で実装するのかなどといった選択肢はあります。それぞれの箇所では他の手法に負けるかもしれませんが、総合的なバランスにはオブジェクト指向に一日の長がありそうです。

 

オブジェクト指向に反対する人の意見への反論

オブジェクト指向を疑問視する人の声には「HTTPやDBの仕組みにオブジェクト指向はなじまない(インピーダンスミスマッチ)」や「オブジェクト指向は初心者には難しすぎる」といった批判があります。一理ありますが、一つダメなので全てダメ、という極論に感じるところもあります。

「HTTPやDBとのインピーダンスミスマッチ」については、レトロなWeb開発にしか当てはまらない意見に感じます。少なくともGUIアプリやネイティブスマフォアプリなら、オブジェクト指向を完全に使えるでしょう。さらに最近のWebアプリはクライアント側にjavascriptでプログラムを書ける時代なので、クライアント(つまりブラウザ)をステートフルなものとみなせます。なのでオブジェクト指向の考え方が可能です。DBについては、O/Rマッパーを適切に使い、苦手な箇所だけstaticなメソッドを持つクラスを用意して処理を局所化すれば、十分オブジェクト指向の恩恵をうけることができます。

「初心者に難しい」は確かに当てはまります。だからといって使わせないのは「LINEは危ないらしいけどよくわからないから、夜10時以降は使ってはいけない」というお触れと同レベルに思考停止だと思います。初心者は確かに、オブジェクト指向に則ったプログラムを0から実装することはできないかもしれません。しかし適切に設計されたフレームワークによって、オブジェクト指向に則ったプログラムへと導くことは可能です。さらに、そのようなフレームワークを利用することでオブジェクト指向の考え方やスキルが身につき、初心者から脱却することができます。

 

■ 最後に

オブジェクト指向は、決して万能な手法ではありません。しかし設計、実装、単体テストといった幅広いフェーズに対応する全体最適解と思われます。現在のメジャーな言語の殆どがオブジェクト指向をベースにしていることを考えても、オブジェクト指向をしっかり身に付けることはとても重要かつ有用なことだと思います。