クラス図と多重度(class diagram / multiplicity)
システムに出てくるものの種類と、その間のつながりを描くUMLの図。多重度は、片方1つに相手が何個つくかを示す数。
もう少し詳しい説明
クラス図は、システムに出てくるものの種類と、その間のつながりを描くUMLの図です。
「もの」そのものではなく、もの の 種類を描きます。「田中さんの注文」ではなく「注文」という箱を1つ置きます。
箱の中は3段
1つのクラスは、横線で3段に区切った箱で描きます。
| 段 | 書くもの | 例 |
|---|---|---|
| 上 | クラス名 | 注文 |
| 中 | 属性(持っているデータ) | 注文番号、注文日 |
| 下 | 操作(できること) | 合計金額を出す |
属性や操作の頭に付く記号は、外から使えるかどうかを表します。
| 記号 | 読み | 意味 |
|---|---|---|
+ | public | どこからでも使える |
- | private | そのクラスの中だけ |
# | protected | そのクラスと、受け継いだクラスから |
多重度:どちら側の数なのか
クラスどうしを線でつなぎ、線の両端に数を書きます。これが多重度です。
読む向きを間違えやすいところです。 決まりはこうです。
線の反対側を1つに固定したとき、こちら側がいくつあるか。
「注文 ── 注文明細」の線で、注文明細側に 1..* と書いてあれば、「注文1件につき、注文明細は1個以上」という意味になります。注文明細の個数を、注文側ではなく注文明細側に書く、ということです。
書き方は次のとおりです。
| 書き方 | 意味 |
|---|---|
1 | ちょうど1個 |
0..1 | 0個または1個(なくてもよい) |
1..* | 1個以上(上限なし) |
0..* または * | 0個以上(上限なし) |
2..5 | 2個以上5個以下 |
.. が範囲、* が上限なしです。
線の種類で、つながり方を区別する
ここまでは、クラスどうしをただの線でつないできました。しかし「関係がある」とひとことで言っても、中身はいろいろです。
- 社員とプロジェクト … たまたま関わっているだけ
- 部署と社員 … 部署は社員の集まりである
- 注文と注文明細 … 明細は注文の一部であって、単独では意味がない
- 社員と正社員 … 正社員は社員の一種である
クラス図は、この違いを線の端に付ける飾りで書き分けます。 試験に出るのは次の4つです。
| 名前 | 端の飾り | 意味 |
|---|---|---|
| 関連 | 無し | 関係がある、というだけ |
| 集約 | 白いひし形 | 全体と部分。部分は単独でも存在できる |
| コンポジション | 黒いひし形 | 全体と部分。全体が消えると部分も消える |
| 汎化(継承) | 白い三角 | 「〜の一種である」 |
集約とコンポジションの違いは、部分だけ残れるかです。
部署がなくなっても、社員は社員のまま残ります。会社の中で別の部署へ移るだけです。いっぽう注文が取り消されたら、その明細は行き場がありません。「どの注文の明細か」を失うと、1行だけでは意味を持たないためです。
ひし形と三角が、どちら側に付くかも問われます。
| 飾り | 付く側 |
|---|---|
| ひし形 | 全体の側(部分の側ではない) |
| 三角 | 親の側(子の側ではない) |
汎化の三角は、「正社員 ─▷ 社員」なら社員の側に付きます。三角を矢の先と見て、「〜の一種である」の向きを指していると考えると取り違えません。
多重度は、データベースの設計にそのまま続く
クラス図の多重度は、関係データベース(データを表の形でためておく仕組み)の表の関係と対応します。
| クラス図 | 表の関係 | 作り方 |
|---|---|---|
| 1 ── 1 | 1対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