モデリングカフェの問題をやってみる:第1回〜第4回
設計とかちゃんと勉強したことないよなと思って最近UMLモデリングの本を読みました。
一通り読んで雰囲気はわかったものの、実際やらないとわからないので適当にモデリングの演習問題を探してみたら非常に良さそうな連載があった。
毎回問題がモデリングの題材が与えられて、「コンセプト」と「クラス図」を回答として出していく形式。「コンセプト」はモデリング対象の捉え方と表現方法を文章にしたものらしい。この説明だけだとよくわからないが、数回実際にやってみて、問題文だけだと情報が完全には与えられていないので、解答者の側で足りない情報を想定する必要があるんだけどその想定を書くのが「コンセプト」だと理解しました。
今日は第1回から第4回までやりましたがけっこう面白い。UMLモデリングの本を読まないままやってたら悲しくて挫折してたと思うので読んでおいてよかった。
第1回:連絡網
問題
ゆうじ君たちは以下のように連絡をとることになっています。 この状況をモデリングしてください。
自分の回答
コンセプト
- 連絡網は生徒が連絡し合うことによって成り立つ
- 生徒は別の生徒から連絡を受け、またさらに別の生徒に連絡をする
- ただし、連絡網の起点となる生徒は連絡を受けることはなく、終点となる生徒は連絡をすることはない
クラス図
回答例・解説を読んだ感想
みんなの回答めちゃくちゃちゃんと考えてあってすごい。自分は連絡手段や連絡内容には完全に考えが抜け落ちていたので反省。そして、コンセプトの書き方がいまいちわからないです。
第2回:社員と辞令
問題
ソフトウェアを受託開発するイラピス株式会社では、2006 年 1 月に以下の辞令が発令されました。
山田さんはジュニアSEに昇格しました
田中さんは技術2部に配属されました
花山さんはミドルSEに昇格しました
社員と辞令の関係をモデリングして下さい。 ただし、職級に関することなど不足する情報は適宜補っていただいて結構です。
自分の回答
コンセプト
- 1つの辞令ではある社員の職位・部署のいずれかもしくは両方が変更される
- 部署の変更には異動や兼務追加・兼務解除があり得る
- 職位は1つの社員につき同時に1つで、部署に関わらないグローバルな概念であるとする
クラス図
回答例・解説を読んだ感想
兼務とかを考慮できたのはよかったと思った。しかし、この時は職位をグローバルなものとして考えたんだけど、よく考えたら普通に部署に職位が紐づいていた方が普通だよなという気分になってきた。例えば、A部の部長とB部のエンジニアを兼務することになるとかがあり得そうなので。
解説の、種類(例えば、「部署」に対する「技術2課」)をサブクラスにするかインスタンスにするかの議論がわかりやすくて、種類ごとに異なる情報や振る舞いを持っていたらサブクラスにすると良いらしい。
回答2の
社員は入社すると格付辞令・配属辞令により、いずれかの職級に格付けされ、いずれかの部門に配属される。
という考えは面白いと思った。こうしてしまうと必ず直前の辞令をみることでその社員の現在の役職と職級がわかる、と。
第3回:部品の構成
問題
型番 D0101 の机の部品構成は以下のとおりです。
机 (D0101) は天板 (T0212) 1つ、脚 (F0132) 4つ、引き出し (H0303) 1つで構成されます
引き出し (H0303) は、箱 (B0505) 2つ、棚 (TA0635) 1つで構成されます
天板 (T0212) や引き出し (H0303) などは他の製品でも利用されます
※ ( ) 内は型番
この例を参考に部品の構成をモデリングして下さい。 不足する情報は適宜補っていただいて結構です。補った情報は、コンセプトに記述してください。
自分の回答
コンセプト
- 型番が付いているものは全て製品として扱う
- 製品は複数の製品から構成されることがある
- 製品と、その製品を構成する製品の関係を製品構成として表す
クラス図
オブジェクト図
これはクラス図を見るだけだとよくわからない系なのでオブジェクト図も作った。
回答例・解説を読んだ感想
これはうまくモデリングできたのでよかった。といっても、直前に読んだUMLモデリングレッスンにほぼそのままの例題が載ってたからなんですが...。「型番が付いているものは全て製品として扱う」としたのはやりすぎ感もあるけど、クラス図としてはシンプルになる。マスター(誰?)の回答では、製品を「単品目」と「ユニット」に分けていてなるほど太郎になった。
第4回:タイムテーブル
問題
2006 年 4 月 7 日(金)にダイエットセミナーが開催されます。 プログラムは次の通りです。 この例を参考に、セミナーのタイムテーブルをモデリングしてください。 不足する情報は適宜補っていただいて結構です。補った情報は、コンセプトに記述してください。
自分の回答
コンセプト
- トラックは会場と1対1でひもづく
- プログラムは食事と講演に分類できる
- 講演には一人以上の講演者がいるものとする
クラス図
回答例・解説を読んだ感想
回答例と違って、自分は講演者が複数の講演をすることもしたらそれを追跡したいと思ってエンティティにした&パネルディスカッションもあるかなと思って講演に複数の講演者をひもづけるようにした。問題文の例に昼食の時間があったので「食事」という完全に謎のクラスを作ってしまったけど「休憩」とかでよかったですね...。マスター(誰?)の回答では休憩を明示的に管理してなかったけど、それは微妙かもと感じた。