ソフトウェア プロジェクト管理 [UML クラス図]

序文

UML 図には多くの種類がありますが、システム分析と設計作業を完了するためにすべての UML 図をマスターする必要はありません。一般に、UML 図では、クラス図、ユースケース図、シーケンス図の使い方をマスターしていれば、ほとんどの作業を完了できますつまり、UML の 20% をマスターすれば、80% のことはできるようになります。プログラマにとって、最も頻繁に使用されるのはクラス図です

目次

序文

1. クラス図とは何ですか?

2. クラス図におけるクラスの表現

3. クラス図における具象クラス、抽象化、インターフェイス、およびパッケージの表現

UML クラス図で具象クラスを表現する

UML クラス図での抽象クラスの表現

UML クラス図でのインターフェイスの表現

UML クラス図でのパッケージの表現

4. クラス図における関係の表現

関係を実現する

一般化関係

接続関係

依存関係

集約関係

組み合わせ関係

Java開発における集約と合成の違い


 1. クラス図とは何ですか?

クラス図は、オブジェクト指向システム モデリングで最も一般的に使用される重要な図であり、他の図を定義するための基礎となります。クラス図は主に、システム内のクラス、インターフェイス、静的構造とそれらの間の関係を表示するために使用される静的モデルです。クラス図の最も基本的な要素はクラスとインターフェイスです。ソフトウェア設計者がクラス図を設計した後、プログラマはコードを使用してクラス図に含まれるコンテンツを実装できます。

2. クラス図におけるクラス表現

クラスアイコンは3 つの部分で構成されます。最初の部分はクラス名、2 番目の部分は属性、3 番目の部分は操作です。

  • 「+」は;を意味します public
  • 「-」は ; を意味します private
  • 「#」は protected;を意味します。
  • 記号なしで表現 default

クラス名は、その名前空間内で一意です。クラス名は大文字で始まり、複数の単語の間のスペースは省略されます。

プロパティと操作は、クラスのスコープ内で明確でなければなりません。属性と操作は小文字後続の単語の最初の文字は大文字になり、スペースも省略されます。

  • プロパティ指定形式:

可視性プロパティ名: type[multiplicity] = default{プロパティ文字列}

  • 動作仕様書形式:

可視化操作名(パラメータ名:型):戻り値 {プロパティ文字列}

3. クラス図における具象クラス、抽象化、インターフェイス、およびパッケージの表現

UML クラス図で具象クラスを表現する

クラス図では、特定のクラスは長方形のボックスで表されます。この長方形のボックスは 3 つの層に分かれており、最初の層はクラス名です。第 2 レベルはクラスのメンバー変数、第 3 レベルはクラスのメソッドです。メソッドの前のメンバー変数とアクセス修飾子はシンボルで表されます。

UML クラス図での抽象クラスの表現

UML クラス図では抽象クラスも長方形のボックスで表されますが、抽象クラスのクラス名と抽象メソッド名は斜体で表されます。

UML クラス図でのインターフェイスの表現

クラス図でもインターフェイスは長方形のボックスで表されますが、クラスの表現と異なるのは、インターフェイスがクラス図の最初の層の最上位にあるコンストラクター <<interface>> によって表されることです。以下はインターフェースの名前で、2 番目の層はメソッドです。

さらに、一般にロリポップ表現として知られるインターフェースの別の表現があり、これはクラスの上にロリポップ (円 + 実線) が表示されます。円の横にはインターフェイス名があり、インターフェイス メソッドは実装クラスに表示されます。

UML クラス図でのパッケージの表現

クラスとインターフェイスは通常、パッケージ内に表示されます。UML クラス図でのパッケージの表現

 

4. クラス図における関係の表現

クラス、クラスとインターフェイス、およびインターフェイスの間には特定の関係があり、通常、UML クラス図にはそれらの間の関係を示す接続があります。関係には、実装関係、汎化関係、関連関係、依存関係、集約関係、組み合わせ関係の 6 種類があります。

関係を実現する

実装関係とは、インターフェイスとその実装クラスの間の関係を指します。UML クラス図では、実装関係は、実装クラスからインターフェイスを指す中空の三角形と点線で構成される矢印で表されます。Java コードでは、実装関係をキーワードに直接変換できます。 implements

一般化関係

一般化とは、オブジェクト間の継承関係を指します。オブジェクト A とオブジェクト B の間に「is a」関係が確立されている場合、オブジェクト A とオブジェクト B の間には継承関係があり、オブジェクト B が親オブジェクト、オブジェクト A が子オブジェクトになります。たとえば、年収従業員が従業員である場合、年収従業員 Salary オブジェクトと従業員 Employee オブジェクトの間に継承関係があることは明らかです。Employee オブジェクトが親オブジェクトであり、Salary オブジェクトが子オブジェクトです。物体。

UML クラス図では、一般化関係は、子クラスから親クラスを指す白三角と実線で構成される矢印で表されます。Java コードでは、オブジェクト間の一般化された関係を直接キーワードに変換できます extends

接続関係

関連とはオブジェクト間の接続を指し、これにより、あるオブジェクトが別のオブジェクトのプロパティとメソッドを知ることができます。Java では、関連付けのコード表現は、1 つのオブジェクトに別のオブジェクトへの参照が含まれるというものです。つまり、オブジェクトのクラス コードに別のオブジェクトへの参照が含まれている場合、2 つのオブジェクトは関連付けられます。

一方向の関連付けと双方向の関連付けがあります。2 つのオブジェクトが他方のパブリック プロパティと操作を知っている (つまり、呼び出すことができる) 場合、2 つのオブジェクトには双方向の関連付けがあります。1 つのオブジェクトだけが別のオブジェクトのパブリック プロパティと操作を知っている (つまり、呼び出すことができる) 場合、それは一方向の関連付けになります。ほとんどの関連付けは一方向の関連付けであり、確立と維持が容易で、再利用可能なクラスを見つけるのに役立ちます。

2 つの関連性の間には自己相関関係もあります

UML 図では、双方向の関係は二重矢印付きの実線または矢印のない二重実線で表されます。一方向の関連付けは、関連付けられているオブジェクトを指す矢印が付いた実線で表されます。これがナビゲーション(Navigatity)です。

以下は、Employee が TimeCard に関連付けられていることを示しており、これは一方向の関連付けです。

オブジェクトは、他のオブジェクトの配列またはコレクションを保持できます。UML では、これは関連線の末尾に多重度式を配置することによって表されます。多重度の式には、数値、範囲、またはそれらの組み合わせを使用できます。多重度によって許可される式の例は次のとおりです。

  • 数値: 正確な数量
  • *または0..*: 0 以上を意味します
  • 0..1: 0 または 1 を表し、Java では null 参照で実装されることがよくあります。
  • 1..*:1~複数を表します

関連関係は、依存関係、集約関連、結合関連の 3 つのタイプに分類されます。

依存関係

依存関係は弱い関連関係です。オブジェクト A がオブジェクト B を使用しているが、B との関係がそれほど明らかではない場合、この関係は依存関係と見なすことができます。オブジェクト A がオブジェクト B に依存する場合、A は B を「使用」します。たとえば、ドライバーと車の関係ですが、ドライバーが車を使用するとき、両者の間には依存関係が生じます。

UML クラス図では、依存関係はユーザーから使用される側を指す点線の矢印で表され、ユーザー オブジェクトが使用されるオブジェクトへの参照を保持していることを示します。

Java での依存関係の具体的なコード表現は、 B がA のコンストラクターまたはメソッドのローカル変数メソッドまたはコンストラクターのパラメーター、メソッドの戻り値、またはA が B の静的メソッドを呼び出すことです。

以下では、コード リスト 1 とコード リスト 2 に示されている Java コードを使用して、オブジェクトとオブジェクト間の依存関係を示します。

代码清单1所示的B类定义了一个成员变量 field1,一个普通方法 method1() 和一个静态方法 method2()。

//代码清单1 B.java
public class B {
  public String field1;   //成员变量

  public void method1() {
    System.println("在类B的方法1中");
  }

  public static void method2() {                 //静态方法
    System.out.println("在类B的静态方法2中");
  }
}
代码清单2所示的A类依赖于B类,在A类中定义了四个方法,分别演示四种依赖形式。

/* 代码清单2 A.java
  A依赖于B
*/

public class A {
  public void method1() {
    //A依赖于B的第一种表现形式:B为A的局部变量
    B b = new B();
    b.method1();
  }

  public void method2() {
    //A依赖于B的第二种表现形式: 调用B的静态方法
    B.method2();
  }

  public void method3(B b)  {
    //A依赖于B的第三种表现形式:B作为A的方法参数
    String s = b.field1;
  }

  //A依赖于B的第四种表现形式:B作为A的方法的返回值
  public B method4() {
    return new B();
  }
}

集約関係

集約は関連関係の特殊なケースであり、全体と部分の間の所有権関係、つまり「ある」関係を反映します。このとき、全体と部品は分離可能であり、それぞれ独自のライフサイクルを持つことができます(車とタイヤと同じように、車が壊れてもタイヤも壊れるわけではありません。部品は複数の全体に属することができます。複数のオブジェクト全体で共有することもできるため、集約関係は共有関係と呼ばれることがよくあります。たとえば、会社の部門と従業員の関係では、従業員は複数の部門に所属することができ、1つの部門が撤退した場合、従業員は他の部門に異動することができます。

UML 図では、集約関係は白抜きのひし形と実線の矢印で表され、白抜きのひし形は側面全体にあり、矢印はパーツ側を指します。

組み合わせ関係

構成も関連性の特殊なケースであり、全体とその部分の間の包含関係、つまり「を含む」関係を具体化します。しかし現時点では、全体と部分は分離できず、部分を他の全体と共有することはできず、全体としてのオブジェクトが部分オブジェクトのライフサイクルに責任を負います。この関係は集約よりも強いため、強力な集約とも呼ばれます。A組み合わせる場合はB生成またはリリースに関与する可能性のあるライフタイムを知るか、何らかの方法で世代とリリースを知るA必要がありますBABAB

たとえば、人には頭、体幹、手足があり、そのライフサイクルは一定です。人は生まれるとき、頭、体幹、手足が同時に生まれます。人が死ぬと、人体の一部である頭、胴体、手足が同時に死にます。

UML図では組み合わせ関係を黒菱形と黒矢印で表しており、黒菱形が側面全体、矢印が部品側を指しています。

Java開発における集約と合成の違い

Java コードの形式では、集約および結合関係における部分オブジェクトは、オブジェクト全体のメンバー変数になります。しかし、実際のアプリケーション開発では、2 つのオブジェクト間の関係が集合なのか結合なのかを区別することが難しい場合があります。Java では、集約と合成をクラス コード自体から区別することはできません。区別する必要がある場合、オブジェクト全体を削除するときにオブジェクトの一部を削除する必要がある場合は結合関係、そうでない場合は集約関係になります。ビジネスの観点から見ると、オブジェクト全体がその責任を完了するためにいくつかのオブジェクトの参加を必要とする場合、2 つの間の関係は結合であり、そうでない場合は集約関係になります。

たとえば、車とタイヤ、車全体と部品としてのタイヤ。中古車販売ビジネス環境で使用される場合、両者の間には集約関係が存在します。タイヤは車と一体の部品であるため、タイヤと車を別々に製造し、組み立てて使用することもできますが、車を新しいタイヤに交換したり、タイヤを取り外して他の車に使用したりすることもできます。駆動システムのビジネス環境で使用される場合、車はタイヤなしでは駆動タスクを完了できません。この 2 つは複合的な関係にあります。もう一つの例は、オンライン書店ビジネスにおける注文と注文アイテムの関係で、注文に注文アイテムがなければ注文ビジネスは完了しませんので、両者の関係は組み合わせになります。ショッピング カートと商品の関係については、商品のライフ サイクルはショッピング カートによって制御されず、商品は複数のショッピング カートで共有できるため、両者の間には集約関係が存在します。

ここでさらに具体的に学ぶことができます 8. オブジェクト指向 - UML クラス図 - Zhihu (zhihu.com)

おすすめ

転載: blog.csdn.net/weixin_62421736/article/details/132967947