オブジェクトの広場はオージス総研グループのエンジニアによる技術発表サイトです

モデリング

モデリングカフェ 第8回:サンドイッチをモデリングする

モデリングカフェ「Square」~UMLでモデリングを愉しもう~
オージス総研 組み込みソリューション部
田中恒  赤坂英彦
2006年10月5日

毎回、身近にあるモノや出来事など、簡単な【お題】を出題し、皆様にモデリングをして頂きます。次回の記事で、皆様の解答モデルの中から3つほど取り上げて、コメントを付けていくかたちで進めていきます。

目次
  1. 前回の問題(カレーの作り方)
  2. 読者解答モデル
  3. 解答例
  4. 今月号の問題 (出題)
  5. 解答モデルの送付について
  6. 参考文献
  7. Elapiz (いらぴす)当選者発表

1.前回の問題(カレーの作り方)

前回の問題をもう一度確認しておきましょう。

【お題07】カレーの作り方

カレーの作り方をモデリングしてください。

不足する情報は適宜補っていただいて結構です。補った情報は、コンセプトに記述してください。

お題(カレーの作り方)
図 お題(カレーの作り方)

解答はクラス図で表現して下さい。クラスには必要な属性を、関連には多重度を明記するのがポイントです (解答時間の目安は15分~30分です)。

2. 読者解答モデル

今回も読者の皆様からたくさんの解答モデルを頂きました。ありがとうございます。 これまでと同じように、3つの解答モデルをピックアップして、当カフェのマスターとヒトクセある!?常連たちと一緒に見ていきましょう。 コーヒーなどを飲みながら、皆様も一緒にわいわいやる感じで考えてみてください。 また、残念ながら紹介することができなかった解答モデルはこちらに掲載しますので、 オブジェクトの広場 メーリングリストなどで意見交換していただければ幸いです。

読者解答1:松田 政博 様

  • コンセプト
    • 料理のレシピにおける各手順で、なべに投入する材料とその分量をモデリングする。

    • レシピは、いくつかの手順といくつかの材料からなる。
    • ある手順において、材料を投入しないこともあれば、いくつかの材料を投入することもある。
    • ある手順において、なべに投入する材料の分量が決まっている。
    • 材料は一度にまとめてなべに投入されるだけでなく、分割して投入される場合もある。
  • モデル
    • クラス図
      図 1 松田 政博 様の解答モデル(クラス図)
      図 1 松田 政博 様の解答モデル(クラス図)
    • オブジェクト図
      図 2 松田 政博 様の解答モデル(オブジェクト図)
      図 1 松田 政博 様の解答モデル(オブジェクト図)
  • 感想
    • 難しかったところ

      コンセプトがなかなか決まりませんでした。

    • 自己評価

      コンセプトどおりにはできたと思います。

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

読者解答2:AYU 様

  • コンセプト

    調理方法については、深く考えず 料理の構成を主としてモデリングする様に考えました。

  • モデル
    • クラス図
      図 1 AYU 様の解答モデル(クラス図)
      図 1 AYU 様の解答モデル(クラス図)
    • オブジェクト図
      図 2 AYU 様の解答モデル(オブジェクト図)
      図 1 AYU 様の解答モデル(オブジェクト図)
  • 感想
    • 難しかったところ

      モデリングに慣れていない為、 何をコンセプトにしたら良いか悩んでしまいました。
      始めは、複数の材料と対応した調理方法をどのように表現したら良いか、 悩みましたが分からず結果、この様なモデルになりました。
      また、概念モデルを考えると、つい実装を意識してしまい、 うまく概念モデルを作成できませんでした。

    • 自己評価

      今回始めて概念モデルに挑戦しましたが、全く自信は無く、 目安時間も大幅にオーバーした為50点以下?といった具合です。

  • コメント
    マスター   コンセプトの通り、カレーを作る上での必要なモノが洗い出されてますね。
     
    吉井さん   そうですね。料理を作るときに何が必要なのかの概要がわかりやすく表現されているかと思います。
     
    唐沢さん   でも、「料理」と「器」、「料理」と「時計」などの多重度が1対1になってますよ。 ということは、この「器」はカレー作り専用の鍋とかなんでしょうか?
     
    久本さん   うちには、カレー専用の鍋がありますよ。
     
    唐沢さん   じゃ、「時計」は?
     
    久本くん   うちには、カレー専用に使っている時計ってのはなかったような・・・
     
    吉井さん   「料理」と「器」、「料理」と「時計」、「料理」と「火」の多重度の1対1は もう少し検討する必要がありそうですね。「器」、「時計」、「火」は、いろいろな「料理」 でも使うので、「料理」とそれらのモノとの関係は、1対多の方がよさそうですね。
     
    マスター   「材料構成」と「材料」のところはどうでしょうか?
     
    唐沢さん   「料理」と「材料」に直接関係を引いて、1対多の関係でいいでしょう。「材料構成」は不要ですね。
     
    吉井さん   でも、「材料構成」があると、例えばカレーに必要な材料を買い揃えるときに便利でしょう。
     
    久本くん   必要材料を買出しするときに「材料構成」にお願いするって感じですね。これ、うれしいかも。
     
    唐沢さん   「材料構成」を残すとしても、その属性の必要材料数は派生属性(/表記)でいいんじゃないでしょうか?
     
    吉井さん   そうですね。「材料構成」から「材料」を見たときの多重度(1..*)が必要材料数を 表していると思えるので、導出できるということで派生属性でもよさそうですね。
     

読者解答3:Ken-M 様

  • コンセプト
    • 「カレーの作り方」は数ある「料理の作り方」の中の1つである。

    • 料理は「材料」と「調理手順」と「道具」を用いて行う。
    • これらを全てセットでまとめたものが「レシピ」である。

    • 全ての材料は「1皿(1人前)の材料」が皿数(人数)分だけ集まっ たものである。
    • 1皿分の材料は1皿分の各材料(水、にんじん など)が集まったも のである。

    • 調理手順書には複数の作業が行う順に記述されている。
    • それぞれの作業では、「どの材料(食材)」と「どの道具」を使うか が記述されている。

    • この料理で使用する道具を1つのまとまりとして「道具棚」と捉える。
  • モデル
    • クラス図
      図 1 Ken-M 様の解答モデル(クラス図)
      図 1 Ken-M 様の解答モデル(クラス図)
    • オブジェクト図
      図 2 松田 政博 様の解答モデル(オブジェクト図)
      図 1 Ken-M 様の解答モデル(オブジェクト図)
  • 感想
    • 難しかったところ

      食材(材料)に関する諸々をどう表現するか。

    • 自己評価

      イマイチ、すっきり表現できていないように思います。

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

3. 解答例

解答例としまして、当カフェのマスターのモデルを紹介致します。 コンセプト次第でモデルは変わりうるものですから、 正解としてではなく、1つの考え方としてご覧ください。

コンセプトの導出

まずは、カレーの作り方を概観します。 肉、野菜、サラダ油、水を使ってカレーを作ります。 真ん中のバブルがカレーを作るという作業ですね。

図1.カレーを作る(コンテキスト図)
図1.カレーを作る(コンテキスト図)
 

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

図2.カレーを作る(コンテキスト図)まとめ
図2.カレーを作る(コンテキスト図)まとめ
 

じゃあ、DFD(データフロー図)を使って、カレーを作るという作業をもう少し細かく見てみましょう。 ※UMLのアクティビティ図を使っても同様の表現はできますが、こちらの方が雰囲気が伝わりやすいと思います。

「1.肉と野菜を炒める」「2.肉と野菜を煮込む」「3.カレーの味付けをする」という3つの作業に分解できます。 これは、問題文のカレーの作り方にあった手順に該当するものです。

図3.カレーを作る(DFD#0)
図3.カレーを作る(DFD#0)
 

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

図4.カレーを作る(DFD#1肉と野菜を炒める)
図4.カレーを作る(DFD#1肉と野菜を炒める)
 

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

    

解答例

  • コンセプト
    • 料理の作り方(つまりレシピ)をモデリングする
    • レシピ
    •    
           
      • 材料と手順を知っている(コンテキスト図、DFDで表現した内容)
      •    
      • 何人前(=皿数)が決まっている
      •    
         
    • [材料]
    •    
           
      • 食材ごとに量が決まっている
      •    
      •  → 材料明細と材料
      •    
         
    • [手順]
    •    
           
      • 大まかな目的の調理と各作業からなる
      •    
         
  • 前提条件
    • 調理作業の上位、下位については表現を行わない。
    • モデルとしては、調理作業のオブジェクトは必ず同じレベルのものとする
    • 調理に使用する材料の量に関しては、材料が知っているものとする。
    • また、量の単位(カップ、個、g)に関しては扱わないものとする
  • モデル
    • オブジェクト図
      図 9 解答例 オブジェクト図(大粒度の作業)
      図 9 解答例のオブジェクト図(大粒度の作業)
       
    • オブジェクト図
      図 8 解答例 オブジェクト図(小粒度の作業)
      図 8 解答例のオブジェクト図(小粒度の作業)
       
    • クラス図
      図 10 解答例 クラス図
      図 10 解答例のクラス図
       
  • 4. 今月号の問題 (出題)

    今月の問題です。モデリングの進め方については、第 1 回のモデリングの進め方を参照してください。

    【お題08】サンドイッチ

    サンドイッチをモデリングしてください。

    不足する情報は適宜補っていただいて結構です。補った情報は、コンセプトに記述してください。

    お題(サンドイッチ)
    図 お題(サンドイッチ)

    解答はクラス図で表現して下さい。クラスには必要な属性を、関連には多重度を明記するのがポイントです (解答時間の目安は15分~30分です)。

    5. 解答モデルの送付について

    解答モデルの送付についてをご覧ください。
    なお、今月号は第 8 回です。 締め切りは 2006 年 11 月 2 日 (木) 2006 年 11 月 9 日 (木) です。
    締め切りを1週間延長しました。

    解答例掲載は 12 月号 ( 12月上旬 ) を予定しています。

    読者プレゼント ~Elapiz (いらぴす) 要ります?キャンペーン~

    先月号に引き続き、UML モデリングツールをお持ちでない方向けの読者プレゼントを実施しています。
    弊社の UML モデリングツールである Elapiz スタンダードエディション の Elapiz Basic の正規ライセンス(\15,750 相当)を、 解答モデルをご送付いただいた方の中から、抽選で 3 名の方にプレゼントいたします。

    解答モデルの送付についてをご覧いただき、是非ご応募ください。

    現在、応募していただいた方の当選確率は、90 %以上です!

    6.参考文献

    本連載では、文献[1]をベースに、より気軽にモデリングを愉しんでいただけるテイストにしております。モデリングに関するしっかりした解説が欲しい場合には、以下の書籍をご覧になると良いと思います。

    1. 「思考系UMLモデリング即効エクササイズ モデ力を鍛える13の自主トレメニュー」、渡辺博之他、翔泳社
    2. 「UMLによるオブジェクト指向モデリングセルフレビューノート」、荒井玲子著、ディーアート
    3. 「UMLモデリングの本質」、児玉公信著、日経BP社

    7. Elapiz(いらぴす)当選者発表

    先月号の Elapiz Basic の正規ライセンスの当選者を発表いたします。おめでとうございます!!

    • AYU 様

    なお、当選者の方には、後日改めてメールにてご連絡いたします。お楽しみに!!

    改訂履歴

    • サイトテンプレート変更に伴う変更(2021年7月)