2012-03-12 50 views
3

Enterprise Architect(バージョン9.2.921)では、クラス図を作成したいと思います。私はInterfaceとして動作するクラスMyInterfaceを持っています。 EAではステレオタイプ<<interface>>を選択し、abstractとマークしました。Enterprise Architect - クラス図のインタフェースからのメソッド継承

ここで私の抽象的なインターフェイスは、1つの仮想関数を定義します。今私はクラスMyChild、私のインターフェイス(class MyChild :: MyInterface)の子であり、この機能を実装します。

EAでこれを行うには、新しいクラスを作成しました。次に、それを右クリックし、[詳細設定]、[親]の順にクリックします。 タイプIはimplementsを選択してから、自分のInterfaceクラスを選択します。

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

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

Enterprise Architechtでこれを行う方法はありますか?

答えて

3

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

「オーバーライド&実装」ダイアログには、いくつか微妙なものがあります。

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

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

2つのクラス間に一般化を描画すると、シーケンス図で同じ動作になります。さらに、クラスの継承された(一般化によって)操作を右クリックし、 "Feature Visibility"を選択して "Show Operations"を選択することで、表示を選択することができます。これは、(他のクラスからの)汎化によって到着した操作に対してのみ機能し、(インタフェースからの)実現では機能しないことに注意してください。私はこれをバグだと考えていますが、設計上の問題かもしれません。

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

右クリック - アドバンスト - ペアレントメソッドを使用すると、 "&オーバーライドの実装"ダイアログをバイパスしますが、前述のようにコネクタが作成されます。

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

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

図表を描画したいコードベースがある場合は、EAがそれをリバースエンジニアリングできる可能性があります(C++、C#、Java、その他約12言語の場合) 。

2

オーケー、私は方法を見つけた:(すでにあった場合)

  1. 二つのクラス間の接続を削除]を選択しRealization ToolboxのClass Relationships
  2. からあなたの子供からの線を引きますクラスへのインターフェイス
  3. マウスを離すと、あなたの子供が実装する機能を選択するように求められます

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

0

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

私は本当に答えに満足していません。 「削除」=「はダイアグラム上で非表示」が「削除」=「モデルから削除」この准が可能ならば、あなたは終わり

  • で2つの実現-Assocsを持つことになります実現

    • を「削除」する方法使用されている他の図で削除されました
  • 関連する問題