クラス図とは何ですか?

ソフトウェア工学において、統一モデリング言語(UML)クラス図は静的構造図システムの構造を、そのクラス、属性、操作(またはメソッド)、およびオブジェクト間の関係を示すことによって記述するものである。

Class diagram in UML diagram hierarchy

クラス図の目的

  1. システム内の分類子の静的構造を表示する
  2. 他のUML構造図の基礎となる表記法を提供する
  3. 開発者や他のチームメンバーにとって非常に有用である
  4. ビジネスアナリストは、ビジネスの視点からシステムをモデル化するためにクラス図を使用できる

UMLクラス図は以下の要素で構成される:

  • クラスの集合
  • クラス間の関係の集合

クラスとは何か?

類似した役割を持つオブジェクトのグループの説明で、以下のものを含む:

  • 構造的特徴(属性):クラスのオブジェクトが「知っていること」を定義する
    • オブジェクトの状態を表す
    • クラスの構造または静的特性を記述する
  • 行動的特徴(操作):クラスのオブジェクトが「できること」を定義する
    • オブジェクトの相互作用を定義する
    • クラスの行動または動的特性を記述する

クラス表記

クラス表記は以下の3つの部分で構成される:

  1. クラス名
    • クラス名は最初のコンパートメントに表示される。
  2. クラス属性
    • 属性は2番目のコンパートメントに表示される。
    • 型はコロンの後に表示されます。
    • 属性はコード内のメンバ変数(データメンバ)に対応します。
  3. クラスの操作(メソッド)
    • 操作は第3のコンパートメントに表示されます。これらはクラスが提供するサービスを表します。
    • 戻り値の型はメソッドシグネチャの末尾にあるコロンの後に表示されます。
    • パラメータの型は、パラメータ名の後にコロンが続く形で表示されます。
    • 操作はコード内のクラスメソッドに対応します。

Simple class

クラスの図式表現MyClass上に示すように:

  • MyClassには3つの属性と3つの操作があります
  • op2のパラメータp3は型intです
  • op2はfloatを返します
  • op3はClass6へのポインタ(アスタリスク*で示される)を返します

クラスの関係

クラスは他のクラスとの1つ以上の関係に参加する可能性があります。関係の種類には以下のものがあります:(図式表現については右側の図を参照してください)。

関係の種類
継承(または一般化):

  • 「は-a」関係を表します。
  • 抽象クラス名は斜体で表示されます。
  • SubClass1とSubClass2はSuperClassの特殊化です。
  • サブクラスからスーパークラスを向く、開放された矢印頭を備えた実線。
Inheritance
単純な関連:

  • 2つの同等のクラス間の構造的リンク。
  • Class1とClass2の間に関連があります。
  • 2つのクラスをつなぐ実線。
Simple association
集約:

  • 「部分-全体」関係を表す特殊な関連の一種です。
  • Class2はClass1の一部です。
  • Class2の複数のインスタンス(アスタリスク*で示す)がClass1に関連付けられることがあります。
  • Class1とClass2のオブジェクトは独立したライフサイクルを持ちます。
  • 複合クラスの端に空の菱形があります。
Aggregation
組成:

  • 全体が破棄されたときに部分も破棄される、集約の特殊な種類。
  • Class2のオブジェクトはClass1と共に存在し、同時に消滅します。
  • Class2は独立して存在できません。
  • 複合クラスの端に実線の菱形があります。
Composition
依存関係:

  • 一方のクラスの定義の変更が他方のクラスに影響を与える可能性がある場合(逆は成り立たない)に、二つのクラスの間に存在する。
  • Class1はClass2に依存しています。
  • 破線で矢印の先が開いている。
Dependency

関係名

  • 関係名は関連線の中央に書かれます。
  • 良い関係名は読み上げたときに意味を持つべきです:
      • 「各スプレッドシート は含む いくつかのセル」

    <li>式 は評価され 値に」

  • 多くの場合、読み取り方向を示す小さな矢印があります例えば、式は値に評価されるが、値は式に評価されない。

Relationship name

関係 – 役割

  • 役割は関連における方向の目的を定義する。
  • 役割は関連線の端に記述され、クラスがその関係において果たす役割を説明する。
    • 例として、CellはExpressionに関連している。この関係の性質は、Expressionがセルのであるということである。

クラスメンバーの可視性

オブジェクト指向設計では、属性および操作の可視性が表現される。UMLは4種類の可視性を定義している:公開, 保護, 非公開、およびパッケージ.

属性および操作名の前に記載される記号 +、-、#、~は可視性を示す:

  • + は公開属性または操作を示す
  • – は非公開属性または操作を示す
  • # は保護属性または操作を示す
  • ~ はパッケージ属性または操作を示す

クラスの可視性の例

Simple class

上記の例では:

  • attribute1 および MyClassName の op1 はパブリックです
  • attribute3 および op3 はプロテクトされています
  • attribute2 および op2 はプライベートです

異なるクラスメンバのアクセス権限は以下の通りです:

アクセスレベル パブリック (+) プライベート (-) プロテクト (#) パッケージ (~)
同じクラスのメンバ はい はい はい はい
派生クラスのメンバ はい いいえ はい はい
他の任意のクラスのメンバ はい いいえ いいえ 同じパッケージのみ

多重度

多重度は、クラスのオブジェクトが関係に参加する数を示します。次のように表現できます:

  • 正確に1 – 1
  • 0または1 – 0..1
  • 多数 – 0..* または *
  • 1つ以上 – 1..*
  • 正確な数 – 例:3..4 または 6
  • 複雑な関係 – 例:0..1、3..4、6* は 2 または 5 を除く任意の数を意味する

多重度の例

  • 要件:学生は複数の授業に登録できるし、1つの授業に複数の学生が登録できる。
  • 以下の例では、クラス図(左)は上記の要件の静的モデルを記述しており、オブジェクト図(右)はソフトウェア工学およびデータベース管理の授業に関するコース登録(クラス図のインスタンス)のスナップショットを示している。

Object diagram

集約の例 – コンピュータと部品

  • 集約は、「包含」の階層を表す関連の特殊なケースである。
  • 集約が親クラスであり、コンポーネントが子クラスである。

Aggregation example

継承の例 – 細胞の分類

  • 継承は、「種類」の階層を表す関連のもう一つの特殊なケースである。
  • 継承は分類体系を導入することで、分析モデルを簡略化する。
  • サブクラスはスーパークラスの属性と操作を継承する。

Inheritance example

クラス図 – 図表ツールの例

クラス図には、クラスや関係に付随するノートを含めることができる。ノートは灰色で表示される。

Class diagram example

上記の例から、図を次のように解釈できる:

  1. Shapeは抽象クラスである。斜体で表示されている。
  2. Shapeはスーパークラスである。Circle、Rectangle、PolygonはShapeから継承する。言い換えれば、CircleはShapeである。これは一般化/継承関係である。
  3. DialogBoxとDataControllerの間に関連がある。
  4. ShapeはWindowの一部である。これは集約関係である。ShapeはWindowなしでも存在できる。
  5. PointはCircleの一部である。これは構成関係である。PointはCircleなしでは存在できない。
  6. WindowはEventに依存する。しかし、EventはWindowに依存しない。
  7. Circleの属性は半径と中心である。これは具象クラスである。
  8. Circleのメソッドはarea()、circum()、setCenter()、setRadius()である。
  9. Circleのパラメータradiusはfloat型である。
  10. Circleのメソッドarea()はdouble型の値を返す。
  11. Rectangleの属性とメソッドは隠されている。図内の他のいくつかのクラスも属性とメソッドを隠している。

複雑なシステムの扱い – 複数のクラス図か単一のクラス図か?

大きなシステムや大きなビジネス領域をモデル化する際には、多くのエンティティを考慮しなければならない。複数のクラス図を使うべきか、それとも単一のクラス図を使うべきか?答えは:

  • 1つの図にすべてのエンティティとその関係をモデル化するよりも、複数のクラス図を使用するほうが良い。
  • システムを複数のクラス図に分割することで、理解が容易になる。特に、各図がシステムの特定の部分を視覚的に表現している場合にそうである。

ソフトウェア開発ライフサイクルにおけるクラス図の視点

クラス図は、ソフトウェア開発ライフサイクル(SDLC)の異なる段階で使用でき、通常、3つの異なる詳細度(視点)が段階的にモデル化される。

概念的視点:図は現実世界の事物を記述していると解釈される。したがって、概念的視点から始めると、研究対象の領域における概念を表す図を描くことになる。これらの概念は、それらを実装するクラスと自然に関連している。この視点は言語に依存しないと見なされる.
仕様の視点:図は、特定の実装に拘泥せずに、仕様やインターフェースを持つソフトウェアの抽象やコンポーネントを記述していると解釈される。したがって、仕様の視点からアプローチすると、実装ではなく、ソフトウェアインターフェースを研究している.
実装の視点:図は、特定の技術と言語によるソフトウェアの実装を記述していると解釈される。したがって、実装の視点からアプローチすると、ソフトウェアの実装を研究している.

今すぐUMLクラス図を描いてみましょう

クラス図とは何か、そしてどのように描くかを学びました。今こそ自分自身で描いてみる時です。無料のUMLツールであるVisual Paradigm Community Editionを入手し、無料のクラス図ツールを使ってクラス図を作成しましょう。使いやすく、直感的です。
無料でダウンロード

 

コメントを残す