クラス図

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
クラス図として示されているUML2.5図の階層。個々のクラスは1つのコンパートメントで表されますが、多くの場合、最大3つのコンパートメントが含まれます。

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

クラス図は、オブジェクト指向モデリングの主要な構成要素です。これは、アプリケーションの構造の一般的な概念モデリング、および詳細なモデリング、モデルのプログラミングコードへの変換に使用されますクラス図は、データモデリングにも使用できます。[1]クラス図のクラスは、主要な要素、アプリケーションでの相互作用、およびプログラムされるクラスの両方を表します。

この図では、クラスは3つのコンパートメントを含むボックスで表されています。

  • 上部のコンパートメントには、クラスの名前が含まれています。太字で中央に印刷され、最初の文字は大文字になっています。
  • 中央のコンパートメントには、クラスの属性が含まれています。それらは左揃えで、最初の文字は小文字です。
  • 下部のコンパートメントには、クラスが実行できる操作が含まれています。また、左揃えで、最初の文字は小文字です。
3つのコンパートメントを持つクラス。

システムの設計では、いくつかのクラスが識別され、クラス図にグループ化されて、それらの間の静的な関係を決定するのに役立ちます。詳細なモデリングでは、概念設計のクラスがサブクラスに分割されることがよくあります。

システムの動作をさらに説明するために、これらのクラス図を状態図またはUML状態マシンで補完することができます。[2]

メンバー

UMLは、属性やメソッドなどのクラスメンバーを表すメカニズムと、コンストラクターなどのそれらに関する追加情報を提供します。

可視性

クラスメンバー(つまり、任意の属性またはメソッド)の可視性を指定するには、メンバーの名前の前に次の表記を配置する必要があります。[3]

+ 公衆
- プライベート
# 保護されています
~ パッケージ

派生プロパティは、他のプロパティの値を使用するなどして、他の情報から値(または複数の値)が生成または計算されるプロパティです。

派生プロパティは、名前の前にスラッシュ「/」が付いて表示されます。[4]

スコープ

UMLは、メンバーに2種類のスコープを指定します。インスタンスクラスです。後者は下線付きの名前で表されます[5]

  • インスタンスメンバーは、特定のインスタンスにスコープされます。
    • 属性値はインスタンス間で異なる場合があります
    • メソッドの呼び出しは、インスタンスの状態に影響を与える可能性があります(つまり、インスタンスの属性を変更します)
  • クラスのメンバーは、多くのプログラミング言語で「静的」として一般に認識されています。スコープはクラスそのものです。
    • 属性値はすべてのインスタンスで同じです
    • メソッドの呼び出しは分類子の状態に影響を与えません

メンバーの分類子スコープを示すには、その名前に下線を付ける必要があります。それ以外の場合、デフォルトでインスタンススコープが想定されます。

関係

UML関係表記

関係とは、クラス図とオブジェクト図に見られる特定のタイプの論理接続をカバーする一般的な用語です。UMLは、次の関係を定義します。

インスタンスレベルの関係

依存関係

依存関係は、依存モデル要素と独立モデル要素の間のセマンティック接続です。[6] 1つの要素(サーバーまたはターゲット)の定義を変更すると、もう1つの要素(クライアントまたはソース)が変更される可能性がある場合、2つの要素の間に存在します。この関連付けは一方向です。依存関係は、クライアントからサプライヤを指す白抜きの矢印の付いた破線で表示されます。

関連付け

2つのクラス間の関連付けのクラス図の例

アソシエーションは、リンクのファミリーを表します。バイナリアソシエーション(両端)は通常、線で表されます。アソシエーションは、任意の数のクラスをリンクできます。3つのリンクを持つ関連付けは、3値関連付けと呼ばれます。アソシエーションには名前を付けることができ、アソシエーションの終わりには、役割名、所有権インジケーター、多重度、可視性、およびその他のプロパティを付けることができます。
関連付けには、双方向、単方向、集約(構成集約を含む)、および反射の4つの異なるタイプがあります。双方向および単方向の関連付けが最も一般的なものです。
たとえば、フライトクラスは、双方向でプレーンクラスに関連付けられています。アソシエーションは、2つのクラスのオブジェクト間で共有される静的な関係を表します。

集約

2つのクラス間の集約を示すクラス図。ここで、教授は '教えるクラスを持っています。

集約は、「hasa」アソシエーション関係の変形です。集約は、関連付けよりも具体的です。これは、関係の一部全体または一部を表す関連付けです。画像に示されているように、教授には「教えるクラスがあります。アソシエーションのタイプとして、アグリゲーションに名前を付けて、アソシエーションと同じ装飾を付けることができます。ただし、集計には3つ以上のクラスを含めることはできません。バイナリアソシエーションである必要があります。さらに、実装中の集計と関連付けにほとんど違いはなく、図では集計関係が完全にスキップされる場合があります。[7]

集約は、クラスが他のクラスのコレクションまたはコンテナーである場合に発生する可能性がありますが、含まれているクラスはコンテナーに対するライフサイクルの強い依存関係を持っていません。コンテナが破壊されても、コンテナの内容はまだ存在しています。

UMLでは、包含クラスに中空の ひし形としてグラフィカルに表され、包含クラスに接続する1本の線が表示されます。アグリゲートは意味的には拡張オブジェクトであり、物理的にはいくつかの小さなオブジェクトで構成されていますが、多くの操作で1つの単位として扱われます。

例:図書館と学生。ここでは、学生は図書館なしで存在することができ、学生と図書館の関係は集約です。

作曲

2つのクラス図。上の図は、2つのクラス間の構成を示しています。車にはキャブレターが1つだけあり、キャブレターは1つの車の一部です。キャブレターは、特定の車から切り離された別個の部品として存在することはできません。下の図は、2つのクラス間の集約を示しています。池には0個以上のアヒルがあり、アヒルには最大で1つの池があります(一度に)。アヒルは池とは別に存在することができます。たとえば、湖の近くに住むことができます。私たちが池を破壊するとき、私たちは通常すべてのアヒルを殺すことはありません。

構成関係のUML表現は、含まれているクラスを含むクラスに接続する線の含まれているクラスの端に ある塗りつぶされたひし形として構成を示します。

コンポジションとアグリゲーションの違い

構成関係
1.実世界の部品全体の関係を表現しようとする場合、たとえば、エンジンは車の一部です。
2.コンテナが破壊されると、中身も破壊されます。たとえば、大学とその学部です。
集約関係
1.ソフトウェアまたはデータベースの関係を表す場合、たとえば、車種エンジンENG01は車種CM01の一部であり、エンジンENG01も別の車種モデルの一部である可能性があります。[8]
2.コンテナが破壊されても、内容物は通常破壊されません。たとえば、教授には学生がいます。教授が死んだとき、学生は彼と一緒に死ぬことはありません。

したがって、集約関係は、多くの場合、構成の「物理的」封じ込めと区別するための「カタログ」封じ込めです。


クラスレベルの関係

一般化/継承

スーパークラスのPersonと2つのサブクラスのStudentProfessorの間の一般化を示すクラス図

これは、2つの関連するクラスの1つ(サブクラス)がもう一方(スーパータイプ)の特殊な形式であると見なされ、スーパークラスがサブクラスの一般化と見なされることを示します。実際には、これは、サブタイプのインスタンスがスーパークラスのインスタンスでもあることを意味します。この形式の一般化の典型的なツリーは、生物学的分類に見られます。人間は、哺乳類のサブクラスであるサルのサブクラスなどです。この関係は、「AはB」(人間は哺乳類、哺乳類は動物)というフレーズで最も簡単に理解できます。

一般化のUMLグラフィック表現は、1つ以上のサブタイプに接続する線(または線のツリー)のスーパークラスの端に ある中空の三角形です。

一般化関係は、継承または isa」関係とも呼ばれます。

一般化関係のスーパークラス(基本クラス)は、 「親」スーパークラス基本クラス、または基本タイプとも呼ばれます。

特殊化関係サブタイプは、 「子」サブクラス派生クラス派生タイプ継承クラス、または継承タイプとも呼ばれます。

この関係は、生物学的な親子関係とは似ていないことに注意してください。これらの用語の使用は非常に一般的ですが、誤解を招く可能性があります。

AはBの一種です
たとえば、「樫の木は木の一種」、「自動車は車の一種」などです。

一般化は、クラス図とユースケース図にのみ表示できます。

実現/実装

UMLモデリングでは、実現関係は2つのモデル要素間の関係であり、一方のモデル要素(クライアント)がもう一方のモデル要素(サプライヤー)が指定する動作を実現(実装または実行)します。

実現のUMLグラフィック表現は、破線(または線のツリー)のインターフェース端にある中空の三角形であり、1つ以上の実装者に接続します。プレーンな矢印の頭は、ユーザーに接続する破線のインターフェイスの端に使用されます。コンポーネント図では、ボールとソケットのグラフィック規則が使用されます(実装者はボールまたはロリポップを公開しますが、ユーザーはソケットを表示します)。実現は、クラス図またはコンポーネント図にのみ表示できます。実現とは、クライアント要素をサプライヤ要素に接続するクラス、インターフェイス、コンポーネント、およびパッケージ間の関係です。クラス/コンポーネントとインターフェース間の実現関係は、クラス/コンポーネントがインターフェースによって提供される操作を実現することを示しています。

          実現の象徴-------▻

一般的な関係

「Car」クラスと「Wheel」クラスの間の依存関係を示すクラス図(さらに明確な例は、「CarはWheelに依存する」です。これは、CarがすでにWheelを集約ているためです

依存関係

依存関係は、ある時点でそれを使用するため、あるクラスが別のクラスに依存していることを示す、より弱い形式の結合です。独立クラスが従属クラスのメソッドのパラメーター変数またはローカル変数である場合、1つのクラスは別のクラスに依存します。これは、依存クラスの属性が独立クラスのインスタンスである関連付けとは異なります。2つのクラス間の関係が非常に弱い場合があります。これらは、メンバー変数ではまったく実装されていません。むしろ、それらはメンバー関数の引数として実装される可能性があります。

多重度

この関連付けの関係は、(少なくとも)2つの関連するクラスの一方が他方を参照していることを示しています。この関係は通常、「AにはBがあります」(母猫には子猫がいて、子猫には母猫がいます)と表現されます。

アソシエーションのUML表現は、2つのアソシエートされたクラスを結ぶ線です。行の両端にはオプションの表記があります。たとえば、矢印を使用して、先のとがった端が矢印の尾から見えることを示すことができます。ボールの配置、役割の名前を指定することでそのエンドの要素が果たす役割、およびそのエンティティのインスタンスの多様性(視点からの関連付けに参加するオブジェクトの数の範囲)によって所有権を示すことができますもう一方の端の)。

0 インスタンスなし(まれ)
0..1 インスタンスなし、または1つのインスタンス
1 正確に1つのインスタンス
1..1 正確に1つのインスタンス
0 .. * ゼロ個以上のインスタンス
* ゼロ個以上のインスタンス
1 .. * 1つ以上のインスタンス

分析ステレオタイプ

EntityControlBoundary Pattern.jpg

エンティティ

エンティティクラスは、システムによって処理される長期的な情報をモデル化し、場合によっては情報に関連付けられた動作をモデル化します。それらは、データベーステーブルまたは他のデータストアとして識別されるべきではありません。

それらは、円の下部に短い線が付いた円として描かれます。または、クラス名の上に«entity»ステレオタイプ表記を付けて、通常のクラスとして描画することもできます。

も参照してください

関連図

参考文献

  1. ^ スパークス、ジェフリー。「UMLでのデータベースモデリング」2011年9月8日取得
  2. ^ Scott W. Ambler(2009) UML2クラス図Webdoc2003-2009。2009年12月2日にアクセス
  3. ^ UMLリファレンスカード、バージョン2.1.2、Holub Associates、2007年8月、 2011年3月12日取得
  4. ^ 「UML派生プロパティは、他のプロパティを使用するなどして、他の情報から値が生成または計算されるプロパティです」www.uml-diagrams.org 2019年1月24日取得
  5. ^ OMG統一モデリング言語(OMG UML)上部構造、バージョン2.3:2010年5月。2010年9月23日取得。
  6. ^ Fowler(2003)UML Distilled:標準オブジェクトモデリング言語の簡単なガイド
  7. ^ 「UMLチュートリアルパート1:クラス図」(PDF)2007年1月3日にオリジナル(PDF)からアーカイブされました2015年7月18日取得
  8. ^ グッドウィン、デビッド。「モデリングとシミュレーション、p。26」(PDF)ウォーリック大学2015年11月28日取得

外部リンク