平成29年度 秋期 システムアーキテクト試験 午前Ⅱ 問3

図は“顧客が商品を注文する”を表現したUMLのクラス図である。“顧客が複数の商品をまとめて注文する”を表現したクラス図はどれか。ここで,注文明細は注文に含まれる一つの商品に対応し,注文は一つ以上の注文明細を束ねたもので,一つの注文に対応する。

図の説明テキスト

問題文のUMLクラス図と凡例。
【クラス図】

  • 「顧客」(多重度 1)― 関連 ―(多重度 0..*)「注文」
  • 「注文」(多重度 0..*)― 関連 ―(多重度 1)「商品」

【凡例】

  • クラス:長方形の枠
  • 関連:実線
  • コンポジション:塗りつぶしひし形(◆)付きの実線
  • 多重度:
    • 1:必ず1
    • 0..*:0以上
    • 1..*:1以上
解答・解説

正解: ア.

正解は ア です。

正解の根拠

UMLのクラス図における各クラス間の関係(関連・コンポジション・多重度)を、問題文の条件に照らし合わせて整理します。

  1. 「顧客」と「注文」の関係

    • 元の図と同様に、1人の顧客は0回以上の注文を行うため、「顧客」(多重度 1)と「注文」(多重度 0..*)が実線(関連)で結ばれます。
  2. 「注文」と「注文明細」の関係

    • 問題文より、「注文は一つ以上の注文明細を束ねたもので,一つの注文に対応する」とあります。
    • 全体(注文)と部分(注文明細)の強い結びつきを表すコンポジションでは、全体側のクラスに塗りつぶしひし形(◆)を付けます。したがって、「注文」側にひし形(◆)が付きます。
    • 多重度は、1つの「注文」に対して1つ以上の「注文明細」が含まれ、1つの「注文明細」は必ず1つの「注文」に対応するため、「注文」側が 1、「注文明細」側が 1..* となります。
  3. 「注文明細」と「商品」の関係

    • 問題文より、「注文明細は注文に含まれる一つの商品に対応し」とあります。
    • したがって、「注文明細」と「商品」が実線(関連)で結ばれ、1つの「注文明細」に対応する「商品」の多重度は 1、1つの「商品」は0個以上の「注文明細」に含まれるため「注文明細」側の多重度は 0..* となります。

これらすべての条件を満たしているのは ア です。

各選択肢の解説

  • ア:正解です。「顧客」と「注文」、「注文」と「注文明細」(「注文」側が◆で多重度 1、「注文明細」側が多重度 1..*)、「注文明細」と「商品」の関係がすべて正しく表現されています。
  • イ:「注文」と「注文明細」の間のコンポジションのひし形(◆)と多重度が逆になっています(部分側である「注文明細」に◆と多重度 1 が付いてしまっています)。
  • ウ:「顧客」が「注文明細」と関連付けられ、「商品」が「注文」と関連付けられており、クラス間の関係が誤っています。
  • エ:ウと同様に「顧客」と「注文明細」、「注文」と「商品」が関連付けられている誤りに加え、「注文」と「注文明細」の間のコンポジションの向きと多重度も逆になっています。

Spineチーム