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

  • TOP
  •   
  • コラム
  •   
  • UMLとは? クラス図の書き方を紹介

UMLとは

UMLとはUnified Modeling Languageの略で日本語では統一モデリング言語といいます。世界中の設計者が共通認識を取れるように統一された設計内容の書き方です。OMG(OBJECT MANAGEMENT GROUP)という機関で管理されています。もしUMLがなければそれぞれの現場で独自の表現になってしまい引継ぎや共同作業をする際に混乱してしまうでしょう。UMLの種類にはユースケース図やアクティビティ図、データフロー図といったものがあります。今回はオブジェクト指向で設計する際に使われるクラス図について初心者向けに解説します。

クラス図とは

クラスを表現したもの同士の構造や関係性を表現するための図です。クラスを表現するためにはクラス名、属性、操作を区分けして表記します。下記が例です。

「人間」クラスで「名前」と「身長」と「体重」という属性があり「食べる」と「寝る」という操作があるということですね。これが一つのクラスの表現です。次に「家」クラスを作り、2つのクラスの関連性を表現します。2つを実線で結ぶと2つのクラスに「関連」があるという表現になります。

多重度

さらに多重度という表現を追加します。

上記のような表現です。これは「人間」から見た「家」は1つ以上、「家」から見た「人間」は0人以上という表現となっています。だれも住んでいない家の可能性もあるし複数家を持っている人間もいる可能性もあります。クラス間のインスタンス数の関係性を表しているといえます。これによりクラスの関係性をより詳細に表現できます。ER(Entity Relationship)図でも同様の表現があります。

集約

集約は「全体」と「一部」という関係を表現します。集約は実線で表し「全体」側に白抜きのひし形をつけます。

上記では家からみると人間は一部だという表現です。

関連名

今回の例での関連性は明確ですがわかりづらい関係性の場合はどのような関係か明記しておいたほうがいいでしょう。そのような場合は下記の表現を使います。

これで住む側と住まわれる側という関係と方向性が一目でわかります。

その他の表現

汎化

クラスの継承関係を表します。継承元から継承先に 矢印を向けます。継承するのだから継承元から先だと思いがちですが、継承元は誰に継承されるかは知る必要はないためこのような向きになっています。

コンポジション

集約よりも強い集約関係を表します。一部がないと全体側が成り立たない、全体が無くなれば一部も一緒に無くなる関係です。

上記の例ではエンジンがないと自動車は成り立たないため強い集約関係があるといえます。

依存

あるクラスが他のクラス要素を参照する関係を表します。依存先から依存元へ点線の矢印で表現します。依存関係とは別名、使用関係ともいいます。依存は基準が曖昧なので注意が必要です。一般的には関連よりも関係性が薄く、一時的に依存先を利用する場合、依存元が変更された際に依存先も変更する必要がある場合に使用します。依存関係という関連性が強そうな名前ですが、他の関係性よりも関係が薄い場合が多いです。

実現

Javaでいうinterfaceの実装関係を表現します。点線で結び具象クラスからinterface側に矢印を向けます。

アクセス修飾子

クラスの可視性も表現可能です。

可視性意味
+ or 〇public:すべてにおいて参照可能
- or □private:自クラスでのみ参照可能
# or ◇protected:自クラス及びその派生クラスにおいて参照可能
~ or △package:同パッケージ内で参照

abstractとstatic

静的または抽象的なメソッドやフィールドも表現できます。下線が静的、斜体が抽象的を表します。

クラス図を作成するツール

今回は「Visual Studio Code」というテキストエディタの拡張機能の「PlantUML」を使って作成しました。例を下記に示します。

この図を表現するためのコードは下記です。

    @startuml 人間
    class 人間{
    ~名前
    -身長
    -体重
    食べる()
    寝る()
    }
    class 家{
    -住所
    +色
    ~材質
    }
    人間 "0..*"--"1..*" 家 :関連
    @enduml
classにクラス名、属性名に可視性記号をつけるとそれに対応した可視性記号を付けてくれます。操作は操作名に()をつけることで自動的に操作区分の場所に表記してくれます。関連性はクラスの外にそれぞれのクラスの関係性を表記します。staticやabstractはメソッドやフィールド名の前にそのまま{static}、{abstract}をつければ、下線、斜体の表現になります。PlantUMLという拡張機能はSublim TextやAtomといったエディターやIntellij、EclipseといったIDEにも存在するので自身の使い慣れたツールで一度探してみると良いでしょう。

最後に

UMLのクラス図の書き方を紹介しました。もちろん現場では複雑な関連性を表現していかなければなりません。これには慣れていくしかないので実践でどんどん作成していきましょう。