LastUpdate : 2010/12/14

特定非営利活動法人 UML モデリング推進協議会

UML モデリング技能認定試験
L3 サンプル問題解答
モデリング問題―問題 3(ビジネス系)※本書の一部または全部を無断で複写、複製、転載、テープ化、ファイル化することを禁じます。
※UML、Unified Modeling Language は OMG（Object ManagementGroup）の商標です。

Copyright©2009-2010 UMTP

LastUpdate : 2010/12/14

解答

設問１
正解
a.
b.
c.
d.
e.
f.

(3)
(1)
(6)
(2)
(5)
(4)

解説
問題記述から（本質的な）クラスを識別する能力を確認する設問です。図 1 に解答例のクラス図を示します(このクラス図では設問 2 用に伏せられていた多重度も表記されています。また、問題記述では明示されていなかった関連端名もいくつか表記されています)。

鑑賞可能アルバム
0..*

公開アルバムタイトル : 文字列
解説文 : 文字列登録日時 : 日時

所有アルバム

公開日時 : 日時
公開日数 : 整数/ 公開期限 : 日時

10..*

スリーブ
{ ordered }

10..*

0..*

1..*

所有者

1

会員

写真データ
1

会員ID : 文字列
公開先会員 ニックネーム : 文字列

所有者

0..*

パスワード : 文字列
記入者

アップロード日時 : 日時
撮影日時 : 日時 [0..1]
写真イメージ : URL

1

コメント
0..*

コメント文 : 文字列
登録日時 : 日時

図 1 Web アルバム・システムの概念モデル(解答例)
図 2 に設問中で示された問題のクラス図を再掲し、解説していきます。

-2–Copyright©2009-2010 UMTP

1

タイトル : 文字列 [ 0..1 ]解説文 : 文字列 [ 0..1 ]登録日時 : 日時0..*{ ordered }LastUpdate : 2010/12/14

( g )

1

( b )

{ ordered }( c )0..*0..*

( a )
10..*

( h )

所有者

( d )

記入者

( i )
( j )
1
所有者0..*( e )1( k )

( f )

( l )
{ ordered }図 2 設問のクラス図 (再掲)
( a ) から ( f ) のクラスのうちでもっとも特定しやすいのは、「所有者」や「記入者」という関連端名で参照されている ( d ) でしょう。選択肢の中からこれらのロールを担う可能性のあるもっとも適切なクラスとして「会員」が選ばれます。次に、その「会員」を「記入者」として参照する ( f ) として「コメント」が特定されるでしょう。「コメント」に繋がるもう一方の関連の先にあるクラス ( c ) は、あるコメントが記入される対象を示していると考えられます。設問の記述から、コメントが書き込まれる対象は「スリーブ」と呼ばれる概念なので、( c ) には「スリーブ」クラスが当てはまることが判ります。
「スリーブ」は「アルバム」によってまとめられる概念なので、( b ) か ( e ) に「アルバム」が当てはまりそうです。「アルバム」は複数の「スリーブ」を「順番付けあり」で管理していると考えられるので、( c ) を { ordered } 付きで参照している ( b ) の方が「アルバム」として適切でしょう。( e ) は「スリーブ」と何らかの関連があり、かつ、「会員」によって所有されるような概念としてモデル化されています。残った選択肢のうち、そのような概念に相当しそうなものとして ( e ) には「写真データ」が当てはまってきます。( a ) は「会員」と「アルバム」との間の関連クラスとしてモデル化されています。
選択肢として残っているのは「公開」と「ログイン」ですが、ここでは「会員」と「アルバム」との組み合わせ毎に必要な情報を持っている「公開」の方が適切でしょう。

設問 2
正解
g.
h.
i.
j.
k.
l.

(3)
(2)
(4)
(2)
(3)
(3)解説
関係や多重度を適切に取り扱うことができることを確認するための設問です。解答例については、前述の 図 1 を参照してください。以下、図 2 で再掲された問題クラス図も見ながら、個別に解説していきます。
-3–
Copyright©2009-2010 UMTP

LastUpdate : 2010/12/14( g ) の多重度は、ある「会員」に対して公開されている「アルバム」の個数を示す多重度です。入会直後の「会員」など、鑑賞できる(他の「会員」から公開されている)「アルバム」がひとつもない状
況もありえるので、ここの多重度は「0..*」になります。
( h ) の多重度は、ある「コメント」から見た記入対象となる「スリーブ」の個数を示す多重度です。
「コメント」は「スリーブ」毎に別々に記入され、記入対象となる「スリーブ」が無い「コメント」は存在しない(意味が無い)と考えられるので、ここの多重度は「1」となります。
( i ) の多重度は、ある「写真データ」を参照している「スリーブ」の個数を示す多重度です。「写真データ」は、それを参照している「スリーブ」がひとつも無くなると自動的に削除されるので、ここの多重度の下限値は「1」になります。また、問題記述から、同一の「写真データ」が複数の「アルバム」中の「スリーブ」から共有参照されることがあるので、多重度の上限値は「*」(many)になると考えられます。結果として、ここの多重度は「1..*」となります。
( j ) の多重度は、ある「スリーブ」が参照している「写真データ」の個数を示す多重度です。「スリーブ」は表示対象となる「写真データ」が必ずひとつ無いと存在できない(意味がなくなる)ので、ここの多重度は「1」となります。
( k ) の多重度は、ある「会員」が記入した「コメント」の総数を示す多重度です。入会直後の「会員」など、まだ「コメント」をひとつも記入していない「会員」も存在するので、ここの多重度は「0..*」となります。
( l ) の多重度は、ある「スリーブ」に付けられている「コメント」の総数を示す多重度です。ある「スリーブ」には複数の「会員」(その「スリーブ」を含む「アルバム」の所有者である「会員」も含む)からの複数の「コメント」が記入されることがあります(「コメント」がひとつも記入されていない「スリーブ」もあります)から、ここの多重度は「0..*」になります。

設問 3
正解
(イ)
(ロ)
(ハ)
(ニ)

(3)
(7)
(1)
(7)

解説
問題をより正解にモデルで表現する能力を確認するための設問です。

-4–
Copyright©2009-2010 UMTP

LastUpdate : 2010/12/14{ self.アルバム.所有者 = self.写真データ.所有者 }{ self.アルバム.所有者 <> self.会員 }アルバム0..*

公開タイトル : 文字列
解説文 : 文字列
登録日時 : 日時スリーブ{ ordered }

10..*

0..*

公開日時 : 日時
公開日数 : 整数/ 公開期限 : 日時

11..*

所有者

1

会員0..*

写真データ

会員ID : 文字列
ニックネーム : 文字列
パスワード : 文字列記入者

1

タイトル : 文字列 [ 0..1 ]解説文 : 文字列 [ 0..1 ]登録日時 : 日時

1
所有者0..*

アップロード日時 : 日時
撮影日時 : 日時 [0..1]
写真イメージ : URL

1

コメント0..*

コメント文 : 文字列
登録日時 : 日時0..*{ ordered }図 3 制約を追加したクラス図(イ).の『 { self.アルバム.所有者 = self.写真データ.所有者 } 』は「スリーブ」に付く制約で、日本語で表現するとしたら『ある「アルバム」に含まれるすべての「スリーブ」は、その「アルバム」と同じ所有者に所有されている「写真データ」を参照しているものでなければならない』といった意味になります。
(ロ).の『 { self.スリーブ.アルバム.所有者 = self.記入者 } 』は「コメント」に付く可能性のある制約で、日本語で表現するとしたら『ある「コメント」の記入者は、その「コメント」が記入されている「スリーブ」が含まれている「アルバム」の所有者と同じ「会員」でなければならない』といった意味になりますが、実際の仕様では所有者以外の会員もコメントを追加することができるため、この制約は不適切(該当なし)となります。
(ハ).の『 { self.アルバム.所有者 <> self.会員 } 』は「公開」に付く制約で、日本語で表現するとしたら『ある「公開」の対象になっている「アルバム」の所有者は、その「公開」の対象になっている「会員」と同じであってはならない』といった意味になります。これは問題記述に含まれている『自身が所有しているアルバムを自分自身に対して公開することはできません』という記述と合致する制約です。
(ニ).の『 { self.スリーブ->forAll( s1, s2 | s1 <> s2 implies s1.写真データ <> s2.写真データ ) } 』は「アルバム」に付く可能性のある制約で、日本語で表現するとしたら『ある「アルバム」中に含まれるすべての「スリーブ」は、それぞれ異なった「写真データ」を参照していなければならない』といった意味になります。が、この制約は問題記述に含まれている『ひとつのアルバムに同じ写真データの写真が数回登場するということも可能とします』という記述と反するものであるため不適切(該当なし)となります。

-5–
Copyright©2009-2010 UMTP

LastUpdate : 2010/12/14

設問 4
正解
(1)
解説
条件式構造を題材にして、新しいクラスを追加する際に妥当な継承関係を考えることができるかを確認する設問です。
(1)適切。「区間条件」を「AND 条件」の特殊なものとして考えるなら、その子条件はかならず 2 個でなければならないし、その 2 個はいずれも大小比較のための「数値条件」でなければならない…などの制限を加える必要があるため、いくつかの操作をオーバーライドするか制約を加えるかしなくてはならなくなります。
(2)不適切。「条件」クラスのサブクラスであれば何でも「複合条件」の子条件として追加することができるので、この説明文は誤っています。
(3)不適切。「区間条件」の場合は「数値比較方法」として「==」や「!=」が指定できては困る(意味が不明になる)ので、これらの設定を制限するようなオーバーライド/制約が必要になります。
(4)不適切。まず、実装時の方式をこの記述だけで特定することはできないので、どちらの構造の方がより多くのメモリ容量を必要とするかという正確な判断はできません。さらに、同じ意味を持つ条件を ( a ) 案で表現すると考えた場合、「区間条件」インスタンスがひとつと「数値条件」インスタンス 2 つの組み合わせになり、属性(インスタンス・フィールド)の分だけでなくオブジェクトや参照ポインタなどの分も増えるため、むしろ、一般に、( a ) 案の方が ( d ) 案より多くのメモリ容量が必要になる場合が多いと考えられます。

以上-6–
Copyright©2009-2010 UMTP