FE EXAM

クラス図(UML)

クラスとその関係を表すUMLの構造図。

INTERACTIVE VISUALIZATION
汎化
集約
コンポジション
フェーズ
idle
クラス数
0
関連線の数
0
シナリオ
ステップ1 / 8
STEP 1/8まだ何も描かれていないこれから図書館の蔵書管理を題材に、クラス図(=クラスとその関係を表すUMLの構造図)を描いていきます。UML(=システム設計の共通の図のルール)の中でも、もっともよく使われる図です。
▶ を押すとクラスが1つずつ置かれます
解説

📌
クラス図とは

書籍+ 著者+ ISBN+ 予約する()名前属性操作

クラス図とは、クラスとその関係を表すUMLの構造図のことです。UML(Unified Modeling Language=統一モデリング言語、システム設計の図の共通ルール)の中で最もよく使われます。

クラス(=同じ種類のモノの設計図)は、3段の長方形で描きます。上から名前・属性(データ)・操作(できること)の順です。たい焼きの「型」に対して、焼き上がった一つひとつのたい焼きが「オブジェクト」だと考えると分かりやすいです。

上のツールで▶ボタンを押すと、図書館の蔵書管理を題材に、クラスの箱を作り、属性・操作を書き込み、クラスどうしを関連線でつないでいく流れを確認できます。

🔗
関連線の種類

汎化(白抜き三角)集約(白抜きひし形)合成(塗りつぶし)

クラスどうしの関係は、線の先端の形で意味を区別します。主な関連線は次の3つです。

汎化(白抜き三角の矢印):「〜は〜の一種」という継承(is-a)関係。子から親へ向ける
集約(白抜きのひし形):「全体と部分」(has-a)の関係。部分は単独でも存在できる
コンポジション(塗りつぶしのひし形):より強い「全体と部分」。全体が消えると部分も消える

身近な例で考えると、集約はバンドとメンバー(バンドが解散してもメンバーは生きている)、コンポジションは人と心臓(人が死ねば心臓も働けない)です。ひし形は必ず「全体」の側に付ける、と覚えておきましょう。

🛠️
用途

クラス図設計実装

クラス図は、プログラムを書く前にシステムの構造を整理・共有する設計図として使います。オブジェクト指向設計の中心となる図です。

具体的な使い道は次のとおりです。
設計の共有:チームでクラスの役割と関係を共通認識にする
コードへの橋渡し:クラス名・属性・操作がそのままプログラムの雛形になる
既存システムの理解:他人が作ったプログラムの構造を読み解く地図になる

クラス図は「時間とともに変化しない、システムの骨組み」を表します。これに対し、動きの流れを表すのがシーケンス図やアクティビティ図です。静的な構造はクラス図、動的な振る舞いは別の図、と役割分担を意識すると、UMLの図の使い分けが分かりやすくなります。

📌
多重度(関連線の端に書く数の意味)

利用者名前貸出貸出日書籍タイトル10..**11: 必ず1つ  0..*(または *): 0個以上1..*: 1個以上  0..1: 0か1

関連線の両端に書かれる数字を多重度(=いくつと関係しているかを表す数)といいます。「1対多」「多対多」といった関係の個数を示します。

よく使われる多重度の表記は次のとおりです。
1:必ずちょうど1つ(例:貸出は必ず1冊の書籍に対応する)
0..*(または *):0個以上(何個でもよい、例:1人の利用者が貸出を0回以上持てる)
1..*:1個以上(少なくとも1つ必要)
0..1:0か1(あってもなくてもよいが2つ以上はない)

上の図の例では、「1人の利用者は0回以上の貸出を持てる(借りていない人もいる)」「1件の貸出は必ず1冊の書籍に対応する」という意味になります。多重度を書くことで、「どれくらいの数がつながるか」という重要な制約を図の中に表現できます。

📌
「〜は〜の一種」と「〜は〜を持つ」の違い

is-a(〜は〜の一種)= 汎化乗り物バイク車は乗り物の一種has-a(〜は〜を持つ)= 集約エンジン車はエンジンを持つどちらの関係かを見極めると、線の種類を正しく選べる

クラス図で迷いやすいのが「汎化(継承)を使うか、集約を使うか」です。判断の基準は2つの問いかけに集約されます。

「〜は〜の一種(is-a関係)」→ 汎化(白抜き三角の矢印)を使う
 例:「犬は動物の一種」「書籍は貸出物の一種」
「〜は〜を持つ(has-a関係)」→ 集約(ひし形)を使う
 例:「車はエンジンを持つ」「図書館は書籍を持つ」

なぜ区別するのか。継承(汎化)は「親の機能をそのまま使える・拡張できる」という強い関係で、設計の骨格になります。集約は「部品として持っている」だけなので、より緩い結びつきです。「これは一種か?それとも部品として持つだけか?」と自問すると判断しやすくなります。間違えると設計が崩れるため、2つの違いをしっかり区別することが重要です。

練習問題

🎯
基本情報技術者 練習問題

Q1.UMLのクラス図が主に表現するものはどれか。
A.オブジェクト間のメッセージの時間順のやり取り
B.クラスとその属性・操作、およびクラス間の関係
C.システムの利用者と機能の関係
D.処理の流れと分岐
Q2.「書籍は貸出物の一種である」という継承(is-a)の関係を表す関連線はどれか。
A.汎化(白抜き三角の矢印)
B.集約(白抜きのひし形)
C.コンポジション(塗りつぶしのひし形)
D.単純な関連(実線)
Q3.集約とコンポジションの違いとして正しいものはどれか。
A.集約は白抜きのひし形、コンポジションは塗りつぶしのひし形で表す
B.集約は矢印、コンポジションは点線で表す
C.どちらも継承を表し、まったく同じ意味である
D.コンポジションのほうが部分の結びつきが弱い

関連コンテンツ

クラス図 | Vizigo