決してタイプミスではない。オブジェクト指向は一歩間違えるとオブジェクト嗜好になってしまうのである。
狭義の意味でのOOP(Object Oriented Programming)はすでに浸透している。いまやクラスや継承、ポリモーフィズムといったOOPの3種の神器を備えていない言語の方が珍しいであろう。ライブラリはクラスライブラリとして提供され関数はメソッドと呼ばれるようになって久しい。
カプセル化を行いインテリジェントな型を作成し、ポリモーフィズムを的確に使用して柔軟性、保守性に富んだプログラムを書いた経験があればOOPマンセーとなるだろう。本物のプログラマはOOPを愛しているのだ。
しかしこの成功体験が時にプログラマをOOPの暗黒面に引き込んでしまうのである。暗黒面に目覚めたプログラマには「本当のOOPはね…」「美しいプログラムというのは…」などといった芸術家気取りの発言が多くなる。プログラミングの目的は美しくあることではなく実用的な役にたつことであるということを見失ってしまう。
暗黒面に落ちたプログラマたちはやがてOOD(Design)やOOA(Analysis)やUMLといったキーワードを口にしはじめるだろう。しかし生粋の現実主義者であるあなたは上司として彼らの言葉に耳を貸してはいけない。むしろ暗黒面からいち早く引き上げるためのアドバイスをするべきだ。
OOA
こんなものにほとんど価値はない(ゴメンナサイファウラー先生)。というより分析がちゃんとできているならOOAなんて言い出さないだろう。分析とはプログラミングとは別の世界のスキルでありまだまだ体系化されているとはいいがたい。体系化されていないのにわざわざOOなんて形容詞をつけることには何の意味もないし、それを好んでつけるということは分析自体ちゃんとできていないからだ。
OOD
これまた定義の曖昧な言葉である。OOP言語で作るのであればある意味では当然OO設計になるであろう。しかしその意味でOODというならこれはOOPと同義語である。通常は世の中すべてのものをオブジェクトとして考えるという暴挙のことをOODと呼ぶ。
暗黒面に落ちるときはまずこの症状が発症する。手続きやビジネスロジックなどという抽象的なものまですべてをオブジェクトとして表現しようとし、RDBとの相性が最悪になる。こんな症状を確認したら「今回はDOD(データ指向設計)で」という呪文を唱えよう。軽度の患者なら暗黒面から引き上げることが可能だ。
UML
「UMLを使いましょう」などと言い出したら要注意だ。「ユースケースを書きましょう」「ここのロジックは複雑なのでシーケンス図をUMLで書きましょう」「このオブジェクトのステータス遷移はUMLでステートチャートを書きましょう」のようにどの仕事にUMLのどの部分を使うのかがはっきりしないのであれば、それは「ただ使ってみたい」からなのだ。
この症状を確認したらUMLを利用させてみるのもいいだろう。たいていの場合は失敗して二度とUMLなどといわなくなると思うが、稀にUMLの価値を引き出せるほど有能なプログラマがあなたの部下かもしれないからだ。
なんて偉そうなことを書いたが私自身何度も暗黒面には落ちている。天狗になり世の中のほかのプログラマを見下して井戸の中で吼えていた時期もある、一度くらい暗黒面を味わうのもいいことなのかもしれない。だから若くて有能なプログラマが吼えているのを見るとこそばゆくなるのである。