続・オブジェクト指向の話

オブジェクト指向設計の初期段階では、まずユースケース自然言語で書いて、そこから名詞となるものを抽出して、各名詞がお互いにどういう関係にあるかという分析をしていきます。クラス導出の初期段階です。

最初、この手法を学んだときに「なんで名詞だけ抜き出してほげほげ」なんてことをやるんだろうとかなり疑問というか、手法は正しいのかもしれないけど、なぜそれをしなければいけないかが理解できませんでした。自然言語の中から名詞を抽出する作業と、コーディング作業というのが、頭の中でリンクしていなかったからです。

これも、先日書いた物を選んでからほげる、の法則から考えるようになってから理解できるようになったことのひとつです。

宮川さんは、「最初にメインプログラムの中にオブジェクトと、そのオブジェクトに何をさせるかを書くそう」と書きました。これは結城さん風に言うと、"インタフェースでプログラミングしている"ということになります。オブジェクト指向プログラミングでは、下位の実装を考えずにそのプログラムの登場人物(オブジェクト)とその人物ができること(インタフェース)だけでロジックを組み立てることができるということでしょう。

ユースケース自然言語から名詞を抽出して名詞がお互いにどういう関係があるかという分析は、この"インタフェースでプログラミングする"というコーディング作業の上流設計なんだなという事に気付いて、そこで初めてなぜそれをする必要があるのかが明確になりました。

ということは、そのプログラムの動きがああでこうで、というのを頭の中で思い浮かべられるのなら、ユースケースから自然言語を抽出してクラス図を書いて...なんてことをやらなくても、インタフェースでプログラミングしていけばプログラムが完成しちゃったりもしますよね。結果、ソースのうちインタフェースでプログラミングしている箇所が仕様書になるんです。

はてなはシステムの設計書は書かないし、上流工程にはほとんど時間をかけないという話をすると、ずいぶん無茶な開発方法なんだと思われる方もいるようですが、分析とか設計をしてないということじゃなくて、オブジェクト指向の考え方、それからペアプログラミングという方法でその辺を頭のなかで行いつつ、複数人でその知識を共有するという方法を取っている、ということだったりします。