支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • クラス図って何?基本とルールを解説!

クラス図って何?基本とルールを解説!

クラス図とは?

UML(Unified Modeling Language)は統一モデリング言語のことで、主にオブジェクト指向分析・設計の際に用いることができます。UMLはオブジェクト指向プログラミングにおいて、設計の際に主に使用される標準的な記法です。UMLは「複数人で設計モデルを共有してコミュニケーションを図るための手段」であるため、言語という名前を冠しているのです。開発イメージをより具体的に整理し、共有するための言語がUMLなのです。UMLで規定されている図をダイアグラムと呼び、ダイアグラムは大きく分けてシステムの構造を表す構造図とシステムの振る舞いを表す振る舞い図の2種類に分類されます。今回は、構造図の中の一つであるクラス図の基本的なルールと書き方について紹介していきます。

クラス図のメリット

・クラス図を用いることで複雑なシステムのデータモデルを図として共有することができる

・システムを視覚化することで全体の概要を理解しやすくなる

・システム実装環境などに影響されず、構造を理解することができる

クラス図について

以下に示すのがクラス図です。端的に言うと、システムの構造、そして関係性を表している図です。一つの箱が一つのクラスです。その箱の中にはデータや処理などが書かれており、そのクラス間の繋がりや影響をクラス図で表すことができるのです。

クラス図のルール


今回はこのスマートフォンというクラスを例に説明します。

クラス名

長方形の箱の中は3区画に分かれ、上からクラス名、属性、操作のデータが箱の中に入っています。クラス名の上には"<<>>"で囲まれたステレオタイプを書き加えること可能です。

属性

OS ,メーカー と書かれている箱の欄は属性名を表します。属性はデータを表し、「(可視性) 名前:型 = デフォルト値」で表します。「型」というものはその属性を文字列で表すか、数値で表すか、属性のデータ形式のことを指します。プログラミングにおいては、int(整数)やstring(文字列)などといったものを指定します。

操作

最後に「操作」について説明します。今回ではイメージしやすいように "電話をする" , "メールを送る といった項目にしていますが、プログラミングで言う、関数のことを指しています。実際の操作の記述方法としては「操作名(引数:引数の型)」と表します。

可視性

今回では、 "OS" や "メーカー" の欄の左に「ー」の表記があります。この記号が「可視性」を表しており、先程紹介した「属性」や「操作」に対するアクセスの可否を指定することができます。可視性は4つの記号で表現できます。

+…すべてのクラスからアクセス可能です。

ー…自分のクラスからのみアクセスが可能です。

#…自クラス及び、継承されているクラスからのみのアクセスが可能です。

~…同一パッケージ内のクラスからのみアクセス可能です。

関係について

関連

複数のクラス同士の関係を表す時には、クラスを線で繋ぎ、関連名を追加します。今回は "人" と "スマートフォン" の関係について "通信手段" という関連を持っていることを表現しました。


誘導可能性


クラスの関係が単一方向である場合には矢印を用いて「誘導可能性」という関係が付加されます。今回は、 "携帯電話" と "電話帳" という二つのクラス間の関係でイメージしてみましょう。 "携帯電話" のクラスでは「操作」として "電話を掛けること"と "電話番号を登録する"ことができます。 "電話番号を登録する" 際には "電話帳" クラスに電話番号を登録していきます。そして、 "電話を掛ける" 際にも "電話帳" クラスからデータを取り出し、電話を掛けることができるのです。考えてみると一目瞭然なのですが、 "電話帳" クラスからは "携帯電話" に対する操作を行うことはできません。このような場合には「×」を用いて一方的に操作や参照を行う関係であることを表すことができるのです。一方方向かどうか未定の時には「×」を記述しないことで表すことができます。

汎化(継承)


「汎化」は継承という呼び方でもあります。クラスの型を継承し、さらに具体化した他のクラスがある時にこのクラス間では汎化の関係が成り立っていると言えます。今回のケースでは、 "家電" は抽象的なクラスとなり、このクラスを「スーパークラス」と言い、 "家電" の具体的な物である "掃除機" , "冷蔵庫" などのクラスのことを「サブクラス」と言います。

多重度

関連のあるクラス間で、クラスAから見たクラスBの要素の数を表したものが「多重度」です。多重度の数字を用いた記述方法は以下のルールに従って行います。

「n」…値の数だけ要素の数がある

「0..n」「0..*」…「0..n」は0以上n以下となり「0..*」は0以上

「1..*」…1以上の数

「m..n」…m以上n以下の数


今回は "学校" と "児童" のクラス間の多重度を例として表記しました。学校という教育機関は一つであり、学校に在籍する児童は一人ではないので、このように表すことができます。

集約

クラス同士の関係が、「全体」と「部分」の関係である場合に、「集約」として表現することができます。具体例として、"学校" という教育機関を表すクラスと "児童" という教育を受ける子どもの関係が「全体」と「部分」にあたります。


コンポジット

コンポジットは、集約の一種になります。コンポジットは「全体」のクラスが「部分」クラスの生成や削除を担っている場合に使用されます。今回では "学校" が全体であり、 "学級" が部分です。集約の関係と比べてみると、 "児童" は学校がなくなっても消えることはありえませんが、 "学級" は学校なくしてはあり得ない存在となっていることに注目すると違いが分かりやすいでしょう。クラス図では、菱形部分が黒いものがコンポジットです。


依存

2つのクラスが一時的な関係がある時に依存で表現することができます。今回の例では、クラス "児童 "の操作 (遊ぶ) を行うときにクラス "サッカーボール" 使用する場合に、"A→B"の方向で点線の矢印を記述することで表現できます。ここでのクラス間の関係が弱いことが「依存」の特徴であり、今回では、操作(遊ぶ)を行う際には必ずしも "サッカーボール"が必要ではないことでクラス間の関係が弱いことが理解できるかと思われます。


インターフェース


「インターフェース」は、クラスが実現する中で必要な共通操作のみを定義したクラスのことを指します。基本としてインタフェースには操作の具体的な処理は記載せず、具体的な処理は「サブクラス」で定義します。このインターフェースとサブクラスの関係を「実現」と言います。そして実現は汎化の一種であると言えます。今回は "電話" をインターフェースとしており、"通話をする" という操作は他でも共通しているので "電話" のクラスにのみ "通話をする" という操作を記述しています。そして "固定電話" , "スマートフォン" , "公衆電話" などがサブクラスになります。

まとめ

いかがでしょうか。これまでクラス図の簡単なルールについて解説してきました。今回は身近なものをクラスとして表記することで幾らかイメージがしやすかったのではないでしょうか。実際の開発においては、データの形式であったり、操作として関数を設定し、そこに引数のクラスを指定したりとさらに複雑化していきます。幾つものデータや関数が密接にかかわっているプログラムを理解し、共有することができるのでプログラム開発において非常に重要であると言えます。