デジタルトレンドナビ
システム開発

2023.10.16

クラス図とは?作成するメリットと書き方も解説

クラス図

予約や顧客管理など、ビジネスにおけるシステム開発をするときは、文字や口頭のみで概要を伝えるよりも、システムの属性や関係性を可視化して表現する方が伝わりやすいです。


そこで用いられるのが、統一モデリング言語のUML(Unified Modeling Language)で、システム開発の設計図を記すときの共通規格として使用されます。

そのなかでもクラス図は、基本的なプログラミングの際の設計図として作成され、システム開発における設計を視覚的に捉え、複数の人が共有できることが特徴です。

この記事でわかること

  • クラス図とはなにか
  • クラス図をつくるメリット
  • 書き方とポイント

クラス図とは

クラス図とは

クラス図とはUMLを用いて、開発内容の構造や関係性などを図で示した設計書のようなものです。決められた記述ルールに則って記すため、開発内容が理解しやすいことや、視覚的に開発内容が理解しやすいことが特徴です。

主に、上段・中段・下段の3つのセクションとなっており、順にクラス名・属性・操作を記入します。階層に分けて記述しその構造や、それぞれの関係性が明確に把握できるので、認識のすり合わせなどにも役立つものです。


クラス図を作成するメリット

クラス図を作成するメリット

クラス図はコーディングの前につくることで、開発内容を整理し、可視化することができます。顧客と開発会社の間での理解・認識のずれを予防するなど、さまざまなメリットがあります。どのようなメリットがあるか、具体的に見ていきましょう。

構造を可視化することで理解や共有がしやすくなる

決められたルールに基づき作るため、視覚的に情報を簡潔に整理できることがメリットです。文字や口頭で伝えるよりも明確に情報共有することができ、開発の目的や、開発時のポイントなどもそれぞれ細かく説明できます。

コードや専門用語を使わずに、プロジェクトの概要を把握できることも、魅力といえるでしょう。

関係者にシステムの全体像を説明して認識のずれを防げる

顧客と開発会社との間で、プロジェクトへの理解度や知識に差がある場合でも、クラス図を参照しながら全体像を説明できる点もメリットです。同じ図を見てやりとりすれば、自然と質問も多くなるなど、円滑なコミュニケーションも期待できます。

複雑になりやすい説明を視覚的にシンプルに表現できるため、全体的な理解が深まり、操作性や機能などの把握も進みます。その結果、お互いの理解のずれを防ぎ、開発のゴールに近づけるでしょう。

クラス図の書き方

クラス図の書き方

クラス図は決められたルールに従い書きますが、具体的にはどのような手順なのでしょうか。ここでは、クラス図を構成する主な要素を詳しく解説していきます。

クラス名

クラス図は、主に3つのセクションで構成されていて、そのなかのひとつがクラス名です。図をつくるうえで必須であり、オブジェクトやプロジェクトを対象としてつくります。

図の上段にクラス名を記述し、中段には属性、下段には操作を記入するのがベースであり、属性や操作を含めてひとつのクラスとなります。

属性

属性はクラス図の2つめのセクションで、具体的な性質を表現します。たとえば、宿泊施設での顧客管理システムなら「宿泊客」などというクラス名となり、属性には顧客名や宿泊日、連絡先などの顧客の情報が入ります。

ただ、どの要素を実装するかは開発する内容により異なるので、顧客と詳しい打ち合わせや認識の確認が必要になるでしょう。

属性名の右側には文字列や数値などの型を記載します。属性が名前の場合は文字列、電話番号や顧客番号なら数値が入ります。

操作

3つ目のセクションには操作を記載し、そのクラスで実行できる内容を記述します。たとえば、企業の勤怠管理システムなら、出社時間と退社時間の操作が挙げられます。具体的にどんな操作ができるかを記述するため、操作の内容は多岐にわたります。

操作の最後には、操作プログラムを終了するための「戻り値」の設定も必要です。操作名(引数:引数の型):戻り値として記述されます。操作はリスト形式で記述され、各行にひとつの操作を記述します。

可視性

可視性とは、クラス図のなかの特定の属性や操作について、ほかのどのクラスから影響を受けるかを明確に指定することを指します。

たとえば、勤怠管理システムの場合、従業員単位でのみ勤怠状況を確認できるのか、あるいは部署単位でも状況を把握できるのかなど、管理する単位に違いを付けるといったことが挙げられます。

可視性は、以下の4種類の記号を用いて表します。

  • 「+」全クラスからアクセス可能(public)
  • 「-」自分のクラス限定でアクセス可能(private)
  • 「#」自クラスと親子関係・継承されているクラス限定でアクセス可能(protected)
  • 「~」同一パッケージ内のみアクセス可能(package)

これらの記号を属性や操作の左側に記述し、各種可視性を表現します。

線形

ここまではひとつのクラスについて解説してきましたが、それとは別に、クラス同士の関係性を記述することもできます。

それぞれの関わり方を表現する方法には、主に「線形」と「多重度」があり、どのクラスがどこと影響しあうか、どれほどの意味合いかを把握できることが特徴です。クラス図を把握するうえで大切な部分でもあるので、それぞれチェックしていきましょう。

関連

関連性が強いクラス間を線で結び、それぞれにどんな間柄なのかを記述することを「関連」といいます。

たとえば、宿泊施設と従業員の間には雇用関係があり、従業員が所属する部署があります。この場合だと、宿泊施設と部署の間には「所属」という関わりがあることを表現できます。

誘導可能性

2つのクラス間でいずれか一方通行の場合に、その方向性を示すのが誘導可能性です。多くの企業の場合は「社員」から「企業」へのアクセス(操作)は不可であり「企業」から「社員」へのアクセスは可能ということがあります。

こうした場合は「社員」から「企業」に向けて線を引き、そのうえにバツ印をつけておきます。「企業」からは「社員」に線を引き、先端に矢印を記載することでそれぞれの関係性を示すことができます。

一見するとややこしく感じられますが、各所の関わり方をはっきり把握できる部分といえるでしょう。

集約

関連するクラス間で、全体と一部分を示す線形です。線を引くときは、全体となるクラス側の先端にひし形「◇」を記述して示します。

コンポジション

全体とその一部という関係のなかでも、集約より強い結びつきにある場合に使用します。たとえば、企業を形成する一部署ではあるものの、その部署がなければ経営が成り立たないとか、企業活動ができないといったようなポジションの場合に使われる線形です。

また、一部のクラスに対して、全体側のクラスが自由に削除や生成ができる場合にも用いられます。記述するときは、それぞれの間に線を引き、全体側のクラスの先端に黒ひし形「◆」をつけます。

汎化

プログラミングのうえで継承を示すものです。詳しくは、具体的な性質を持つ複数の小クラスBに共通する性質や機能をまとめ、抽象的な親クラスAを表すことを汎化といいます。

会社でたとえるなら、営業社員や技術社員は小クラスB、社員は親クラスAと表せます。線を引くときは小クラスBから親クラスAに矢印を向けて先端には白三角「△」をつけて示します。また、親クラスAから小クラスBに具体化する場合は「特化」と呼びます。

依存

クラス同士の間で依存があるときに使用するもので、両者が一時的に依存する状態を示します。クラスAがクラスBに依存していて、影響を受けるという状態です。

具体的には「タイヤ」クラスが「ホイール」クラスに依存しているとすると、ホイールに変更が生じた際にはタイヤも変えなければならない、といったイメージになります。

図にするときは両者を点線で結び、依存先(Bもしくはホイール)から依存元(Aもしくはタイヤ)に向けて矢印を記述します。

実現

実現は汎化や特化と少し似ており、抽象的なクラスAの振る舞いを具体的に実装したクラスBという意味があります。インターフェースとサブクラスという言い方もできます。

インターフェースとは、クラスが実現する際に必要な共通する操作のみを定義したもので、基本的にはインターフェースに処理を記さず、サブクラス(B)に記して実現します。

図にするときは該当する箇所を点線で結び、サブクラス(B)からインターフェースに向けて白三角「△」をつけます。

多重度

プログラムでは、メインのクラスAからいくつものサブクラスBへと影響することが多いですが、サブクラスBのひとつのオブジェクトとしか関係しないケースが多々あります。これを多重度と呼びます。

「企業」と「社員」でたとえると、会社はひとつしかなくとも従業員は複数いると想定できます。図にするときは、従業員クラスの横に「1..*」と記述し会社クラスの横に「1」と記載して表現します。

クラス図を書く際のポイント

クラス図を書く際のポイント

クラス図は、いくつかのポイントを押さえて作ることが必要です。とくに位置関係は見た目で把握しやすいので、重要な意味を持ちます。ここでは、クラス図を書くときの主なポイントを解説していきます。

クラスをグルーピングする

はじめに、機能や関係性を考えてクラスをグルーピングします。関連するクラスを集めて、四角で囲うなどして名前をつけ、区別できるようにしておきましょう。グループにしてわけておくことで、線形が複雑になるのを抑えることができます。

クラス図は、専門性の有無に関わらず目で見て分かりやすいことが重要なので、クラスの洗い出しをするときから整理することが大切です。あまり細かく分類せずに、シンプルに分けることもおすすめポイントです。

ストーリー性を意識する

クラス図は、時系列やストーリー性を意識してつくることも大切なポイントです。文章には起承転結があるように、上から下、左上から右下などのように、流れが見えるよう書いてみましょう。読み手が、自然な流れで目で追えることも大切な部分です。

線を引くときも、あまり交差させないよう工夫することや、メインのクラスや上部に記載してサブクラスは下部に記載するなど、一定の規則性を持たせて書くよう意識してみましょう。

システム開発に欠かせない重要プロセスに、要件定義があります。こちらの記事では、要件定義を作成する流れや必要なスキルを解説しています。あわせてお役立てください。


クラス図はシステム開発に欠かせない

クラス図はシステム開発に欠かせない

クラス図は、見た目の分かりやすさから簡単に書けそうですが、意外とルールが多く、それぞれのルールの意味を理解しておかないと把握するのに時間がかかります。

UMLには多くの手法がありますが、クラス図はシステム開発の現場で欠かせないものであり、基本的かつ専門性の有無に関わらず使用されています。そのため、まずはクラス図への理解を深めることをおすすめします。


もしも、クラス図の作成や見方に自信がない場合は、システム開発実績が豊富な株式会社テクノデジタルにご相談ください。

弊社では、お客様のビジネスやユーザーのニーズを考えた開発実績が豊富にあり、長年培ってきたシステム資産から、お客様に最適なご提案をいたします。また、システム開発のみならずリリース後の運用や保守、事業支援なども行い、ビジネスの加速を支援します。


投稿者

  • デジタルトレンドナビ編集部

    システム開発、Webサイト制作、ECサイトの構築・運用、デジタルトランスフォーメーション(DX)など、デジタルビジネスに関わる多岐の領域において、最新のトレンド情報や実践的なノウハウを発信してまいります。