クラス図と多重度(class diagram / multiplicity)

分類
テクノロジ系 システム開発技術
出る試験
基本情報応用情報
重要度
★★★★☆

システムに出てくるものの種類と、その間のつながりを描くUMLの図。多重度は、片方1つに相手が何個つくかを示す数。

もう少し詳しい説明

クラス図は、システムに出てくるものの種類と、その間のつながりを描くUMLの図です。

「もの」そのものではなく、もの の 種類を描きます。「田中さんの注文」ではなく「注文」という箱を1つ置きます。

箱の中は3段

1つのクラスは、横線で3段に区切った箱で描きます。

注文クラス名(必ず書く)− 注文番号/− 注文日属性:持っているデータ+ 合計金額を出す()操作:できること
クラスは横線で3段に区切った箱で描きます。中段と下段は要らなければ省けますが、上段のクラス名だけは必ず書きます。属性の頭の記号は、外から使えるかどうかを表します(+はどこからでも、−はそのクラスの中だけ)。
段書くもの例
上クラス名注文
中属性(持っているデータ)注文番号、注文日
下操作(できること)合計金額を出す

属性や操作の頭に付く記号は、外から使えるかどうかを表します。

記号読み意味
+publicどこからでも使える
-privateそのクラスの中だけ
#protectedそのクラスと、受け継いだクラスから

多重度:どちら側の数なのか

クラスどうしを線でつなぎ、線の両端に数を書きます。これが多重度です。

読む向きを間違えやすいところです。 決まりはこうです。

線の反対側を1つに固定したとき、こちら側がいくつあるか。

含む注文1注文明細1..*
数は、その数を書いた側のものがいくつあるかを表します。注文明細側の 1..* は「注文1件につき、注文明細は1個以上」という意味です。読むときは、線の反対側を1つに固定してから、こちら側がいくつかを数えます。

「注文 ── 注文明細」の線で、注文明細側に 1..* と書いてあれば、「注文1件につき、注文明細は1個以上」という意味になります。注文明細の個数を、注文側ではなく注文明細側に書く、ということです。

書き方は次のとおりです。

書き方意味
1ちょうど1個
0..10個または1個(なくてもよい)
1..*1個以上(上限なし)
0..* または *0個以上(上限なし)
2..52個以上5個以下

.. が範囲、* が上限なしです。

線の種類で、つながり方を区別する

ここまでは、クラスどうしをただの線でつないできました。しかし「関係がある」とひとことで言っても、中身はいろいろです。

クラス図は、この違いを線の端に付ける飾りで書き分けます。 試験に出るのは次の4つです。

関連社員プロジェクト関係がある、というだけ集約部署社員白いひし形。部署が無くなっても社員は残るコンポジション注文注文明細黒いひし形。注文が消えると明細も消える汎化社員正社員白い三角。正社員は社員の一種である
4つとも、左が全体または親の側です。飾りは必ずそちらの箱に接します。ひし形を部分の側に付けた図は誤りです。白と黒の違いは塗りの有無だけで、形は同じひし形であることも確かめてください。
名前端の飾り意味
関連無し関係がある、というだけ
集約白いひし形全体と部分。部分は単独でも存在できる
コンポジション黒いひし形全体と部分。全体が消えると部分も消える
汎化(継承)白い三角「〜の一種である」

集約とコンポジションの違いは、部分だけ残れるかです。

部署がなくなっても、社員は社員のまま残ります。会社の中で別の部署へ移るだけです。いっぽう注文が取り消されたら、その明細は行き場がありません。「どの注文の明細か」を失うと、1行だけでは意味を持たないためです。

ひし形と三角が、どちら側に付くかも問われます。

飾り付く側
ひし形全体の側(部分の側ではない)
三角親の側(子の側ではない)

汎化の三角は、「正社員 ─▷ 社員」なら社員の側に付きます。三角を矢の先と見て、「〜の一種である」の向きを指していると考えると取り違えません。

多重度は、データベースの設計にそのまま続く

クラス図の多重度は、関係データベース(データを表の形でためておく仕組み)の表の関係と対応します。

クラス図表の関係作り方
1 ── 11対1どちらかに相手の主キーを持たせる
1 ── 1..*1対多「多」の側に、相手の主キーを外部キーとして持たせる
1..* ── 1..*多対多間に表を1つ作る(対応表)

多対多は、そのままでは表にできません。 間に1つ表を入れて、1対多を2本に分けます。正規化で出てくる形と同じものです。

試験ではこう出る

科目A(旧・午前)では、多重度の読み取りがいちばん多く出ます。与えられた図を見て、「ある1件に対して相手が何個か」を答える形です。どちら側に書いた数かを確かめてから読んでください。

次に多いのが、集約とコンポジションの区別です。「白いひし形」「黒いひし形」のどちらかが図に描かれ、意味を選ばせます。全体が消えたときに部分が残るかどうかで切り分けます。

汎化の向きも出ます。三角が付いているほうが親(一般的なほう)です。

応用情報では、文章で書かれた業務の説明から、正しいクラス図を選ぶ形が出ます。「1件の注文には複数の明細が含まれる」といった記述を、多重度の表記に置き換えられるかが問われます。

関連する用語

オブジェクト指向
クラスとインスタンスの考え方。クラス図はその設計を絵にしたもの
ユースケース図
同じUMLの図。こちらは「外から見て、誰が何をできるか」
ステートチャート図
同じUMLの図。こちらは「1つのものの状態の移り変わり」
関係データベース
クラス図の多重度は、表どうしの関係(1対多など)にそのまま対応する
正規化
多対多を解きほぐすと、間に表が1つ入る。クラス図でも同じ形になる

ミニクイズ

UMLのクラス図で、クラス「注文」とクラス「注文明細」の間に引いた線の、注文明細側に「1..*」と書いた。この表記の意味として正しいものはどれか。

正解は 1番:注文1件には、注文明細が1個以上つく

多重度は、線の反対側のものを1つ固定したときに、その側のものがいくつ対応するかを書きます。注文明細側に 1..* とあるので、「注文1件に対して、注文明細は1個以上」という意味です。「..」は範囲を表し、「*」は上限なしを表します。注文明細側に書いた数が注文の側の個数を表すわけではないので、読む向きを取り違えないようにしてください。ちょうど1個なら 1、0個でもよいなら 0..* と書きます。

間違えた用語の復習リストを見る →

この分野をまとめて解く → システム開発とユーザーインタフェースのミニテスト(全40問)

最終更新:2026-10-20