仕様分析

仕様分析とは、対象となる世界を深く知る作業です。

オブジェクトの定義

さて、いよいよ具体的な分析の手順について話をしましょう。ここではオブジェ クト指向による分析について話します。

オブジェクト指向では、すべての作業はまずオブジェクトから始まります。

オブジェクトの抽出

分析でまずする事は、オブジェクトの抽出と定義です。といっても難しい事で はありません。その世界に出てくる言葉やものをすべて挙げればいいのです。 思いつくまま片っ端から書いていけばいいのです。

例えば音楽データベースなら「曲」「作曲者」「演奏者」「楽器」といったも のがすぐ浮かんでくるでしょう。財務処理なら「請求書」「領収書」「振込み 通知書」のように書類の名前が主に浮かんでくるでしょう。こうしたものが 「オブジェクト」です。

ただし、「請求書」のような書類をオブジェクトにするのは少し問題がありま す。「書」を取って「請求」というオブジェクトにしましょう。なぜなら「請 求」を記述したものが「請求書」なわけですから。そして今はどういう請求書 を作ればいいかを考えているわけですから。

「請求」のように抽象名詞であっても、動作のように見えても構うことはあり ません。とにかく出てくる言葉をすべて挙げてみましょう。そしてそうやって 出てきた言葉の中で、オブジェクトにあたるものを拾い出していけばいいので す。

拾い出してきたものが本当にオブジェクトなのかどうかは分析を進めていけば わかります。これからオブジェクトについて何を記述していけばよいかをお話 ししますから、そうした作業が見当違いのような気がしたら、それはオブジェ クトではないのです。そしてオブジェクトではないことがわかったら、その時 にそれを消しゴムで消せばいいのです。

オブジェクト例

オブジェクトのようなものを見つけ出せたら、それに対して例を出してみましょ う。例えば「曲」というのがオブジェクトとして浮かんできたら、「曲」とい うオブジェクトのインスタンスを例として挙げるのです。「イエスタディ」 「関白宣言」「パッハルベルのカノン」などなど。とにかく何でもいいから挙 げてみましょう。そしてそれによって「曲」とは何かが理解できます。

もし「自動車」というようなオブジェクトが見つけ出せたら注意して下さい。 これに対して例を出してみましょう。「カローラ」「ヴィッツ」「スカイライ ン」でしょうか?それとも「Aさん家のエスティマ」「社長の自家用ベンツ」 でしょうか?この2通りでは「自動車」というものの意味するところが全く違っ ていることに注意して下さい。前者は「車種」なのに対して、後者は「1台の 自動車」を意味しています。

これのどちらがいいかはドメインによります。もしあなたが新車販売 用の価格リストを作りたいのならば、自動車といえば車種です。しかしあなた が駐車場の管理システムを作りたいのならば、自動車といえば1台の自動車を 指します。そのドメインで「自動車」という言葉で何を指すのかをはっきり させて下さい。そのためにオブジェクトの例を出すのです。

「請求」のような抽象名詞の場合は例を出しにくいでしょう。しかし、ここで 出すのはあくまで「例」であって、正確さは必要としていません。だからその もののイメージがわくようにつらつらと文章を書いたり絵を書いたりすればい いのです。「ほら、この前○○商事向けに財務管理ソフトを作ったことがあっ たでしょう。あの時にソフトが完成してからお金を請求しましたよね。まさに それが『請求』です。」とでも書いておけばいいのです。

例を書く場合は、正確さは要求されませんし、定義が同語反復になってしまっ ていてもかまいません。ただ、それを読んだ時にオブジェクトではなくインス タンスを思い浮べることができればいいのです。漠然とした「自動車」ではな く「社長の自家用ベンツ」を、漠然とした「請求」ではなく「先月○○商事に した請求」というように、です。

オブジェクトの定義文

オブジェクトに対してその例が思い浮かぶようになったら、そのオブジェクト についてのイメージが(あなたの頭の中で)固まったということです。ここで、 手順としては「定義文」を書きます。これはオブジェクトの正確な定義です。 「このドメインでいう『自動車』とは一つの自動車の型式のことで……」と書 くのです。

ただし、この作業を厳密に行うことはありません。なぜならこの作業は非常に 難しいからです。そして難しいわりには見返りが少ないからです。ほとんどの 人はオブジェクトの名前と例を見ればそのオブジェクトの意味を理解すること ができます。そしてそれに比べて長く形式ばった説明の方がわかりにくいので す。

定義文には、形式ばった説明を書くのではなく、一般の人に誤解されそうな事 や注意してほしい事を書きましょう。例えば「ここで『自動車』というのは車 種のことではなく1台の自動車を指します」というように。 このオブジェクトではないものの例を書くのは意義があります。誰かがオブジェ クトに対して間違ったインスタンスを思い浮かべてしまった時、それがなぜ間 違っているかを書きましょう。 それによってオブジェクトの定義文はより正確になっていきます。

オブジェクトの属性や関係(後述します)についての定義は書かないようにしま しょう。例えば「『自動車』にはナンバーがあって……」というように。これ はここでわざわざ書かなくても、属性を定義すれば自然に出てくるものです。

最後に注意。定義文が少ない事を気にしないで下さい。わかりやすいオブジェ クトほど定義は簡単なはずです。