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

モデリング

モデリングカフェ 第9回:サンタクロースをモデリングする

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

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

目次
  1. 前回の問題(サンドイッチ)
  2. 読者解答モデル - 本文で紹介できなかった解答モデル
  3. 解答例
  4. 今月号の問題 (出題)
  5. 解答モデルの送付について
  6. 参考文献
  7. Elapiz (いらぴす)当選者発表

1.前回の問題(サンドイッチ)

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

【お題08】サンドイッチ

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

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

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

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

2. 読者解答モデル

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

読者解答1:ありゅ~ 様

  • コンセプト
    • サンドイッチとは”パンに肉や野菜などの具を挟んだ料理”とする(オープンサンド、ホットサンドなどは対象外)
    • パンや具を積み重ねるように置く場合の表現を使用する
    • 中間に挟んであるパンは”具”扱い(汗
  • モデル
    • クラス図
      図 1 ありゅ~ 様の解答モデル(クラス図)
      図 1 ありゅ~ 様の解答モデル(クラス図)
    • オブジェクト図
      図 2 ありゅ~ 様の解答モデル(オブジェクト図)
      図 2 ありゅ~ 様の解答モデル(オブジェクト図)
  • 感想
    • 難しかったところ

      サンドイッチには色々な形態があるので全部はカバーできないと考え、スタンダードなサンドイッチのみ対象としました。 それでも、中間に挟み込まれているパンはどう表現していいか分からなかったので、”具”にしてしまいました。 あと、”サンドイッチクラス”は必要かどうか迷いましたが、”卵サンド”や”トマトサンド” といった名前を出したかったので入れてみました。 これも微妙かなぁ。。。

    • 自己評価

      挟み込まれているパンを”具”としたのはちょっと強引でした。 そのほかは比較的素直なモデルになったと思います。

  • コメント
    マスター   「パン」や「具」を積み重ねるというところに注目されています。
     
    久本くん   「パン」と「具」が積み重なっていることがイメージしやすいモデルですね。
     
    唐沢さん   ええ、クラスを縦に配置しているのも、イメージを助けています。
     
    吉井さん   「パン」と「具」が交互になっている場合と、「具」が連続する場合が考えられているね。
     
    マスター   『中身に挟んであるパンは”具”扱い(汗』ということですが、このモデルで、中のパンも「パン」クラスのインスタンスと考えて差し支えないかと思われますが。
     
    唐沢さん   一番下の「パン」を「土台」、一番上の「パン」を「カバー」として捉えられたからでしょう。
     
    久本くん   ある「具」にとって、ある「パン」が「土台」や「カバー」になっているってことじゃないんですか?
     
    図 3 「土台」と「カバー」
    図 3 「土台」と「カバー」
     
    吉井さん   中身のパンは「具」である、ということだから、サンドイッチ全体から見て「土台」と「カバー」と考えたんだろうね。ロールはあるインスタンスから別のインスタンスがどう見えるかということだから、言わば相対的に決まってくるものだね。ここは注意しておこう。
     
     
     
    久本くん   「サンドイッチ」と「パン」の間の関連が、なんとなく冗長なんじゃないかと思うんですが。
     
    マスター   そうかもしれませんね。でも、オブジェクト図ではリンクが引かれていませんよ。
     
    唐沢さん   意図されているのは、「サンドイッチ」と「パン」の集約関係の一部が、「両端」で表される関連を兼ねているということでしょう。
     
    吉井さん   そうだろうね。このようなときは { subsets } 制約を使うと表現できるよ。
     
    図 4 { subsets } 制約の考え方
    図 4 { subsets } 制約の考え方
     
    久本くん   さっきは、「パン」は「土台」と「カバー」を指すって考えませんでしたか? 「サンドイッチ」と「パン」の関係を見ると、「両端」じゃない「パン」もありそうな感じがします。
     
    マスター   そうですね。少しモデルがブレている気がします。『(汗』が表しているように、その辺りで少し混乱されたのかもしれませんね。
     
    唐沢さん   あと、「パン」から見た「具」の多重度にミスがあります。多重度が 1 だと「両端」の「パン」が作れません。
     
    吉井さん   そうだね。関連を考えるときはインスタンス同士の関係で考えるようにすると、ロールや多重度でのミスを少なくできるよ。
     

読者解答2:優雅さ30% 様

  • コンセプト

    サンドイッチということで,パン同士に挟まれているものの概念を出そうと思いました。 (ビッグマックなどを考慮すると,)パン同士によって挟まれるものは,複数存在することがあります。 また,隣接するパンとパンの関係によって,この概念は存在するので,これを「段」という関連クラスとして出しました。 また,各段には複数の具が含まれています。

  • モデル
    • クラス図
      図 5 優雅さ30% 様の解答モデル(クラス図)
      図 5 優雅さ30% 様の解答モデル(クラス図)
    • オブジェクト図
      図 6 優雅さ30% 様の解答モデル(オブジェクト図)
      図 6 優雅さ30% 様の解答モデル(オブジェクト図)
  • 感想
    • 難しかったところ

      パン同士が挟む「段」という概念に,どのような名前を与えるか,とても迷いました。

    • 自己評価

      複数の段,複数の具というバリエーションを表現することはできますが,「段」というクラス名があまり良いとは思えないので,80点です。

  • コメント
    吉井さん   「段」という概念を出しているところは素晴らしいね。
     
    マスター   見えないモノなのによく発見されましたね。
     
    久本さん   でも、「パン」や「具」は直感的で分かりやすいんですが、「段」って何を指しているんだろう?って少し考えてしまう気もします。
     
    唐沢さん   そういう側面もあります。シンプルに見たままの方が良い場合もあります。
     
    吉井さん   そうだね。でも、このモデルは十分にシンプルなんじゃないかな?
     
    マスター   パンで挟まれているものにとても注目されたんですね。
     
    吉井さん   そう。このモデルのようにすることで、可能性が広がってると思うな。
     
    唐沢さん   ええ。「具」に関してとても柔らかいモデルになっているのではないでしょうか。
     
    久本くん   「具」に関して柔らかいというのは、変更などに強いということですか?
     
    唐沢さん   ええ、そうです。
     
    マスター   このような場合にも、モデルへの影響を小さくすることができますね。
     
    図 7 「具」の混在
    図 7 「具」の混在
     
    久本くん   あ、こういうサンドイッチもいいな。
     
    吉井さん   どうして、「具」について柔らかいモデルになったんだと思う?
     
    久本くん   「段」があるからでしょうか。
     
    唐沢さん   切り分け、でしょうか。
     
    吉井さん   そうだね。「段」という概念が入ることで「パン」と「具」の間が直接結び付いていないよね。だから2つのことが切り分けられたんじゃないかな。こんな具合に。
     
    図 8 切り分け
    図 8 切り分け
     
    マスター   「具」を何層も入れる場合には「具」同士の再帰関連を追加して、先ほどのように混在する場合は多重度で表せますね。
     
    唐沢さん   サンドイッチの特徴である、パンで挟む、というのが影響を受けないのが良いですね。
     
    久本くん   じゃあ、どんどんと「段」みたいな概念を追加した方が良いモデルになるということですか?
     
    吉井さん   最初に言っていたみたいに、直感的に分かるということも大事なことだよ。必要なところに必要なだけ工夫するようにしよう。
     

読者解答3:ほげPG 様

  • コンセプト
    • たくさん具をはさめる様にする。
  • モデル
    • クラス図
      図 9 ほげPG 様の解答モデル(クラス図)
      図 9 ほげPG 様の解答モデル(クラス図)
    • オブジェクト図
      図 10 ほげPG 様の解答モデル(オブジェクト図)
      図 10 ほげPG 様の解答モデル(オブジェクト図)
  • 感想
    • 難しかったところ

      具と具の関係

    • 自己評価

      80点(あまり料理しないので)

  • コメント
    マスター   コンセプトがシンプルです。
     
    吉井さん   うん。すがすがしいくらいに明快だね。モデルも、「パン」にたくさん「具」をはさむということが伝わってくるね。
     
    久本くん   このコンセプト好きです。やっぱり具沢山で、いろいろ食べられるのがいいですよ。
     
    唐沢さん   しかし、多重度については疑問があります。
     
    マスター   「具」から見た「パン」の多重度が 1..* というのはどういうことでしょうか。
     
    久本くん   モデルを素直に読むと、「具」はたくさんの「パン」ではさまれる、ということですよね。4つとか5つの「パン」にはさまれる場合というのはどういうことだろう?
     
    吉井さん   そこはもう少し検討した方が良かったかな。
     
     
     
    唐沢さん   「具」の多重度はどうでしょう。
     
    マスター   「パン」から見た場合、「具」をたくさんはさむということが表現できています。「具」が連続する場合もたくさんの「具」が接することが表現できています。
     
    吉井さん   でも、多重度の意味は少しあいまいだね。「具」が接するというのは連続する場合のことを言っているのかな?
     
    図 11 接するの意味
    図 11 接するの意味
     
    マスター   オブジェクト図を見ると、両方の意味を表していますね。
     
    久本くん   『ピーナッツクリームサンドイッチ』のように、「具」が並んでいる場合というのは「パン」と「具」の関係で示せていませんか?
     
    吉井さん   そうだね。「具」が連続するという意味であることに絞って、それが明確に伝わるようにすると良いね。
     
    唐沢さん   「具」が接することに何か興味があるとも考えられます。例えば、味が混ざるとか、相性が良いといった場合です。その場合は接するでも良いのではないでしょうか。
     
    吉井さん   ふむ。その場合は、確かに接するでも良いね。するどい。
     
    マスター   その辺りはコンセプト次第ということでしょうか。
     

3. 解答例

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

コンセプトの導出

サンドイッチのスケッチを描いて、注目するところを探します。パンと具が隣り合って並んでいるというのが特徴ですね。両端は必ずパンになります。

図 12 サンドイッチのスケッチ
図 12 サンドイッチのスケッチ
 

パン同士が隣り合っているところは単純ではなさそうです。図 14 のようなモノはサンドイッチとは呼べません。ここに注目してもう少し問題を整理してみます。

図 13 注目するところ
図 13 注目するところ
 
図 14 ”パンサンド”はなし
図 14 ”パンサンド”はなし
 

1つのサンドイッチはどこまでなのでしょうか? 食べるときのことを考えてみると、パン同士が隣り合うところにサンドイッチの切れ目があります。ここでは、図 15 のように1つのサンドイッチの単位を決めることにします。この場合、1つのサンドイッチの中でパンが連続することはありません。また、パンと具が交互になる場合を”タイプA”、具が連続する場合を”タイプB”とします。

図 15 サンドイッチの単位とサンドイッチのタイプ
図 15 サンドイッチの単位とサンドイッチのタイプ
 
  

解答例

  • コンセプト
    • 並びに注目してモデリングする
      • パンと具が1列に並んでいる
      • パンから始まり、パンで終わる。具が両端に来ることはない
      • 1つのサンドイッチの中では、パンが隣り合うことはない
      • パンと具が交互になる場合(タイプA)と、具が連続する場合(タイプB)がある
  • モデル
    • オブジェクト図
      図 16 解答例のオブジェクト図
      図 16 解答例のオブジェクト図
       
    • クラス図

      単純なタイプAについて考え、タイプBも表せるように発展させる。

      • タイプAの場合(シンプルな繰り返しのモデル)
        図 17 解答例のクラス図(単純なモデル)
        図 17 解答例のクラス図(単純なモデル)
      • タイプBも表せるように発展させたモデル
        図 18 解答例のクラス図(発展形)
        図 18 解答例のクラス図(発展形)

4. 今月号の問題 (出題)

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

【お題09】サンタクロース

毎年クリスマス、たかし君はサンタさんからプレゼントをもらっています。今年は、サッカーボールをお願いしました。早くクリスマスが来ないかな、と楽しみにしています。

毎年クリスマスの夜、たかし君のお父さんは、こっそりたかし君の枕元にプレゼントを置きます。今年はサッカーボールをプレゼントします。

お題(サンタクロース)

上記の文章を読んで、サンタクロースをモデリングしてください。 不足する情報は適宜補っていただいて結構です。補った情報は、コンセプトに記述してください。

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

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

解答モデルの送付についてをご覧ください。
なお、今月号は第 9 回です。 締め切りは 2007 年 1 月 18 日 (木) です。

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

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

Elapiz スタンダードエディションの新バージョン「Elapiz SE 2005.2」が 11 月 1 日にリリースされました。
Eclipse 連携機能が Eclipse 3.x に対応するなど、より開発時に使いやすくなっています。

今月号からは、新しくなった Elapiz スタンダードエディション 2005.2 をプレゼントします。
解答モデルをご送付くださった方の中から、Elapiz Basic の正規ライセンス(\15,750 相当)を 抽選で 3 名の方にプレゼントいたします。

UML モデリングツールをお持ちでない方は、この機会に是非ご応募ください。
Elapiz SE 2005.1 以前をお使いになっておられる方も応募してくださってかまいません。

応募方法は、解答モデルの送付についてをご覧ください。

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

6.参考文献

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

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

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

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

  • ありゅ~ 様

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

改訂履歴

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