きのうの、要件を出すところから運用まで、一気に書いてみるで、
(4)機能要件の抽出(クラス図のメソッド部分)
のところで、
・(2)の名詞、つまり、主語か、目的語のクラスのメソッドに、
開発システムのアクティビティ図のアクティビティを埋める
と書いたところがありますが、メソッドを、主語と目的語のどちらに入れるかについての話。
■まず、原則、そのクラスのCRUDは、メソッドにある
これは原則論ですが、あるクラスの
・作成または追加(C:Create)
・検索(一覧)読み込みなど(R:Read)
・編集、更新、変更など(U:Update)
・削除(D:Delete)
を意味するようなメソッドは、そのクラスのメソッドとします。
たとえば、「申請書を作成する」というような場合、
申請書クラスに、作成(Create)メソッドがきます。
ちなみに、Javaで考えると、Cはコンストラクタ、Rはgetter,
Uはsetter,Dはデコンストラクタ・・・は、Javaにはないけど、
closeとかremoveの処理に当たります。
■ただし、そうできない、しないほうがいいこともある。
しかし、たとえば、削除をしようとしても、自分でメモリーを解放できないので、誰かから削除してもらわないといけない場合とか、Factoryみたいに、いろいろなものを生成するようなケースでは、この限りではありません。
この場合は、主語のほうに入れたりします。
また、たとえば、
コンビニ(の店員)は、お客様に、ビッグ(サッカーくじ)を販売する
という業務(なのか ^^;)があったとき、
ビッグというクラスに「販売する」というメソッドをいれてもいいです。
でも、コンビニのほうに、「販売する」として、引数を販売するもの(=ここではビッグ)にしたほうがいいかもしれません。
このように、主語がある動作をすることが重要で、目的語はいろいろと入れ替えられる場合、主語にメソッドを入れたほうがいい場合もあります。
■主語等に入れる場合、目的語をどこかに指定する
上記の、
コンビニ(の店員)は、お客様に、ビッグ(サッカーくじ)を販売する
という業務(なのか ^^;)があったとき、
コンビニクラスや、お客様クラスに「販売する」に対応する
メソッドを入れる場合、
メソッドを「ビッグ販売」にするか、
「販売」メソッドの引数を「ビッグ」にして、目的語をどこかに入れないといけません。そうしないと、何を販売してるのか??っていうことになります。
「ビッグ販売」という場合は、販売しているものが一般化できない場合、逆に「販売」で、引数がビッグのときは、いろんなものの販売が一般化できる場合は考えられます。
と、この程度の注意点というか、方針はあると思います。
ただ、方針にあまり関係ないようなメソッドは、どこかに入れておけば(どこにいれていいかわかんなかったら主語、主語に入れておかしかったら目的語)OKだと思います・・・けどお(^^;)