【UML/UMTP】試験でも実務でも役に立つ、データモデリングの考え方
『モノ』と『コト』
今回のテーマです。
言葉だけを聞いても「何のことですか?」と思う方もおられるでしょう。
私も、UMTP試験の勉強をするまでは知りませんでした。
長いこと開発エンジニアとして設計しているのに、です。
しかし、実はこれを知っているだけで開発時の設計(特にデータモデリング)の生産性が上がることを実感しました。
では、紹介していきます。
UMLとUMTP
UML
まず、UMLはご存じでしょうか?
簡単に説明すると、データ構造や処理の流れなどを図示するための言語です。
主にオブジェクト指向のソフトウェア開発に使われるイメージですが、いくつかの種類があるので業務改善などのシステム開発以外にも活用できます。
ITエンジニア界隈では、たとえば新卒のエンジニアが入社後にJavaプログラミングと同時に勉強することがあると、聞いたこともあります。
オブジェクト指向に関係しますので、納得できます。
UMTP
一方、UMTPは正式名称『UMTP/JAPAN 特定非営利活動法人UMLモデリング推進協議会』という団体です。
また、資格試験制度も運営しています。
試験では、UMLについての理解を確かめる内容になっています。
レベルは4段階に分かれています。
私はレベル2まで合格しています。
過去のブログにて、受験の感想や勉強方法を紹介しております。
毎月資格に挑戦!第2回:UMTP L1/L2
本題(ピックアップテーマ)
今回のサンプル
では、資格試験のサンプル問題を使って具体的に説明します。
※出典:UMLモデリング技能認定試験サンプル問題 L1(事前に使用許可をいただいております。)
何を問われているのか?
まず、設問中のシチュエーションをイメージします。
会員制のホテルで、その宿泊予約を管理するための構造になっています。
扱うデータは下記の通りに分類されています。
- 部屋
- 会員
- 予約
また、4つの選択肢は各データの結び付きについて多重度が異なります。
たとえば、選択肢2は下記の考え方になります。
数字は相手方のデータから見た多重度ですが、下記にいくつかの例をあげます。
- [1] - 1つの自方に対して、相手方が必ず1つだけ紐づく
- [0..1] - 1つの自方に対して、相手方が紐づかない or 1つだけ紐づく
- [1..15] - 1つの自方に対して、相手方が1つから最大15個まで紐づく
- [*] - 1つの自方に対して、相手方が紐づかない or いくつでも紐づく
- [1..*] - 1つの自方に対して、相手方が1つから最大いくつでも紐づく
正解
選択肢3です。
ひとつずつ選択肢の多重度を確認して解くこともできますが、それでは時間がかかってしまいます。
また、今回のテーマ 『モノ』と『コト』を理解しておくと、実は一瞬で解くことができます。
解説(今回のテーマに沿って)
まず、『モノ』と『コト』に分けます。
- 部屋 → モノ
- 会員 → モノ
- 予約 → コト
部屋と会員は『モノ』、予約は『コト』になります。
「普通に考えれば分かる」と思うかもしれませんが、場合により判断に迷う微妙なものもあるかもしれません。
『コト』であることを判断するコツは、対象の語尾に「~する」を付けたときに、『ふるまい』になっているか? です。
- 部屋 → 部屋する → ×:部屋をする?ふるまいではない
- 会員 → 会員する → ×:会員をする?ふるまいではない
- 予約 → 予約する → ○:予約をする!ふるまいとして自然な表現
UMLを勉強すると「モノ・コト・モノ」という言葉を耳にすることになると思います。
今回の問題では、このようになります。
実はこれは、部屋と会員が『多対多』の関係になるのを実現する考え方になります。
今回は問題文にて制約があり会員は1つしか予約できませんが、考え方を理解するためには制約がないパターンをベースで考えると良いです。
この場合、部屋から見たら複数の会員の予約を受け付けられ、会員から見たら複数の部屋の予約が取れる状態になります。
この疑似的(?)な『多対多』の関係を実現するには、『1対多』と『多対1』を結びつけることになります。
部屋と会員の『多対多』を実現するために予約を挟むので、予約から見た部屋と会員は1つだけになります。
初めからこの考え方で解く場合は、瞬時に正解を見抜くことができます。
結論
『モノ・コト・モノ』の考え方を理解しておくと、何か複数の『モノ』を結び付けて『コト』を実現するための設計をスムーズにしたり、間違いにくくする(または間違いに気付く)ことができると考えられます。
参考
また、UMTPのHPでは『モノ』と『コト』以外に『バ』という考え方も紹介されています。
もっと深堀りしたい方は、参考にしてみてください。
UMTP:モノ・コト・バに基づくクラスの識別
さいごに
今回はサンプル問題を使って、考え方の1つをご紹介しました。
次回は、同じサンプル問題を使ってSQLを使った物理的な実装に挑戦してみようと思います。
ここまでお付き合い頂き、ありがとうございましたm(_ _)m
Discussion