1、使用 Visio进行 UML建模 1、 VISIO中的 UML建模环境 Microsoft Visio“ UML 模型图”解决方案为创建复杂软件系统的面向对象的模型提供全面的支持。包括下列工具、形状和功能: n “ UML 模型资源管理器”,它提供模型的树视图和在视图间进行浏览的手段。 n 预定义的智能形状,表示 UML 标注中的元素并支持 UML 图表类型的创建。在程序控制下,这些形状的运行方式同 UML 语义学相符。 n 易于访问“ UML 属性”对话框,可通过这些对话框将名称、特性、操作和其他属性添加到 UML 元素。 n 标识和诊断错误(例如丢失数据或不正确地使用 UML 表示法)的动
2、态语义错误检查。 n 对用 Microsoft Visual C+ 6.0 或 Microsoft Visual Basic 6.0 创建的项目进行反向工程,以生成 UML 静态结构模型的能力。 n 使用 C+、 Visual C# 或 Microsoft Visual Basic 根据 UML 模型中的类定义生成代码框架。 n 标识特定于语言的错误的代码检查实用程序,这些错误可使代码无法用您为生成代码指定的目标语言编译 出来。 n 为 UML 静态结构、活动、状态图、组件和部署图创建报告 模型资源管理器的使用 当您打开“ UML 模型图”解决方案时,您就打开了一个建模环境,并且从开始时模型便
3、已经就位。 “模型资源管理器”显示您的 UML 模型的层次视图,从整个系统到软件包再到数据类型。 (图 1) 如果没有显示出“模型资源管理器” ,可以单击“ UML”菜单 “视图” “模型资源管理器” “ UML 模型资源管理器”中的树状视图表示您的总体系统模型。您创建的图表都是该模型的视图。 表示您当前正在建模的系统中。若要添加模型 ,请在“ UML”菜单上单击“模型”。 在这种情况下,将您系统的一个模型或抽象内容表示为静态结构模型。要重命名树状视图中的任何图标,请对图标的文本单击一次,然后再单击一次该文本。键入新的名称。 表示静态结构模型中最上层的包。包是一种容器。此软件包含有所有静态结构
4、模型元素。 默认情况下,新模型所包括的包会含有常见的数据类型。您可以创建含有您自己的数据类型的包。 单击加号 (+) 显示包的内容。单击减号隐藏包的内容。 得到图( 1)的步骤如下: A 将最顶层包的默认名称改为“ PetShop”:单击右键,选择“重 命名” B 将包“静态模型“改名为“ Design Model”:单击右键,选择“重命名” C其他包命名依次类推 2、用例图 (USE CASE Diagram)的使用 2.1 用例图的组成 用例图表示处于同一个系统中参与者和用例之间的关系。是一组动作序列(包括它的变衍生物)的描述,系统执行该动作序列来为参与者产生一个可观测的结果值。在 VIS
5、IO中包括三部分: 1. 角色 (ACTOR) 表示活动的发起者, VISIO中用 表示。 2. 用例 (USE Case) 实际的场景,如登陆系统 ,物品进仓, VISIO中用 表示。 3. 系统边界 指示系统用例的边界,用来确定系统内部和外部之间的界限。用矩形框表示。 2.2 创建用例图 假设 (1),我们有个仓库系统,有三个活动 (用例 ):物品进仓,物品出仓和显示物品的库存 .当出仓的时候要检查物品的库存情况,如果库存小于 5 就不能出仓。活动的执行者是仓库管理员 (这些都是来自需求文档 ),出入仓时管理员需要开据出入仓单 .本示例我们主要考虑出仓情况。 2.2.1 建立角色 (Act
6、or) 在“图 1”中选择“ Actors package”,单击右键,选择“主角” ,输入“名称”,如图 2、图 3所示: 图 2 图 3 2.2.2 建立用例 在图 1中选择“ Usercases” ,单击右键 ,选择“用例” ,输入“名称”,如图 4,图 5所示: 图 4 图 5 2.2.3 建立角色和用例的通信 在 VISIO中表示为: 2.2.4 建立用例间的关系 A.使用关系 在用例图中,将“使用”关系形状拖到绘图页上; 将“使用”端点(不带箭头)粘附到使用其他用例方式的“用例”形状的连接点 *上; 将“使用”端点(带有箭头)粘附到正使用的用例的连接点上; 双击“使用”形状,打开“
7、 UML 归纳属性”对话框。添加 属性值,然后单击“确定”。 B.扩展关系 在用例图中,将“扩展”形状拖到绘图页上; 将不带箭头的“扩展”端点 +粘附到提供扩展的用例的连接点 +上; 将带有箭头的“扩展”端点粘附到基础用例的连接点上; 双击“扩展”形状,打开“ UML 归纳属性”对话框。添加属性值,然后单击“确定”。 2.2.5 建立用例图 在图 1中选择“ Usecase Model”,单击右键 ,选择“用例图”,这里保留默认的名称。然后就可以将我们已经建立的角色和用例从左边的树拖动到右边的空白区了,同时还需要建立系统边界,从假设 (1)我们得知出仓 要检查物品的库存,因此用例“货物出仓”要
8、使用用例“显示物品的库存”(没有“显示库存”用例“货物出仓”用例就不完整)。而对于用例“物品进仓”,仓库管理员也可以在进仓的同时来检查物品的库存情况,因此两者之间是扩展关系(“货物出仓”用例本身功能完整,但管理员也可以在某些时候查看库存),另外仓库管理员还可以直接查看库存信息,完成后的用例图如下: 图 6 注意:如要了解创建用例图的更多知识,请参看 Visio 联机帮助。 3、活动图的建立 3.1 活动图的组成 1. 泳道:用来表示活动图中的责任,是个矩形 ; 2. 状态:用 来表示某个活动或动作,分为“动作状态”,“状态”,“初始状态”,“最终状态”; 3. 控制流:表示从一个状态到另一个状
9、态的变化。 3.2 创建活动图 根据假设 (1)我们创建物品出仓的活动图 ,步骤如下 : i. 在图 1中选择包“ Usecases”,单击右键选择“活动图”; ii. 将泳道拖到右边,双击泳道重命名为“物品出仓”。将“初始状态”从左边拖动到右边空白区 iii. 将三个“动作状态” 拖到右边,分别命名为“申请出仓”,“选择仓库”和“判断库存”,然后在三者之间增加控制流 ; iv. 将“判定”流程 拖到右边,增加两个控制流,双击控制流分 别输入临界表达式:成功和失败; v. 将“最终状态”拖到右边 .连接步骤 4中的两个控制流。 最后的结果如下: 注意: 1:该图的“合并”(由顶至下第三个菱形)
10、是 UML 工业标准, Visio暂时不支持该图标。 2:如要了解创建活动图的更多知识,请参看 Visio 联机帮助。 4、静态结构图 (Static Structure Diagram)的使用 在 VISIO中有两种静态结构图 :概念静态结构图和类静态结构图。概念静态结构图是表示现实世界中的概念以及它们之间的关系。它侧重于关系和属性而不是方法,并有助于您了解开发的系统所 针对的领域内的术语。 类静态结构图是将软件系统分解为各个部分。不过在类图中,各部分指的是类,代表已经完整定义的软件实体,而并不是代表现实世界概念的对象。除属性和关联之外,类图还可指定操作、方法、界面和依赖关系。 我们重点介绍
11、类静态结构图。 4.1 类静态结构图的组成 类静态结构图是由类或对象组成的,在 VISIO 中用 来表示,类之间的关系主要有关联,依赖和归纳三种: 关联是用 、 、 表示 依赖是用 表示 继承 (归纳 )是用 表示的 4.2 创建类静态结构图 在图 1中选择“ staticview”,单击右键选择“ 静态结构图”,然后从右边选择Class图标拖动至右边的空白区中: 图 8 4.2.1 类的建立 将类的图标从左边拖动至于右边。输入类的名称、属性和方法: 图 9 图 10 图 11 根据假设 (1),仓库系统里有如下类: GoodsOutput(出仓单 ),GoodsOutputItem(出仓项目
12、 ),StoreHouse(仓库类 )、Product(物品类 )、 Manager(仓库管理员类 )、 StoreHouseControl(仓库控制类 )、People(人员类 ),依次建立。 4.2.2 类间关系的建 立 通过分析我们得知一个仓库里可以包含有很多的物品,即两者是关联关系(一对多 )。而 Manager是从 People继承而来。因此可以使用“继承”图形。 关联关系: 1. 将一个“二元关联”形状从“ UML 静态结构”模具拖到要关联的类旁边的绘图页上; 2. 将关联形状的端点粘附到该类形状的连接点 *上; 3. 双击该“关联”形状,打开其“ UML 属性”对话框,然后输入或
13、选择要设定的属性值; 4. 单击“确定”。 继承关系: 1. 将“继承”形状从“ UML 静态结构”模具拖到要关联的类或包旁边的绘图页上。 2. 将箭头旁边的端点粘附到更普通元素的连接 点 *上。将没有箭头的端点粘附到更具体元素的连接点上。 3. 双击该“归纳”形状。在“ UML 归纳属性”对话框中,添加名称、构造型、鉴别器和其他属性值,然后单击“确定”。 静态图如下: 注意:如要了解创建静态结构图的更多知识,请参看 Visio 联机帮助。 5、序列图 (Sequence Diagram)的建立 序列图显示参与交互作用的角色或对象,以及它们生成的按时间排序的事件。通常,序列图显示特定用例实例产
14、生的事件。 序列图中的纵向维代表时间,按时间先后依次向下排序。横向维代表不同的角色或对象。 下面就根据假设 (1)来画一个用例“物品出仓”的序列图 1在图 1中选择“ Usecase Realization”,单击右键选择“序列图”; 2.将“对象生命线” 拖入右边空白区,双击“对象生命线”,输入名称“ aManger”,将“分类器”设为“仓库管理员”,单击确定。这样一个对象就建立好了。类静态结构图中其它的 Class依样照搬: 3.将“激活”拖到“ GoodsOutput 对象生命线”上,对于其余的对象处理方式类似; 4.添加“消息 (调用 )”到两个“激活”之间。例如对于 GoodsOut
15、put 生命线和 StoreHouse生命线,当添加了“消息 (调用 )”以后,表示类 GoodsOutput 会创建类 StoreHouse 的一个实例,对于物品出仓用例,我们首先需要确定出仓的货物,所以在此我们调用相应的方法,我们首先从左边的工具栏拖动“消息”,并连接相应的激活,结果如下图所示。 5.双击“消息 1”,如果 GoodsOutput 类没有这个方法会自动弹出一个添加方法的对话框,由于我们已经添加了这个方法,所以此处我们可以直接选择相应的操作,若果存在参数,我们可以通过实参来调整参数名称,如图: 6.根据假设 (1),出仓的时候需要检 查物品的库存 (小于 5 就不能出仓 ),
16、因此StoreHouse需要一个 GetProductStorage方法来得到物品的库存; 7.库存返回后,根据库存执行不同的调用,如果库存不小于 5,创建新的GoodOutputItem 实例; 8.如果返回的库存小于 5,使用 来添加返回“ Nothing Added”。最后得到的序列图如下: 注意:如要了解创建序列图及 UML 其他图的更多知识,请参看 Visio 联机帮助。 6 、 VISIO与 MS .NET 6.1 VISIO生成 .NET代码 从 UML图生成相应的代码我们称为 正向工程 ,在 Visio中可以很方便生成 .Net的代码。 1.单击“ UML”选项 “代码” “生成”,此时会弹出一个对话框 .在里面选择要生成代码的包; 2.选择“目标语言”和“位置”,单击确定。 6.2从 .NET生成 VISIO中的 UML图 由代码生成 UML图我们称为反向工程,在 .Net里可以很方便的生成 UML图。 1. 打开 .Net项目,选择“项目” “ UML” “反向工程: 2. 输入要生成的 VISIO文件命 .单击保存。 参考资料 (1) Microsoft Visio 帮助文档