日期:2013-12-07  浏览次数:20591 次

PowerDesigner UML 简介(第二部分)
作者:Sybase, Inc. PowerDesigner 产品经理 David Dichmann

在 BluePrint #4(访问 http://www.sybase.com/blueprint 以获取以往问题的电子版)中,我们探讨了 5 种 UML 图表:用例图、序列图、活动图、类图和组件图,它们可以协助您掌握系统的需求,设计其物理结构和预期功用,并转换为代码。我们还可以使用另外 4 个 UML图来进一步精简前 5 个图中包含的定义,或者从完全不同的可取角度来定义系统。

这些图表(对象图、协作图、形状图和部署图)与前面的图一同组成了PowerDesigner 中的全部图表,并可在PowerDesigner9.5中使用。
对象图(Object Diagram):
与类图一样,对象图也是一个 UML 静态结构图;它定义了系统在给定时辰具有的物理元素,而没有具体考虑系统的动态活动。它与代码逐一对应,但与类图不同,我们如今讨论的是具体的分类器,而不是分类器定义。将对象图描述为类实例图可能最为合适。

对象图的次要用途是进行分析。类图中无法表示的类之间存在不确定的约束。我们将使用对象图来记录这些约束。而且,在我们查看所管理的具体类实例示例以阐明这些元素之间的交互作用关系时,对象图还允许我们定义具体的“What if”场景。

以下内容适用于 OO 建模的初学者:分类器是笼统的对象结构定义。分类器可以通知我们所管理的是什么类型的数据(属性/成员表示数据元素)以及该分类器具有什么能力(操作/方法表示对象的行为)。实例是具体的分类器示例。假定定义一个名为 Customer 的类,该类具有 Name 属性。类 Customer 的实例“Jane Doe”是姓名恰为“Jane Doe”的客户。实例通常具有比分类器更丰富的含义,这是由于分类器表示某种级别的概述。收集某个分类器的若干个实例或示例可能有助于您理解其用途并更好地使用它。

因此,对象图是类图的具体方式,表示类实例样本,并且显示了键值和关系。例如,CustomerBean 类具有以下客户实例:该客户的 ID 为 52271,姓名为“John Doe”。该客户实例与三个订单实例(三份订单)相关,订单编号分别为122047、122103 和 122399。

 



 
协作图(Collaboration Diagram):
协作图和序列图非常类似。实际上,序列图和协作图可以无效地交替使用,并可以简便的互相转换。其区别在于用户阅读和理解的方式不同。序列图具有很好的层次性,并且围绕时间结构。协作图则次要是围绕对象结构结构。通过在图中对音讯进行编号可以表示音讯的顺序。采用这种方式时,即便图的结构不是基于时间的,也将保持定时关系。

协作图借助于系统中元素或对象之间的交互作用,表示系统的动态方面,即在一段时间内的表现方式。它通过表示系统的静态结构来对类图和对象图进行补充,但不是借助于基于结构的关系,而是在系统对象之间传递交互作用“音讯”。

结构协作图时还可以在概念级测试静态模型。在类图中定义了类实例,这些类实例之间的交互作用定义了一个具体的使用方案以及将在这些元素之间发生的内部通讯。我们还可以使用其他角色来表示系统的外部作用者和内部使用者,如用例图。

例如,我们可以建立一个订单输入系统,以供客户和销售代表使用。客户通过创建新订单与该系统交互作用。订单对象与销售对象之间进行对话,该对话由链接音讯表示,在此情况下,只要两个音讯:一个是来自 Orders 类的订单请求,一个是来自 Sales 类的订单确认。对一个链接上的音讯数量没无限制。我们在此讨论的对话以一个订单请求开始,然后是对该订单的确认。 

 


适用性
协作图对于设计人员尤其重要,由于它阐明了对象的作用。您可以在序列图之前结构协作图(如果您计划结构这两个图),但通常是在完成类图之后结构协作图以说明从类中导出的对象之间的交互作用。可以使用一个或多个协作图来实现一个用例,或者将复杂行为分割成多个逻辑子行为。
形状图(Statechart Diagram):
形状图(也称为形状机)描述了特定类或组件在其整个生命周期中不断变化时的行为。该图显示是什么触发了从一种形状向另一种形状的转换,以及在该类上调用哪些操作以提供该形状的行为或触发这种转换。例如,订单在被创建时处于初始形状。在客户确认订单正确后,订单将进入确认形状。在发货当前,订单需求从确认形状进入发货形状。 

 



 

因此,每当一个类在其生命周期的不同阶段具有不同的可用选项(不同的无效行为)时,您都可以使用形状图来将这些规则和条件建模。生命周期中的每个阶段都是该对象的一种形状,而每个改变形状的触发器都代表从一种形状到另一种形状的转换。可以依据需求从某个形状转换到任意多个其它形状,也可以从其它多个形状进入某个形状。
子形状图
若要保持形状图简单和易读,您可能发现所定义的一个或多个形状实际上涉及到更为复杂的行为,以致于它本身就可以定义为一个形状图。此时,与向主图中添加大量复杂细节的做法相比,更好的做法是将这个单独的形状分解为多个子形状,进而组成一个辅助图,以定义父形状的更为复杂的内部行为。



部署图(Deployment Diagram):
部署图可以协助我们确定所有代码元素在服务器、任务站和数据库中的存放位置。有的节点需求依赖硬件或软件框来运转部分业务逻辑。这些节点交互作用以演示我们开发的多个计算机和系统是如何交互作用和集成的。节点中包含将部署到数据库、使用程序或 Web 服务器中的组件实例。

部署图用于将组件实际部署到服务器中。通过定义希望组件运转的位置,我们可以快捷的映射、部署和管理分布在客户端使用程序和使用程序服务器端组件之间的业务逻辑或数据库端服务器逻辑。以下是要管理的物理体系结构的 1:1 模型。

例如,假定我们已决定实现两个 Enterprise Java Beans,并且在使用程序服务器上运转它们。下图显示了单个节点以及该节点内的两个组件(每个 EJB 一个组件)。我们可以看出 EmployeeBean 依赖于同一使用程序服务器内的 CustomerBean。 


结论
在我们借助用例图、序列图、活动图、类图和组件图完成基本 UML 建模时,我们将需求其它一些工具来定义有关系统中某些特定元素的详细信息。我们可能希望在对象图中使用精确的示例来表示对象的结构,或者借助于形状图来更多地了解在其内部具有多个复杂形状的类的行为。我们需求使用协作图从结构角度而不是从时间角度来调查系统组件之间的交互作用。最后,还需求使用部署图来显示所有系统组件在运转环境中的物理硬件或服务器中所处的位置,从而更详尽的了解分布式体系结构的使用方式。

UML 为我们提供了愈加实用的图表,以便完成对业务逻辑的技术分析、设计、开发、或部署。将这 9 种图表与传统的数据建模方法和新的业务流程建模方法相结合,我们可以在从高级需求到技术和数据需求,以及物理实现的各个方面来全面了解推动软件开发的所有要素。