UMLのクラス図の基本を情報処理技術者試験の問題からわかりやすく解説
クラス図とは何か?
UMLのクラス図とは、クラス、属性、クラス間の関係からシステムの構造を記述する静的な構造図のことです[1]クラス図 – Wikipedia。
このクラス図はソフトウェア開発プロジェクトを円滑にする技法というだけでなく、基本情報技術者試験や応用情報技術者試験などの情報処理技術者試験でも頻出のキーワードです。
クラス図は初めて見ると何が何だかわかりませんが、書いてあることはシンプルです。
もともとUMLはプロジェクト・チームで共通の理解を深めるために考案されたものなので、そこまで複雑なことを知らなくとも理解できるようになっています。
そのため、少しの基本を知るだけで、クラス図を理解することは可能です。
今回は情報処理技術者試験の問題を見ていきながら、クラス図の基本について解説していきます。
多重度
さっそく応用情報技術者試験の問題を見ていきましょう。
社員と年の対応関係をUMLのクラス図で記述する。二つのクラス間の関連が次の条件を満たす場合、a、bに入れる多重度の適切な組合せはどれか。ここで、"年"クラスのインスタンスは毎年存在する。
応用情報技術者試験 平成30年度秋午前問26
〔条件〕
(1)全ての社員は入社年を特定できる。
(2)年によっては社員が入社しないこともある。
a b ア 0..* 0..1 イ 0..* 1 ウ 1..* 0..1 エ 1..* 1
クラスというのは、ソフトウェアの部品をイメージしていればよいでしょう。
この問題で言うと、あるソフトウェア開発をする中で、社員のデータと年のデータの部品があり、その2つの部品がどのような関係にあるのかを示すのが問題の要旨です。
この2つのクラスの関係を示すのに、先ほどの問題の選択肢のように、「1」という数字の他、「0..*」というように、ピリオドを重ねたような記述(..)やアスタリスク(*)がでてきます。
..の意味
「..」は日本語で言う「XXからXXまで」の「から」を表しています。
つまり、「0..1」という記述は「0から1」を意味しています。
*の意味
*はコンピュータの世界ではワイルドカード、つまり「何でも」を意味することが多いですが、クラス図であっても、「何でも」を意味しています。それが転じて「0..*」は「0以上なら何でも」という意味になります。
クラスの関係を考える

先ほどの応用情報技術者試験の問題に戻り、社員と年の関係を考えていきましょう。
条件にあるように、全ての社員は入社年を特定でき、年によっては社員が入社しないこともあります。
つまり、社員がわかればその人の入社年が必ずわかりますが、入社年には社員がいないことがあります。
社員というクラスから見て、年というクラスは常に1つのデータに絞られるので、問題文中の図の「b」には「1」が入ります。
一方で、年というクラスから見て、社員は0のこともあるし、複数のこともあります。そのため、「a」には「0..*」が入ります。
このように、一方に紐づけられている他方のデータの数の程度を多重度といいます。