応用情報技術者 2014年 秋期 午前2 問27
問題文
その月に受注した商品を、顧客ごとにまとめて月末に出荷する場合、受注クラスと出荷クラスとの間の関連のa, bに入る多重度の組合せはどれか。ここで、出荷のデータは実績に基づいて登録される。また、モデルの表記にはUMLを用いる。


選択肢
ア:
イ:
ウ:(正解)
エ:
🔒 解説は解答すると表示されます
受注と出荷の多重度【午前2解説】
正解の理由
UML の多重度ラベルは「ラベルが置かれた側のクラスが、相手側の1インスタンスに対して何個存在しうるか」を示します。今回、ラベル a は受注側寄りにあるので a は「1 出荷に対する受注の個数」を表し、ラベル b は出荷側寄りにあるので b は「1 受注に対する出荷の個数」を表します。
設問の業務ルールは「当月に受注した商品を顧客ごとにまとめて月末に出荷する」「出荷データは実績に基づいて登録される」です。これを多重度に読み替えると:
- 1 出荷(=顧客ごとの月末出荷)には、その月に当該顧客が行った受注が少なくとも1件以上含まれる(存在しなければ出荷は発生しない)。したがって a = 1..*。
- 各受注はその月の顧客集約出荷に含まれるなら1つの出荷に対応するが、出荷がまだ発生していない受注(=出荷データが未登録の受注)もあり得る。したがって出荷は「0個または1個」であり b = 0..1。
以上より、選択肢のうち a = 1..*, b = 0..1 を示す ウ が業務ルールに合致します。
解法ステップ
- UMLのルールを確認:ラベルは「ラベル側のクラスの個数/相手1インスタンス」を意味することを明確にする。
- ラベルとクラスの対応付け:a は受注側(→ a は「1出荷あたりの受注数」)、b は出荷側(→ b は「1受注あたりの出荷数」)と読む。
- 業務ルールを多重度に翻訳:
- 「顧客ごとにまとめて月末に出荷」→ 1 出荷に複数の受注が含まれる可能性 → a の下限は 1、上限は * → 1..*。
- 「出荷データは実績に基づいて登録」→ 受注に対してまだ出荷が存在しないケースがある → b の下限は 0、上限は 1 → 0..1。
- 選択肢と照合して該当するものを選ぶ(ウ)。
選択肢別の誤答解説
まず再確認:a は「1 出荷に対する受注数」、b は「1 受注に対する出荷数」です。
-
ア(a = 1、b = 1..)
解釈:1 出荷につき受注はちょうど1件(a=1)、1 受注につき複数の出荷があり得る(b=1..)。
なぜ不適切か:業務は「顧客ごとにまとめて出荷」なので 1 出荷に複数受注が含まれる可能性があるはずで、a=1 は誤り。また受注が複数回に分割出荷されるという記述はないため b が多重(1..*)である根拠がない。 -
イ(a = 1、b = 0..1)
解釈:1 出荷につき受注はちょうど1件、1 受注につき出荷は 0 または 1。
なぜ不適切か:やはり a=1 は「出荷は必ず1つの受注だけを含む」とするが、実際は顧客ごとに複数受注をまとめるため a は 1..* であるべき。 -
ウ(a = 1..*、b = 0..1)
解釈:1 出荷には1件以上の受注が含まれ、各受注は出荷をまだ持たない場合(0)もしくは1つの出荷に含まれる(1)という意味。
なぜ適切か:設問の「顧客ごとにまとめて月末に出荷」「出荷データは実績に基づく」の両方を満たすため、業務ルールと一致する。 -
エ(a = 1..、b = 1..)
解釈:1 出荷に複数受注が含まれるのは OK(a=1..)だが、1 受注が複数の出荷に分割され得る(b=1..)ことを意味する。
なぜ不適切か:設問では受注を顧客ごとにまとめて出荷するという単一化ルールがあるため、受注が複数出荷に分割されるとは考えないのが自然。加えて出荷データは実績ベースなので「必ず出荷が存在する」前提(b 下限が 1)も妥当でない。
よくある誤解
- ラベルの向き(どちらのクラス側にラベルがあるか)を見誤り、a や b を逆に解釈してしまう。必ず「ラベルが置かれた側のクラス数/相手1個」を読むこと。
- 「出荷=登録されるから必ず存在する」と考え、b の下限を 1 としてしまう。設問の「実績に基づいて登録される」は「未だ出荷されていない受注もある」という可能性を示すため下限は 0 になりうる。
- 業務の「まとめる」「分割する」の表現を混同し、まとめるケースで分割(受注→複数出荷)を想定してしまう。
補足コラム
- モデリング上の注意:今回の設計では「月次で顧客ごとにまとめる」性質を表現するため、出荷クラスに「出荷年月」「顧客ID」などの属性を設けると明確になります。時系列や確定状態を扱うにはステータス属性(例:出荷予定/出荷済)を持たせると業務要件を正確に表現できます。
- ビジネスが変わり「受注を分割出荷可能」「同じ受注が複数出荷に含まれる」なら b の上限は * になり、1 対多または多対多の関係を検討する必要があります。
FAQ
Q. なぜ b の下限が 0 になるのか?
A. 「出荷のデータは実績に基づいて登録される」ため、受注があってもまだ出荷されておらず出荷データがない状態(0)があり得ます。出荷が存在すればその受注は最大1件の出荷に含まれるため上限は 1。
A. 「出荷のデータは実績に基づいて登録される」ため、受注があってもまだ出荷されておらず出荷データがない状態(0)があり得ます。出荷が存在すればその受注は最大1件の出荷に含まれるため上限は 1。
Q. もし受注を複数回に分割して出荷する仕様なら?
A. その場合は「1 受注に対して複数の出荷」が許容されるため b の上限は * になり得ます(例えば b = 1..* または b = 0..* のように要件に合わせて変更)。
A. その場合は「1 受注に対して複数の出荷」が許容されるため b の上限は * になり得ます(例えば b = 1..* または b = 0..* のように要件に合わせて変更)。
Q. ラベルが線のどの位置にあるか不明な図だとどう判断する?
A. UML ではラベルは各端の近くに置かれ、端に近いラベルがその端の多重度を示します。図が不明瞭なら設問文の業務ルールから「1 出荷あたり何件の受注か」「1 受注あたり何件の出荷か」を直接推論するのが確実です。
A. UML ではラベルは各端の近くに置かれ、端に近いラベルがその端の多重度を示します。図が不明瞭なら設問文の業務ルールから「1 出荷あたり何件の受注か」「1 受注あたり何件の出荷か」を直接推論するのが確実です。
関連キーワード: UML、多重度、受注、出荷、月次集約、実績登録、0..1、1..*

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

