3

Enterprise Architect (バージョン 9.2.921) でクラス図を作りたいです。MyInterfaceInterface として機能するクラスがあります。そのため、EA ではステレオタイプを選択し<<interface>>、それを としてマークしましたabstract

簡単にするために、私の抽象インターフェースは 1 つの仮想関数を定義します。MyChildこれで、インターフェイス ( class MyChild :: MyInterface) の子であり、この関数を実装するクラスができました。

EA でこれを行うために、新しいクラスを作成しました。次に、それを右クリックします --> Advanced --> Parent 。タイプとしてimplements選択し、Interface クラスを選択します。

私のクラス図では、子から親への矢印は正しいです(破線、インターフェイスの方向に空の矢印の頭があります)。

ここでの問題は、EA が抽象関数をインターフェイスから実装クラス自体に追加することを期待することです。たとえば、Interface クラスの仮想関数を変更/追加/削除すると、すぐに子クラスで変更されます。しかし問題は、関数が子クラスの本体に表示されないことです。

Enterprise Architecht にこれをさせる方法はありますか?

4

3 に答える 3

4

まず、簡単に接続を描画する別の方法があります。ダイアグラムでクラスを選択すると、クラスのすぐ上/右に小さな矢印アイコンが表示されます。これをクリックし、インターフェイスにドラッグ アンド ドロップすると、EA は、最も関連性の高いものを最初にして、一連の可能なコネクタを提供します。このリストは、ソース要素タイプとターゲット要素タイプ (この場合はクラスとインターフェース) の両方に基づいて状況依存です。

「オーバーライドと実装」ダイアログに関しては、いくつかの微妙な点が関係しています。

クラスがインターフェイスを実現する場合、実装するように選択していなくても、クラスは実際にはインターフェイスによって指定された操作を持っていますが、非表示になっています (これが、このダイアログでインターフェイス操作がデフォルトで選択解除されている理由です)。

シーケンス図でクラスを使用して呼び出しを行うと、[メッセージ プロパティ] ダイアログでインターフェイス定義の操作を選択できることがわかります ([継承されたメソッドを表示] が選択されている場合)。インターフェイスで操作の名前を変更すると、この名前は自動的に更新されます。

2 つのクラス間の一般化を描画すると、シーケンス図で同じ動作が得られます。さらに、クラスを右クリックして [機能の表示] を選択し、[操作の表示] を選択して、クラスの継承された (一般化による) 操作の表示を選択できます。これは、(インターフェースからの) 実現ではなく、(他のクラスからの) 一般化を通じて到達した操作に対してのみ機能することに注意してください。これはバグだと思いますが、仕様によるものかもしれません。

[オーバーライドと実装] ダイアログで操作を選択した場合、それはその操作のコピーを作成していることを意味します。EA は、オーバーライドされた操作がどこから来たのかを覚えておらず、インターフェース/抽象クラスで名前を変更しても名前を更新しません。

右クリック - 詳細設定 - 親メソッドを使用すると、[オーバーライドと実装] ダイアログはバイパスされますが、ご指摘のとおり、コネクタが作成されます。

ここで、クラスを作成してから「インターフェース」ステレオタイプを設定することに言及しました。これはその方法ではありません。代わりに、ツールボックスのインターフェイス シンボルを使用してインターフェイスを作成する必要があります。「インターフェース」ステレオタイプを持つクラスはインターフェースと同じではなく、私が説明した動作のどれがその構造で得られるかわかりません。

必要なインターフェイスであれば、それを使用してください。一方、抽象クラスについて話している場合は、クラスが正しく、抽象クラスも具象クラスも「インターフェイス」ステレオタイプを持つべきではありません。

また、ダイアグラムを描画したいコード ベースがある場合、EA がそれをリバース エンジニアリングできる可能性があることにも注意してください (C++、C#、Java、または他の約 12 の言語の場合)。

于 2012-03-13T11:37:23.787 に答える
2

さて、私は方法を見つけました:

  1. 2 つのクラス間の接続を削除します (既に存在する場合)。
  2. ツールボックスRealizationから選択Class Relationships
  3. Child クラスからインターフェイスに線を引きます
  4. マウスを放すと、お子様が実装する機能を選択するよう求められます

この方法では、すべての関数プロトタイプを何度も再入力する必要はありません。ただし、インターフェイスでプロトタイプを変更しても、実装内の対応する関数は変更されません。(他にも方法があるのか​​もしれませんが、まだわかりません...)

于 2012-03-13T09:25:05.013 に答える
0

私も同じ問題を抱えていました。

私は答えに本当に満足していません。認識を「削除」する方法

  • "Delete"="Hide on Diagram" の場合、最後に 2 つの Realization-Assoc があります。
  • "Delete"="Delete from Model" の場合、この関連付けは、それが使用されていた他のダイアグラムで削除されます
于 2013-09-11T13:07:44.980 に答える