先月号に引き続き、UML モデリングツールをお持ちでない方向けの読者プレゼントを実施しています。
弊社の UML モデリングツールである Elapiz スタンダードエディション の
Elapiz Basic の正規ライセンス(\15,750 相当)を、 解答モデルをご送付いただいた方の中から、抽選で 3 名の方にプレゼントいたします。
解答モデルの送付についてをご覧いただき、是非ご応募ください。
現在、応募していただいた方の当選確率は、90 %以上です!
オブジェクトの広場はオージス総研グループのエンジニアによる技術発表サイトです
毎回、身近にあるモノや出来事など、簡単な【お題】を出題し、皆様にモデリングをして頂きます。次回の記事で、皆様の解答モデルの中から3つほど取り上げて、コメントを付けていくかたちで進めていきます。
前回の問題をもう一度確認しておきましょう。
カレーの作り方をモデリングしてください。
不足する情報は適宜補っていただいて結構です。補った情報は、コンセプトに記述してください。

図 お題(カレーの作り方)
解答はクラス図で表現して下さい。クラスには必要な属性を、関連には多重度を明記するのがポイントです (解答時間の目安は15分~30分です)。
今回も読者の皆様からたくさんの解答モデルを頂きました。ありがとうございます。 これまでと同じように、3つの解答モデルをピックアップして、当カフェのマスターとヒトクセある!?常連たちと一緒に見ていきましょう。 コーヒーなどを飲みながら、皆様も一緒にわいわいやる感じで考えてみてください。 また、残念ながら紹介することができなかった解答モデルはこちらに掲載しますので、 オブジェクトの広場 メーリングリストなどで意見交換していただければ幸いです。


コンセプトがなかなか決まりませんでした。
コンセプトどおりにはできたと思います。
| マスター | コンセプトがなかなか決まらなかったということです。カレーの作り方と言われてどこが本質なのか、確かに難しいですね。 |
|
| 久本くん | 作り方だから、どんな材料をどんな手順で料理するのか、というところが本質ですよね? |
|
| 唐沢さん | いろいろ出てきます。材料にも切り方がありますし、手順といっても煮る、切るといった調理方法や使用する道具、火加減なども気になります。 |
|
| 吉井さん | そうだね。お題からはそれらの情報が得られるね。 |
|
| マスター | このモデルでは、一つのお鍋に材料を加えていくイメージで、どんな手順でどんな材料を入れるかに注目していますね。 |
|
| 吉井さん | うん、「手順」というのも1つ大事なところだね。ちゃんと押さえていて良いと思うな。 |
|
| |
||
| 久本くん | 「分量」クラスを出しているのはどうしてなんでしょう? 「材料」の属性で「量」じゃないかなって思うんですが。 |
|
| 吉井さん | 「分量」クラスを出したのは、いろいろと可能性が広がって面白いね。 |
|
| マスター | どういうことですか? |
|
| 唐沢さん | 分かりやすいところでは、属性を「単位」と「値」にすれば、個数やグラム、カップ数などいろいろある単位を扱えるようになりますね。 |
|
| 久本くん | なるほど~。 |
|
| 吉井さん | 他にもあるよ。「材料」クラスが食材の仕様だったら、つまり”たまねぎとはこんなもの”みたいなことを表す概念だったら、栄養成分とかが表現できて面白い。でも、そのときは「分量」は別にしないと、仕様と実体が混在してしまう。 |
|
| マスター | そういうことから『材料は一度にまとめてなべに投入されるだけでなく、分割して投入される場合もある。』というコンセプトになっているんですね。 |
|
| 久本くん | そうか。旨みを出すための炒める用たまねぎと、食感を出すための煮込み用たまねぎがあるときでも、どちらも”たまねぎ”であることは同じですよね。 |
|
| 吉井さん | そうそう。久本くん、カレーに凝ってるねー。 |
|
調理方法については、深く考えず 料理の構成を主としてモデリングする様に考えました。


モデリングに慣れていない為、
何をコンセプトにしたら良いか悩んでしまいました。
始めは、複数の材料と対応した調理方法をどのように表現したら良いか、
悩みましたが分からず結果、この様なモデルになりました。
また、概念モデルを考えると、つい実装を意識してしまい、
うまく概念モデルを作成できませんでした。
今回始めて概念モデルに挑戦しましたが、全く自信は無く、 目安時間も大幅にオーバーした為50点以下?といった具合です。
| マスター | コンセプトの通り、カレーを作る上での必要なモノが洗い出されてますね。 |
|
| 吉井さん | そうですね。料理を作るときに何が必要なのかの概要がわかりやすく表現されているかと思います。 |
|
| 唐沢さん | でも、「料理」と「器」、「料理」と「時計」などの多重度が1対1になってますよ。
ということは、この「器」はカレー作り専用の鍋とかなんでしょうか? |
|
| 久本さん | うちには、カレー専用の鍋がありますよ。 |
|
| 唐沢さん | じゃ、「時計」は? |
|
| 久本くん | うちには、カレー専用に使っている時計ってのはなかったような・・・ |
|
| 吉井さん | 「料理」と「器」、「料理」と「時計」、「料理」と「火」の多重度の1対1は
もう少し検討する必要がありそうですね。「器」、「時計」、「火」は、いろいろな「料理」
でも使うので、「料理」とそれらのモノとの関係は、1対多の方がよさそうですね。 |
|
| マスター | 「材料構成」と「材料」のところはどうでしょうか? |
|
| 唐沢さん | 「料理」と「材料」に直接関係を引いて、1対多の関係でいいでしょう。「材料構成」は不要ですね。 |
|
| 吉井さん | でも、「材料構成」があると、例えばカレーに必要な材料を買い揃えるときに便利でしょう。 |
|
| 久本くん | 必要材料を買出しするときに「材料構成」にお願いするって感じですね。これ、うれしいかも。 |
|
| 唐沢さん | 「材料構成」を残すとしても、その属性の必要材料数は派生属性(/表記)でいいんじゃないでしょうか? |
|
| 吉井さん | そうですね。「材料構成」から「材料」を見たときの多重度(1..*)が必要材料数を
表していると思えるので、導出できるということで派生属性でもよさそうですね。 |


食材(材料)に関する諸々をどう表現するか。
イマイチ、すっきり表現できていないように思います。
| マスター | 「レシピ」は、「材料」と「調理手順」と「道具」という概念で成り立っていることが良くわかりますね。 |
|
| 久本くん | 「全材料」から見た「レシピ」の多重度は 1..* でいいのかな? |
|
| 吉井さん | 「まったく同じ材料・分量でできる料理が複数あるかもしれない」とコメントされているから、Ken-M さんが考えたことはちゃんと表現できてますね。 |
|
| 唐沢さん | 「手順書」から見た「レシピ」の多重度も 1..* になってるけど、「作業」と「1皿分食材」、「道具」の間に関連があるから、同じ食材、道具、手順で料理したのに、できた料理が複数あることになって変じゃないですか? |
|
| 吉井さん | そう、ここは多重度 1 ですね。「全材料」から見た「レシピ」の多重度も 1 にしておいて、必要なら「全材料」のインスタンスを複数作った方が素直かもしれませんね。 |
|
| 久本くん | 「材料」を1皿分ごとに分けているのが面白いですね。 |
|
| 唐沢さん | でも、人数が 1/6 になったからといって、材料も単純に 1/6 になるとは限らないんじゃないかな? ねぇ、マスター? |
|
| マスター | そうですね。特にお菓子を作るときはそのままの分量で作った方がいいよ。仕事でモデリングするときは、お客様に確認してみよう。 |
|
| 唐沢さん | それから、オブジェクト図で「1皿分材料」のインスタンスが 6 個あると書かれているけれど、同じ内容だったら 6 個作る必要はないんじゃないかな? 仕様を表しているクラスなんだから。 |
|
| 久本くん | 「作業」と「道具」の関係が明確に表現できていて良いですね。 |
|
| 吉井さん | 今回は鍋を1つしか使わないけれど、鍋やフライパンなど複数の入れ物を使うかもしれないからね。ただ、そうすると、並行して複数の作業を行ったりとか、各作業ごとの入力出力を考える必要が出てくるかもしれないね。 |
|
| 唐沢さん | 「道具棚」と「道具」の多重度が逆なのは単純ミスですかね。 |
解答例としまして、当カフェのマスターのモデルを紹介致します。 コンセプト次第でモデルは変わりうるものですから、 正解としてではなく、1つの考え方としてご覧ください。
まずは、カレーの作り方を概観します。 肉、野菜、サラダ油、水を使ってカレーを作ります。 真ん中のバブルがカレーを作るという作業ですね。

このコンテキスト図を整理してみると、何か作業をするといった場合、 材料を使って調理すると料理が出来上がる、といった感じで表現できますね。 これは、プロセスを作業には入力と出力があると表現するのと同じですね。

じゃあ、DFD(データフロー図)を使って、カレーを作るという作業をもう少し細かく見てみましょう。 ※UMLのアクティビティ図を使っても同様の表現はできますが、こちらの方が雰囲気が伝わりやすいと思います。
「1.肉と野菜を炒める」「2.肉と野菜を煮込む」「3.カレーの味付けをする」という3つの作業に分解できます。 これは、問題文のカレーの作り方にあった手順に該当するものです。

これら3つの作業は必要に応じてそれぞれ更に細かい作業に分解することも出来ます。 # まるで作業計画のWBS(Work Breakdown Structure)と同じですね。 ここでは「1.肉と野菜を炒める」の作業を分解した例を示しておきます。 ここで、「1.1 肉と野菜を切る」「1.2 炒める」に分かれた作業ですが、 全体としては肉、野菜、サラダ油を入力として、炒めた肉と野菜を出力 している点では上位の「1.肉と野菜を炒める」と同じになっていることが分かります。

これらの点を踏まえて、カレーの作り方を入力となる材料、調理の作業、作業の出力となる料理 という構成のつながりとして表現していこうと思います。



今月の問題です。モデリングの進め方については、第 1 回のモデリングの進め方を参照してください。
サンドイッチをモデリングしてください。
不足する情報は適宜補っていただいて結構です。補った情報は、コンセプトに記述してください。

図 お題(サンドイッチ)
解答はクラス図で表現して下さい。クラスには必要な属性を、関連には多重度を明記するのがポイントです (解答時間の目安は15分~30分です)。
解答モデルの送付についてをご覧ください。
なお、今月号は第 8 回です。
締め切りは 2006 年 11 月 2 日 (木) 2006
年 11 月 9 日 (木) です。
締め切りを1週間延長しました。
解答例掲載は 12 月号 ( 12月上旬 ) を予定しています。
先月号に引き続き、UML モデリングツールをお持ちでない方向けの読者プレゼントを実施しています。
弊社の UML モデリングツールである Elapiz スタンダードエディション の
Elapiz Basic の正規ライセンス(\15,750 相当)を、 解答モデルをご送付いただいた方の中から、抽選で 3 名の方にプレゼントいたします。
解答モデルの送付についてをご覧いただき、是非ご応募ください。
現在、応募していただいた方の当選確率は、90 %以上です!
本連載では、文献[1]をベースに、より気軽にモデリングを愉しんでいただけるテイストにしております。モデリングに関するしっかりした解説が欲しい場合には、以下の書籍をご覧になると良いと思います。
先月号の Elapiz Basic の正規ライセンスの当選者を発表いたします。おめでとうございます!!
なお、当選者の方には、後日改めてメールにてご連絡いたします。お楽しみに!!
改訂履歴