1

Enterprise Architectで、クラスが実装するインターフェイスでプロトタイプを変更したときに、子クラスの操作プロトタイプが自動的に更新されるようにしたい。それ、どうやったら出来るの?些細なことのようです!

実現接続を使用して、クラスがインターフェイスを実装することを指定しています。このような接続を作成すると、AEはどの操作を実装するかを尋ねてきます。none(デフォルト)を選択してokを押すと、クラスにメソッドが表示されません。ここまでは順調ですね。そのクラスの機能の可視性を変更して継承された操作を表示すると、インターフェイスの操作が表示されることを期待していました。しかし、そうではありません!どうしてこれなの?

接続を削除して再度作成し、今度は実装/オーバーライドするすべての操作を選択すると、(もちろん)すべてのメソッドがクラスに追加されます。ただし、インターフェイスで操作のプロトタイプを変更しても、クラス内の同じ操作のプロトタイプは更新されません。すべてのクラスを手動で更新する必要はありません。これを行う方法はありますか?

ちなみに、私はC++プロジェクト用にEnterpriseArchitectv8.0を使用してインターフェイスとクラスを設計するのに忙しいです。インターフェイスは、すべての抽象メソッドを備えた純粋な仮想クラスとしてAEによって生成されます。これらのメソッドは、EAで純粋および抽象として自動的に指定されます。

4

1 に答える 1

1

まず、EA を使用してコードを生成することはありませんが、UML 用語で EA が行うことは次のとおりです。また、私は 9.0 を使用していますが、この動作は変わっていないと確信しています。

機能の可視性オプションは厳格です。実現された機能ではなく、継承された機能が表示されます。私の知る限り、実現された機能を表示する方法はありません。しかし、それらはまだそこにあり、その下にあり、あなたが望むように機能します.

MyInterface に MyMethod が含まれ、MyClass が操作をオーバーライドせずに MyInterface を認識している場合、MyMethod をシーケンス図のメッセージとして選択できます ([継承されたメソッドを表示] を選択した場合)。MyInterface::MyMethod への変更は MyClass に正しく反映され、MyMethod は MyClass の子にも継承されます (ただし非表示になります)。

一方、オーバーライドすると、クラスに新しい操作が作成されます。それが完了すると、操作は継承されたとは見なされなくなり、インターフェース内の操作に加えられた変更に従いません。

あなたが求めている動作は、クラスと一般化を使用する場合に得られるものです。子クラスは親の操作を継承し、[機能の表示] ダイアログで [継承された機能] を選択するとそれらを表示します。操作は子クラスにコピーされませんが、シーケンス内のメッセージとして利用でき、親の操作への変更は子に反映されます。

したがって、図に表示されたメソッドが必要な場合は、回避策として、インターフェイスを破棄し、代わりに抽象クラスを使用することができます。どちらが C++ 生成に最適かはわかりません。

于 2011-07-19T10:33:59.653 に答える