web-dev-qa-db-ja.com

UMLクラス図でインスタンス化に注釈を付けるにはどうしますか?

この疑似コードを考えると:

class B { }

class A : B
{
    int val;
};

alpha = new A();

UMLクラス図のalphaAの間にどの矢印を描画しますか?これはUMLがやろうとしていることですか?

+-------+        +-------+        +-------+
| alpha | --??-- |   A   |------|>|   B   |
|       |        |       |        |       |
+-------+        +-------+        +-------+

私の場合、私は本当にalphaAをインスタンス化することを明示的に表現したいと思います。したがって、UMLに方法がない場合、私は方法を単に作成します-これは問題ありませんが、UMLがすでにそれを表現できるかどうかを知りたいです。私の状況は、OOP=非常に視覚的な友人に説明しようとしていることです。したがって、2つの関係(継承とインスタンス化)を視覚的に区別して、彼が区別できるようにしたいと思いますそれは精神的に。

7
Alexander Bird

クラス図では、インスタンス化の行為を示していません。それは、シーケンス図またはコミュニケーション図が示すものです。クラス図は、システムの静的構造を示しています。

クラスAがクラスBに「依存」している場合、関連付けと依存関係を確認できます。 Dependency は2つのうちの弱い方で、通常、他のクラスがメソッドのパラメーターであり、インスタンス変数として格納されていない場合に使用されます。 Association はより強力であり、クラスAにクラスBのインスタンスが含まれていることを意味し、構成および集約関係によってさらに強化されます。

あなたの例では、alphaはクラスの一部ではありません。 alphaがクラスCのインスタンス変数である場合、CAに関連付けて接続します。それがメソッドのパラメーターであるか、Cのメソッド内で作成され、インスタンス変数として格納されていない場合は、依存関係線を使用してCAに接続します。すべての場合において、方向性と多重度を指定することができます。

より大きな問題は、UMLを「クラス図」に関連付けているように見えることです。 UML 2.2仕様には14種類の図があります。 7つの構造図と7つの行動図があります(3つの行動図と4つの相互作用図に分解)。各図は、システムの特定のビューを示しています。システムのいくつかの側面は、特定の図、または場合によっては一連の図を使用して最もよく示されます。興味があれば、 WikipediaのUMLに関するエントリMartin FowlerのUML Distilled をチェックすることをお勧めします。どちらも、さまざまな種類の図の目的、長所、および短所の概要を示しています。

12
Thomas Owens

私は@Thomas Owensに同意します。UMLのクラス図は、インスタンスを一般的に示すものではありません。ただし、UMLはインスタンス化を表すメカニズムを提供することを付け加えておきます。

  • instanceSpecification要素は、例のalphaなどのインスタンスをモデル化する方法を提供します。
  • インスタンスからそのタイプに流れ、ステレオタイプ<<instanceOf>>で装飾された依存表記(破線の矢印とプレーンな矢印)は、インスタンスとその分類子の間のインスタンス化関係をモデル化する方法を提供します。
3
CesarGon

enter image description here

そのような依存関係には特別なステレオタイプがあります。クラスINSTANTIATES Class2(インスタンスを作成する場合)。 UML標準に存在します。 (私は2.4.1-現代のものと2.5-次のものをチェックしました。)

2
Gangnus