如何在UML类图中表示回调函数。

15

我有一个接口,比如说

Interface ICallback {
    public void informFunction();
}

我有一个类,比如说:

Class Implementation implements ICallback {

   public Implementation() {
      new AnotherImplementation(this);
   }

   @override
   public void informFunction() {
      // do something
   }

}

现在考虑一个类,其中Class Implementation的实例被传递为接口,并用于进行回调。

Class AnotherImplementation {
   public ICallback mCallback;

   public AnotherImplementation(ICallback callback) {
      mCallback = callback;
   }

   public void testFunction() {
     mCallback.informFunction();  // Callback
   }
}

现在我想知道如何设计UML类图。最重要的是我需要知道如何表示将发生在类AnotherImplementation :: testFunction()中的回调功能。

1个回答

33

你的代码在以下类图中表示:

enter image description here

它表示类之间的关系:

  • Implementation 实现了 ICallback
  • Implementation 依赖于 AnotherImplementation (它在构造函数中创建一个)
  • AnotherImplementation 有一个 ICallback (名为 mCallback)

类图不表示方法功能,方法功能使用序列图或协作图来可视化。

在你的例子中,testFunction() 的序列图非常简单:

sequence diagram

请注意,序列图中没有显示 Implementation 类。这是因为 mCallback 成员被声明为 ICallback。它可以是任何实现 ICallback 接口的东西。

我认为更有趣的问题是如何将触发回调的方法可视化。你没有提及哪个 Implementation 的方法调用了 AnotherImplementationtestFunction(),所以我猜这发生在 Implementation 的构造函数内部。我为此构造函数创建了以下序列图:

callback sequence

在这里,你可以看到:

  1. Implementation 创建 AnotherImplementation
  2. ImplementationAnotherImplementation 上调用 testFunction
  3. AnotherImplementationImplementation 上调用 informFunction

这个类图和解释真的很棒。请问您用了哪个工具来创建/生成这个类图? - Teena nath Paul
我使用的工具是免费的bouml,另一个可以用Draw.io,还有StarUml。 - Juan Pablo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接