同时采用类图和序列图进行精确建模

ZDNet软件频道 时间:2003-09-08 作者:ZDNet China |  我要评论()
本文关键词:
当和序列图协同工作时,类图提供了一个非常高效的通信机制。你可以使用一个类图表示类与类之间的关系,而序列图则可以表示消息是如何在这些类的实例之间传递的,并表达了消息传递的顺序。
本文译自Builder.com,未经许可请勿转载当和序列图协同工作时,类图提供了一个非常高效的通信机制。你可以使用一个类图表示类与类之间的关系,而序列图则可以表示消息是如何在这些类的实例之间传递的,并表达了消息传递的顺序。当一个对象发送消息到另一个对象,这也同样意味着在类图上这两个类必须具有对应的关联。

组成UML(统一建模语言)的许多元素都可以精确匹配到Java编程语言。因此,通过看一个模拟Java事件处理机制的UML例子,我可以演示类图和序列图之间是如何互为补充的。当开发Java应用程序时,采用类似于本例的模式去处理应用中的事件是很常见的。

序列图(Sequence diagram)

在图A中,EventExample对象发送一个消息到TimeEventSource对象,这个消息致使addTimeChangeListener()方法被触发。在对象之间传递的消息的顺序通常是从上至下,而且一般是从左至右的。请留意图A中的注释,以加深理解。

Figure A

序列图


让我们大致深入看一下这个序列图。以下的数字对应图中的数字:

  1. 相当于图示中的EventExample,在你的系统中可以是任何对象,通过创建一个TimeChangeListener对象开始你的事件模拟。很显然,你不可能具有一个接口的实例。然而,重要的是,TimeEventSource不是对TimeChangeListener的实现相关联,而是和listener(监听器)本身关联。
  2. EventExample对象现在通过TimeEventSource注册TimeChangeListener。
  3. EventExample在TimeEventSource上调用开始方法start,后者开始发送事件到已经注册在其上面的监听器。
  4. TimeEventSource创建一个TimeChangeEvent对象,后者封装了关于这次事件的信息。
  5. TimeEventSource在它的每个监听器中循环,调用每个监听器上的timeChange方法。
  6. 作为可选的方案,TimeChangeListener能够获取导致事件通知的对象的引用(reference),这个引用返回一个指向java.lang.Object的通用引用。
  7. TimeChangeListener调用其processEvent()方法处理事件。


你将注意到我在TimeChangeListener接口上附加了一个note(注释,说明),以便于说明我将实际创建一个实现了这一个接口的类。这个note允许在图示中展示很好的灵活性,因为不管我用什么类代替TimeChangeListener整个消息序列都是正确运转的。而且,我可能想用一个note来说明,当TimeEventSource对象通知其监听器时间的变化,它可以同志多个监听器,从而形成一个有效的循环。

关键之处是需要解释这个图示并用来构建代码的开发者必须懂得这些注释中包含的信息,以便于更加高效的操作。注释(notes)是一个很重要的方法,它帮助你懂得与这个事件序列有关的更详尽的细节信息。注释应当出现在大多数图示中,你可能经常对一个单个的类图配备多个序列图,因为很多类的组合可能以多种不同的方式交互。序列图的主要作用在于为一种交互方式建模。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134