UML实践案例

1 分析模型简介

Rose分析模型(Analysis Model)推进用例的实现,在子系统划分上,它一方面以系统用例模型、业务对象模型为参考,又把各个子系统公用的成分分离出来,形成需要的子系统。超市进销存系统的分析模型把身份验证的功能独立出来,形成身份验证子系统,结构如图9所示。

wps_clip_image-1874[3][1]

图9描述了超市进销存系统分析模型结构

Rose的系统分析模型把逻辑对象模型向实现推进了一步,它更多地接近逻辑对象模型。

1.分析模型基本概念

对于一个用例,一般可以通过三种类来实现:边界类(Boundary Classes)、实体类(Entity classes)和控制类(Control classes)。

为了把用例和用例实现区分开来,Rose引入新的图素“用例实现”。用例通过“用例实现”来完成相应用例的功能。用例实现就是UML的协作(Cooperation),意思是通过对象(或类)的协作完成用例的实现。

分析模型涉及边界类、控制类、实体类和用例实现(Use-case realizations)等基本图素,如图10所示,它们都是类的变体。

wps_clip_image-640[3][1]

图10 分析模型基本图素

Rose分析模型涉及下列图素:

(1)分析模型的基本类

一个用例一般通过三种类协同实现其功能:边界类、控制类、实体类。这些类又叫分析类变体(Analysis class stereotypes)。

图11销售管理子系统分析模型类图。它通过这三种类协同实现“处理销售”用例。

图11和图8(销售管理业务对象模型类图)作比较,可以看出这两种图之间的关系。

wps_clip_image-18344[3][1]

图11销售管理子系统分析类图

1)边界类

边界类位于系统和外界角色的交界处,边界类实现业务角色、业务员工与用例的交互,它可以是窗体、报表、与打印机、扫描仪、磁卡等硬件的接口。

图11所示的销售管理子系统的边界类是销售管理窗体。通过它售货员输入购物数量,通过它把商品条形码转变成商品标识等等。

边界类可以从用例中去寻找,每个“角色—用例”之间至少有一个边界类,有可能和别的“角色—用例”共用。

应用不同,边界类可以是软件接口或其他。边界类接收角色的交互信息,有时它还承担交互信息的转换任务,边界类是类的变体。

2)实体类(Entity classes)

实体类负责存储、加工信息,是对用户最有意义的类,通常用业务领域的术语命名。一般利用数据库对这种实体类建立相应表格。实体类是业务实体的计算机描述。

图11所示的销售管理子系统的实体类是销售表和商品档案表。销售表用于存储、加工销售清单,销售清单就是图8销售管理的业务实体。商品档案表用于存储、加工商品。商品也是图8销售管理的业务实体。

3)控制类(Control classes)

控制类协调边界类和实体类的工作。每个用例通常有一个控制类控制用例中的动作顺序。控制类也称管理类,一般控制类在用例之间是共用的。用例向控制类委托责任。控制类本身不完成任何服务功能,被控制的类并不向控制类发送许多信息,而是由控制类发出许多信息。

图11销售管理子系统分析类图中的商品信息控制。

角色通过边界类、控制类和实体类共同实现相应用例的功能。

(2)用例实现(Use-case realizations)

用例实现与用例是对应的,它们之间存在实现《realize》关联。把用例与用例实现分离开来,使每个用例实现不影响用例。对每种用例视图的用例,分析模型中有对应的一种用例实现(如图12所示)。用例实现进一步利用序列图、合作图和状态图细化描述。

wps_clip_image-22599[3][1]

图12 用例与用例实现的对应关系

2.分析模型的创建
(1)销售系统分析模型
图5-15描述了销售管理用例“处理销售”与售货员和顾客的交互。图8描述了销售子系统的对象之间的关联。由上而知,用例“处理销售”可以通过下列三种类合作实现。

1)销售管理窗体,它作为边界类,使售货员通过它输入和输出购物信息(商品条形码、商品名称、单价等)。

2)业务实体“商品”和“销售清单”要保存和修改,需要为它们建立“销售表”和“商品档案表”。

3)售货员在输入商品条形码后系统将对商品档案表查询,如顾客最终购买必须对商品档案表和销售表进行更新操作,所以需要一个控制类,将其命名为“商品信息控制”。而“销售表”和“商品档案表”可作为两个实体类。

(2)建立分析类图
1)创建包
①启动Rose.,单击【File】→【Open】.,打开“超市进销存系统.mdl”模型文件,展开浏览框逻辑视图Logincal

View,展开“分析模型”下的“销售管理”,双击销售管理下类图标【wps_clip_image-14742[3][1]Main】,打开主类图。

②打开浏览框“分析模型”包,在包下的Main类图中创建5个包,分别命名为“身份验证”、“订货管理”、“库存管理”、“统计分析”和“销售管理”及有关注释(如图13所示)。在浏览框自动生成分析模型结构。

wps_clip_image-465[3][1]

图13分析模型包的建立

2)建立类图
以销售管理为例建立子系统类图,步骤如下:

① 展开分析模型的【销售管理】包。

② 双击【wps_clip_image-13210[3][1]Main】,

打开Main类图。单击图素工具栏上的类图素【wps_clip_image-20991[3][1]】,在类图Main的适当位置单击,创建新类,并将其命名为“销售管理窗体”。双击“销售管理窗体”类图,在其打开的规范对话框中选择Stereotype的属性为【boundary】,使其派生为边界类。单击【OK】按钮关闭规范对话框(如图14所示)。

wps_clip_image-8709[3][1]

图14 建立边界类“销售管理窗体”

③创建“商品信息控制”,并选择相应的类的变体为【control】,设置它为控制类。

④ 从“订货管理”包中拖放“销售表”类到该类图(“订货管理”分析类图已建好)。

⑤ 从“库存管理”包中拖放“商品档案表”类到该类图(“库存管理”分析类图已建好)。

⑥ 建立图素之间的关联。单击工具栏上的关联图标【wps_clip_image-7432[3][1]】,将其从“商品信息控制”拖拽到“销售管理窗体”,它们之间的通讯是双向的,通过右击关联在菜单中选择【Navigable】,取消箭头(如图15所示)。

wps_clip_image-25772[3][1]

图15 选择关联为无向

⑦ 建立“商品信息控制”和“销售表”之间的关联,这种关联是单向的。建立“商品信息控制”和“商品档案表”之间的关联,这种关联也是单向的。

完成上述操作后,得到如图16 所示的销售系统分析模型类图。

wps_clip_image-13798[3][1]

图16 销售系统分析模型类图

3.创建用例实现
创建用例实现是进一步描述类的动态特征。

(1)用例实现是类图的一种,在图17中“分析模型”包下新建一个类图。右击图中【销售管理】,在浮动菜单中选择【New】→【Class

Diagram】。

默认名为NewDiagram,重新命名其为“Traceabilities”

wps_clip_image-4924[3][1]

图17 建立实现用例图(类图的一种)

(2)双击该【wps_clip_image-27610[3][1]Traceabilities】,打开其类图。从系统用例模型中的“销售管理”包中将“提取商品信息”、“更新销售信息”、“更新商品信息”、“打印购物清单”和“计价”5四个用例拖放到这个类图中。

(3)选择【Tools】→【Create】→【Use

Case】,建立一个用例,命名为“更新销售信息”,这时出现警告,提示命名重复,但两个用例是属性不同的变体。双击这个“更新销售信息”用例,把规范对话框中的变体属性设置为【use-case

realization】。单击【OK】关闭规范对话框。

(4)建立用例实现和其用例之间的关联。并将该关联的规范对话框的变体属性设置成【realizes】(如图18所示)。

wps_clip_image-9488[3][1]

图18 建立销售管理的用例实现

(4)同样方法建立“查询商品信息”、“更新商品信息”、“获得购物清单”和“计价”四个用例实现及其与他们用例的关联。

完成上述操作,得到如图19所示的销售系统用例实现图。浏览框出现新建立的“查询商品信息”、“更新商品信息”、“获得购物清单”和“计价”用例实现。

wps_clip_image-12658[3][1]

图19 销售系统用例实现用例图

用例实现可以从不同的角度去描述,可以通过类的之间的合作(类图)来描述,可以通过类对象按时间顺序的消息交互(序列图)来描述,也可以通过类对象之间协作(协作图)来描述。

1) 类图描述用例实现

① 在浏览器中分析模型下的“销售管理”包下选择用例实现“更新销售信息”。右击,在弹出菜单中选择【New】→【Class

Diagram】。创建一个新的类图,命名为“更新销售”。

② 双击【wps_clip_image-8367[3][1]更新商品】,打开“更新销售”类图。

wps_clip_image-8319[3][1]

图20 建立用例实现“更新销售信息”的类图的菜单

③ 将分析模型下各包中的类:“销售管理窗体”、“商品信息控制”、

“销售表”拖到这个更新商品类图中。结果更新商品信息用例实现的类图“更新销售”如图21所示。

wps_clip_image-22632[3][1]

图21 建立用例实现“更新销售信息”的类图

2)序列图描述用例实现

① 在浏览器中分析模型下的“销售管理”包下选择【更新销售信息】,右击它,在弹出菜单中选择【New】→【Sequence

Diagram】。创建一个新的序列图,命名为更新销售。

② 双击序列图【wps_clip_image-27343[3][1]更新销售】,打开序列图。

③ 从系统用例模型的“角色”包中将“售货员”这个角色拖到序列图中。

④ 将分析模型下各包中的类:“销售管理窗体”、“商品信息控制”、 “商品档案表”和“销售表”

拖到这个序列图中。结果销售管理用例实现序列图首部如图22所示。

这里将用序列图来描述“更新销售信息”这个用例实现。在序列图中可以看到“更新销售信息”这个用例的对象按时间顺序详细的交互过程。

wps_clip_image-9381[3][1]

图22 销售管理“更新销售信息”实现用例序列图首部

序列图涉及的基本图素如下(图23):

wps_clip_image-1454[3][1]

图23 序列图涉及的基本图素

使用下列步骤添加消息到序列图中。按观察到的对象交互顺序设定消息序列,每个消息是对象之间的一次通讯,它意味着某一活动随之而来。

⑤在序列图上建立一条消息。在图素工具栏上单击消息图素【wps_clip_image-20966[3][1]】(message),从售货员生命线(lifeline见图中的虚线)拖放消息图标到销售管理窗体生命线,消息自动编号“1:”

wps_clip_image-3704[3][1]

图24 命名序列图消息

⑥ 选中该消息,双击打开该消息规范对话框,命名消息为“输入商品条形码”(如图24所示)。

⑦ 同样在下列类之间建立消息:

wps_clip_image-26500[3][1]

从“销售管理窗体”到“商品信息控制”;

wps_clip_image-6344[3][1]

从“商品信息控制”到“商品档案表”;

wps_clip_image-21937[3][1]

从“商品档案表”到“商品信息控制”;

wps_clip_image-23301[3][1]

从“商品信息控制”到“销售表”;

命名消息如图25所示。通过这些步骤可以建立如图25所示的更新销售信息序列图。

wps_clip_image-19535[3][1]

图25 更新销售信息序列图

3)用协作图描述用例实现
在Rose中,可以自动将序列图转换为协作图,选择browse下的【create Collaboration

Diagram】来即可实现(如图26所示)。

wps_clip_image-5204[3][1]

图26 更新销售信息协作图

4)用状态图描述用例实现
状态图描述对象状态的变化,描述从一个状态的变化到另一个状态变化的事件。为了便于理解状态图,设某客户要在超市买商品,售货员结算好,要求顾客付款,但是顾客既可以信用卡付款,也可以现金付款,状态图如图27所示。

Rose建立状态图。

① 展开浏览框逻辑视图分析模型下的“销售管理”用例实现。右击它,在弹出菜单中选择【New】→【Statechart

Diagram】。创建一个新的State Activty Model包,包下建立NewDiagram1。

② 双击状态图【NewDiagram1】,打开状态图。

③ 放置一个开始状态、结束状态和六个其他状态。每个状态命名如下:

wps_clip_image-18827[3][1] 顾客购物

wps_clip_image-8003[3][1] 计价

wps_clip_image-9837[3][1] 取消订购

wps_clip_image-32427[3][1] 计算差额

wps_clip_image-22706[3][1] 信用验证

wps_clip_image-24202[3][1] 接收

wps_clip_image-7340[3][1] 不能接收

wps_clip_image-4340[3][1] 保存购买记录、打印

wps_clip_image-3843[3][1]

图27 更新销售信息状态图

④ 建立转移。按下列步骤建立状态转移。状态转移可以是转移到状态自己,也可以是两个不同状态之间的转移。

wps_clip_image-3915[3][1] 单击图素工具箱的图标wps_clip_image-15749[3][1],拖放到顾客购物建立一个转移到自己的转移。

打开其规范对话框,命名事件为“加入商品”(如图27所示)。

wps_clip_image-2643[3][1]

图28命名转移事件“加入商品”

wps_clip_image-12133[3][1] 单击图素工具箱的图标wps_clip_image-10217[3][1],从“顾客购物”拖放到“计价”。

wps_clip_image-10402[3][1] 同样建立其他转移。

wps_clip_image-17246[3][1] 如图27

所示,选择转移,命名转移。

完成上述操作,得到如图27所示的销售状态图。

1 设计模型基本概念

设计模型主要集中在类图、类、类属性、类操作和类与类之间的关联、关联基数等基本要素的细化(如图29所示)。

面向对象方法的特点之一就是将信息和影响信息的行为集中在一起,包装成类。类属性描述对象的属性信息。类操作是与类相关联的行为。操作分四个部分:操作名、操作参数、参数类型和操作返回值类型。参数是操作的输入变元。从设计模型类操作的描述可以知道,这和Java的类成员方法的定义已经很接近了。

wps_clip_image-18789[3][1]

图29 设计模型中的基本图素

2 建立设计模型

由分析模型继续细化,分析模型中的“销售表”和“商品档案表”类可以在设计模型中作为两个ADO类(ADO

Class),分别命名为“saleFrm”和“goodsFrm”。ADO

Class是与VB模块类型的一种。由分析模型中的边界类“销售管理窗体”可以转化为设计模型中的“销售管理窗体”窗体类。由于本系统比较简单,所以不再使用控制类。

1. 创建销售系统设计模型类图

(1)创建包

1)在浏览框中双击“设计模型”包下的【Main】,打开其类图。

2)在Main类图中创建五个包,分别命名为“库存管理子系统”、“订货管理子系统”、“身份验证子系统”、“统计分析子系统”和“销售管理子系统”(如图30所示)。

3)双击类图中的【销售管理子系统】,进入此包,Rose自动为此包建立一个Main类图。

wps_clip_image-28106[3][1]

图30 设计模型包的建立

(2)建立类

1)双击【wps_clip_image-29085[3][1]Main】,打开设计模型Main类图。

2)单击图素工具栏上的【wps_clip_image-5585[3][1]】,在类图Main的适当位置单击,创建一个新类,将该类命名为销售管理窗体。

3)双击【wps_clip_image-21022[3][1]销售管理窗体】,打开其规范对话框,将“销售管理窗体”的变体设置为【Form】(如图31所示),

wps_clip_image-15021[3][1]

图31 设计模型类的规范对话框

4)同样建立“goodsFrm”类和“saleFrm”类,其变体设为“ADO Class”(ActiveX数据对象)。

5)单击工具栏上的按钮【wps_clip_image-8203[3][1]】建立图素之间的关联,如图32所示。

wps_clip_image-27778[3][1]

图32 销售管理子系统初步类图

(3)增加类特征和方法

1)右击类图中的【goodsFrm】,在弹出的菜单中选择【New Attribute】。。

wps_clip_image-17500[3][1]

图33 增加类特征的一种方法

2) 设置类特征。浏览框中的选择的类特征(goodsFrm类的rs特征),右击,从弹出菜单中选择【Open

Specification】。在出现的类特征规范窗口中可以对类特征的数据类型(Type)、变体(Stereotype)、初始值(Initial)和可见性(Export

Control)等进行设置(图34)。

wps_clip_image-11326[3][1]

图34 设置类特征的属性

设置类特征的属性也可以通过下列步骤:

打开图32设计模型销售管理子系统的类图,选择goodsFrm类,右击,在弹出菜单中选择【Open

Specification】,打开类规范对话框,单击【Attributes】。选择类特征(rs),

右击,在弹出菜单中选择【Specification】,打开类特征规范对话框(图26),这时可以对类特征的数据类型(Type)、变体(Stereotype)、初始值(Initial)和可见性(Export

Control)等进行设置。

wps_clip_image-28857[3][1]

图35 类特征的属性规范对话框

3)添加类方法。浏览框中的选择类【goodsFrm】,右击,在弹出菜单中选择【New Operation】。

4)设置类方法有关的属性的步骤和设置类特征有关的属性雷同。

右击浏览框中的类的方法,在弹出菜单中选择【Open

Specification】,打开类方法属性规范窗口,设置方法的变体、返回类型、参数、可见性等属性值(图36)。

wps_clip_image-3991[3][1]

图36 类方法有关属性的设置

5)设置关联属性。打开设计模型销售管理子系统类图Main,选择“销售管理窗体”到“goodsFrm”类间的关联,双击,打开关联属性规范对话框,选择【Role

A

General】,在Role字段中输入作用名为“goods”(图37)。同样,将另一条关系的Role命名为“sale”。同样可以设置关联其他属性。

wps_clip_image-3073[3][1]

图37 关联规范对话框

完成上述操作得到图38。

wps_clip_image-29159[3][1]

图38售子系统类图

(4)建立系统数据库类关联

1)建立所有子系统的数据库类图,一共用5个ADO类:“goodsFrm”、“saleFrm”、“wasteFrm”、“UserFrm”和“Provider”。

2)在设计模型包下创建一个新的类图,命名为“DataBase Design”。

3)将5个ADO类拖到“DataBase Design”类图中。

4)使用工具栏上的【wps_clip_image-15413[3][1]】,建立“UserFrm”类和“goodsFrm”之间的两个关联,并取消箭头。

5)两个类具有两个关联主要是因为如果是售货员和goodsFrm类之间的关联,那么goodsFrm

将作为这条关联的关联类;如果是库存管理员和goodsFrm间的关联,那么goodsFrm 将作为关联的关联类。

6)单击工具栏上的【wps_clip_image-246[3][1]】,单击“售货员”,并拖放到“saleFrm”。同样的方法建立另一个关联。

7)双击关联,出现规范对话框,分别选择【Role A Detail】和【Role B Detail】,设置关联基数。

8)在关联的规范对话框中输入关联名。

完成操作后的数据库类图如图36所示。

wps_clip_image-16551[3][1]

图36 类间关系图

2. 使用序列图和协作建立系统动态模型
(1)建立序列图

1) 在“销售管理子系统”包下新建一个序列图,命名为“salegoods”。

2)将用例视图的业务模型“业务角色和业务员工”包下的“售货员”,设计模型下的“销售管理子系统”中的“销售管理窗体”、“goodsFrm”和“saleFrm”三个类拖放到序列图中。

3)建立消息,这里的消息是从上到下以时间顺序进行的。

4)双击消息,打开规范对话框,在【name】下拉列表框中选择适当的操作,将消息映射到操作。

完成操作后的序列图如图37所示。

image[6][1]

图37 映射操作的序列图

(2)在序列图中表达条件
在序列图中加条件,使用 “[…]” (中括号)并将条件放置于消息名称之前或之上。当此条件满足,消息才能送出。

(3)建立协作图
通过选择browser下的create Collaboration

Diagram来自动生成映射到对应的协作图(如图38所示)。

image[2][1]

发表评论