UML クラス図:完全ガイド
UMLクラス図の説明
住宅やビルを建設する際、建築家やエンジニアは工事を開始する前に、建設のあらゆる側面を視覚化するために設計図を作成します。UML(Unified Modeling Language)クラス図は、設計図と同じ役割を果たしますが、ソフトウェア開発のためのものです。
設計図なしに家を建てないのと同じように、開始時や更新時にUMLダイアグラムなしにシステムを構築するのは良い考えとは言えません。UML クラス図は、開発のさまざまな側面を視覚化する一連の UML 図の一部です。
このガイドブックは、UML クラス図のチートシートとお考えください。概念設計にUML クラス図を使用するメリット、UML クラス図の仕組み、UML クラス図の作成方法について説明します。
UMLのクラス図とは何ですか?
クラス図は、UML 構造図のいくつかの種類のうちの 1 つです。構造図は、オブジェクトが時間とともにどのように変化するかを示すのではなく、システムの静的な構造を示します。
クラス図は、システムのクラスとクラス間の関係を視覚化します。
オブジェクト指向設計では、クラスはオブジェクトを作成し、操作します。オブジェクトはクラスのインスタンスです。つまり、クラスはシステムの重要な上位要素なのです。これらは設計中に導き出され、設計や設計変更に関するコミュニケーションに使用されます。
クラス図では、クラス名はオブジェクト名と同じです。なぜなら、クラスの目的は、システム内の各オブジェクト・インスタンスの属性と操作を定義することだからです。クラスはオブジェクトの設計図であり、クラス図はシステムの静的な設計図です。
ソフトウェア開発では、UML のクラス図は単独では存在しません。これらはユースケース図に依存し、オブジェクト図やコミュニケーション図と密接に結びついています。すべての UML 図は、実装前、実装中、実装後のシステムの動作をモデル化し、概念化し、文書化します。
UMLのクラスとは何ですか?
クラスは、その属性や振る舞いを含め、表すオブジェクトの特性を定義するモデリング要素です。
例としてクラス「Car」を使ってみましょう。Car」には、ブランド、モデル、年式、色などの静的属性があります。Car'クラスには、加速、減速、停止、発進などのメソッド(車ができること)もあります。オブジェクトはクラスのインスタンスです:スバル、フォレスター、2023年、ダークグリーン。この例では、この車の属性は、メーカー、モデル、年式、色です。
UMLクラス図の目的は何ですか?
UML クラス図には、オブジェクト指向システムの静的モデルとして主に 2 つの目的があります:
システムのクラスとそのプロパティを可視化します。
クラス間の関係を示し、分析すること。
これらの他に、UML クラス図は、システムのハードウェアとソフトウェアの側面を示すコンポーネント図や配置図の基礎にもなります。
UML クラス図の利点
UML クラス図は、ソフトウェア・アーキテクチャを構築するための実用的なモデリング・ツールです。他のUML 図とともに、開発者と利害関係者はシステムのさまざまなビューを視覚化します。これらの図は、システムがどのように機能し、どのように動作し、どのように部品が関連しているかを理解するのに役立ちます。
設計時にクラス図を作成することで、クラス、その属性、メソッドを明確に示すことができ、開発プロセスが容易になります。また、各クラスが互いにどのように関連しているかも示しています。コードが書かれる前にシステムの概念的なビルドを見ることは、開発者同士や他の利害関係者とのコミュニケーションに役立ちます。
クラス図は、アプリケーション全体の概略を示すことで、システムの変更もサポートします。UML クラス図に変更や追加を適用すると、新しいクラスがプレビューされ、その変更が既存のクラスにどのような影響を与え るかがわかります。
UML クラス図の主な構成要素
UML クラス図には、クラスとその相互作用が含まれます。各クラスは長方形で表示され、上から順にクラス名、属性、メソッドが表示されます。クラス名のみが必要です。必要な詳細レベルによって、属性とメソッドを表示するかどうかが決まります。
UML クラス図の相互作用では、クラス間の関係を線と矢印で表します。矢印は、関係の種類を区別するための特定の意味を持っています。このような関係には、継承のほか、双方向関係や単方向関係があります。クラスは、密接に関連するクラスのパッケージにグループ化することができます。
UML クラス図の記法
UML クラス図の基本的な表記法には、クラス・メンバーのラベル、その可視性(誰がアクセスできるか)、最終的なパッケー ジなどがあります。UML クラス・モデルを作成する際には、Web アプリ公認のフォント Open Sans を使用してください。一般に、UML クラス図は、キャメルケース(2 番目以降の単語を大文字にし、単語間にスペースを入れない)などのスタイル規則に従います。
クラス
クラス名は、オブジェクト名またはエンティティ名を反映します。クラス名は一番上のセクションの中央に、太字で大文字で書きます。モデルでは、クラス名のセクションはクラスの中で唯一の必須セクションです。他の2つは、ダイアグラムの目的や見方に応じて、任意で選択できます。
属性
モデルの真ん中のセクションには、クラスの静的な特性を記述する属性が含まれています。ATMの操作を視覚化するためにクラス図を作成するとします。DebitCard クラスの属性は、カード番号と所有者です。
メソッド(操作と動作)
クラスモデルの3番目のセクションは、クラスが "何をするか "です。オブジェクトのインスタンスができるアクションは何ですか?DebitCardクラスでは、アクセス権を与えるような操作になります。
可視性
プラス記号とマイナス記号は、クラスの属性や操作がパブリック(システム内のどこからでも見える)かプライベート(クラス内でのみ見える)かを表します。ハッシュタグ(ポンド記号)は、保護された可視性を示します。
パッケージ
クラスのグループや他のパッケージのグループは、ラベルの付いたボックスとして視覚化されます。パッケージ名はラベルに記載され、大文字で表記されます。パッケージを使用する場合、クラスは常に3つのセクションを表示する必要はありません。
UML クラス図の関係表記
UML クラス図のモデルは、線、テキスト表記、および多重度の数字を使用して視覚的に接続されます。次の一覧では、システムの UML クラス図を作成するために必要な、基本的な関係の表記法を説明します。
リレーションシップの表記は、リアライゼーションを除き、すべて行の横とクラスの横に名前が書かれています。読みやすい図にするために、すべての文字の大きさのバランスをとり、行を整然と並べましょう。
協会
アソシエーションは、2 つのクラスを論理的に接続するもので、最もよく使われるリレーションシップ表記法で、直線のように見えます。アソシエーションは本質的にバイラテラルなものです。つまり、関連付けられたクラスは両方とも、もう一方のクラスの存在を知っているということです。一方的な関連付けの場合は、三角形の継承や実現の矢印とは異なる、プレーンな矢尻になります。
N-ary は、2 つ以上のクラス・モデルを接続する関連を決定します。バイナリーの次のN-aryアソシエーションは3-aryアソシエーションです。これらの表記は、接続点で空の菱形で結ばれた線です。
集合と構成
アグリゲーションとコンポジションは、アソシエーション関係のサブセットです。
集約関係は、親クラスの横にある直線と中空のひし形を使用してクラスを接続します。集約では、子クラスは親クラスから独立して存在します。親クラスが削除されても、子クラスは存在し続けます。
作曲はその逆です。2つのクラスが、直線と塗りつぶされた菱形を使ったコンポジション表記でつながっている場合、それらは独立して存在しているわけではありません。親クラスが削除されると、子クラスも削除されます。
反射的連想
再帰的関連は、クラス図で使用できる唯一の一方的関連です。クラスモデルと一緒にループする直線で構成されています。その目的は、あるクラスのインスタンスと同じクラスの別のインスタンスとの関係を視覚化することです。
継承と汎化
継承または汎化表記は、プロパティを継承するクラス間の関係を可視化します。継承関係は、直線と独立クラスを指す中空の三角形図形で視覚化されます。
依存
依存関係の表記は、関係の方向を示す千鳥線と単純な矢印で視覚化されます。継承表記と同様に、矢印は依存クラスからそのスーパークラスを指します。スーパークラスで起こった変更は、サブクラスでも起こります。
実現
実現関係は、他のクラスによって定義された振る舞いを実現または実装するクラスを接続します。この関係のモデルは、サプライヤー要素とクライアント要素、またはスーパークラスとサブクラスと呼ばれます。サプライヤーはソースであり、クライアントは仕様要素です。実現表記は千鳥線と中空の三角形図形で視覚化。
多重性
多重度表記は、関係線とクラスモデルの交点に配置された数字の集合です。インスタンスの多重度は、オブジェクトのいくつのインスタンスがリレーションシップに参加するかを定義します。数字は、あるクラスのインスタンスが別のクラスのインスタンスにリンクしている数を示します。このように表記されます:
0~1 = ゼロまたは1
1 = 1つだけ
0...=ゼロ以上
1...* = 1つ以上
3 = 3人のみ
0~5 = ゼロから5まで
5..15 = 5から15まで
UML クラス図の作成
さて、いよいよ自分のUML クラス図を作成しましょう。もちろん、いつでもゼロから図を描くことができます。UML 図の作成が初めてであれば、モデルの図形や表記法のオプションがすべて用意されたテンプレートを使用するのが最善の方法です。MiroにはUMLクラス図のテンプレートがあり、作成する必要のあるUMLクラス図のベースとして機能します。
Miro または他のダイアグラム・ツールを使用して、このステップ・バイ・ステップのチュートリアルに従ってカスタム・クラス図を作成し、システムを視覚的に概念化してモデル化します。
クラスの定義
これらのオブジェクト/クラスを定義するには、システムのユースケース・シナリオを書き、文から名詞を抽出します。ATMにデビットカードを挿入し、現金を引き出します。太字の名詞は目的語であり、したがってクラスでもあります。
各クラスに3つのパートからなるモデルを作成し、一番上のセクションに名前を追加します。Miroでは、左側のダイアグラムタブから、事前に作成されたクラス図形にアクセスできます。モデルを作りますが、すべてのクラスが揃うまでは、まだ何も接続しないでください。
クラス属性の記述
各クラス・モデルの2番目の区画に、属性を追加します。ATMクラス・モデルの属性は、場所、機械ID、管理する銀行です。ここまでで、属性リストを持つATMクラスは次のようになります:
ATM
+位置 : 住所
+machineId : integer
+managedBy :文字列
クラスメソッド(操作)の追加
3つ目の区画には、各クラスの操作を属性と同じようにリストに追加します。ATMクラスでは、カードを読み取り、トランザクションを識別し、ピンを要求するという操作が考えられます。これでクラスモデルは次のようになります:
ATM
+位置 : 住所
+machineId : integer
+managedBy :文字列
+カード
+identifiesTransaction
#asksForPin
関係性と多重性を視覚化
クラスモデルをMiroボードに並べ、関連付け、関係を視覚化します。オブジェクトパネルから必要な線の種類を選択し、関係に従って線のスタイルと線の終端を選択します。
オブジェクトメニューの+Tボタンをクリックして、線に沿って役割と倍数の数字を追加します。位置や大きさは適宜調整してください。
生かす
UML クラス図は、定型化されたマップではありません。UML クラス図は、開始時点から実装時点、そしてそれ以降に至るまで、システムを視覚化するのに役立つ生きた仕組みです。MiroでUMLのクラス図を作成すると、システムのコードを変更する前に、いつでもそのUMLのクラス図に戻って、変更点を修正することができます。