分享
08.UML分析与设计(2018年上-第26期打印版本).doc
下载文档

ID:3388568

大小:1.70MB

页数:17页

格式:DOC

时间:2024-04-15

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
08. UML 分析 设计 2018 26 打印 版本
UML分析与设计 适用班级:软件设计师 主讲:邓少勋 Q Q:154913686 网址: E-Mail:bitpx@ 分值说明:早上试题考2-5分 下午试题考15分 比特培训中心 贵州·贵阳 课程:UML分析与设计 主讲:邓少勋 版权所有: 1. UML(UNIFIED MODELING LANGUAGE)概述 1 1.1 UML是什么? 1 1.2 UML的组成 1 1.3 UML的功能 1 2. UML图(重点) 1 2.1 用例图 1 2.1.1 用例 1 2.1.2 参与者(活动者) 1 2.1.3 用例图 1 2.1.4 包含和扩展 1 2.1.5 用例模型 2 2.2 类图 2 2.2.1 类 2 2.2.2 类之间的关系 2 2.2.3 类图 5 2.3 对象图 5 2.3.1 2004年5月下午试题试题三 6 2.4 功能复用及解题方法 8 2.4.1 引用机制(聚合或组合) 8 2.4.2 继承机制(泛化的反关系)实现功能复用 8 2.4.3 两者对比 8 2.5 顺序图(序列图) 9 2.5.1 2004年11月下午试题三(15分) 10 2.6 协作图 11 2.7 状态图 11 2.8 活动图 12 2.8.1 基本活动图 12 2.8.2 带泳道的活动图 12 2.9 构件图 13 2.10 部署图 14 2.11 各种图总结 14 3. 视图 14 3.1 用例视图 14 3.2 设计视图 15 3.3 过程视图 15 3.4 实现视图 15 3.5 配置视图 15 I 课程:UML分析与设计 主讲:邓少勋 版权所有: 1. UML(Unified Modeling Language)概述 1.1 UML是什么? n UML是一种语言。 n UML只是一种可视化的语言。 n UML是一种可用于详细描述的语言。 n UML是一种构造语言。 n UML是一种文档化语言。 n UML是一种描述面向对象软件分析和设计结果的语言。 错误说法:UML是指导软件开发的思想。 1.2 UML的组成 UML由模型元素、扩展机制、图及视图等部分组成,由模型元素或扩展机制构成图,由图构成视图。 1.3 UML的功能 n 为软件系统的产出建立可视化模型 n 规约软件系统的产出 n 构造软件系统的产出 n 为软件系统的产出建立文档 2. UML图(重点) 由模型元素和扩展机制构成。包括9种不同的图,分为表示系统静态结构的静态模型(包括用例图,类图,对象图、构件图,部署图),以及表示系统动态结构的动态模型(包括顺序图,协作图,状态图,活动图)。 注意:顺序图和协作图统称为交互图,用例图属于静态模型还是动态模型是有争议的! 2.1 用例图 2.1.1 用例 用例表示系统的功能,一个用例是系统功能的一个通用描述,系统的用例构成了系统的所有使用功能。 可以将用例应用到整个系统,也可以将用例应用到系统的一部分,如子系统等。一个系统通常需要多个用例来描述系统需求。 用例表示为一个椭圆。 2.1.2 参与者(活动者) 代表与系统交互的人、硬件设备或另一个系统。活动者不是系统的组成部分,活动者存在于系统的外部,是虚拟的概念。用一个小人来表示活动者,如图 2.1所示。 图 2.1 参与者 2.1.3 用例图 用例图主要描述系统和外部环境的关系和系统提供的服务,以及外界想采用何种方式与系统进行交互,定义的是系统的功能需求。 用例图中包含系统、活动者、用例以及元素之间的各种关系(泛化,关联、依赖)等模型元素,如图显示了一个个人图书管理系统的用例如图 2.2所示。 图 2.2 用例图 上图显示了一个个人图书管理系统的用例图。其中,“新增书籍信息”,“查询书籍信息”,“修改书籍信息”,“登记外借情况”,“查询外借情况”和“统计金额与册数”等都是用例的实例。 用例图主要用来为系统的需求建模。系统的全部或大部分功能需求都可以表达为用例。需求建模规定系统应该做什么,但不涉及到怎样做,所以用例图用于面向对象的需求分析阶段。 2.1.4 包含和扩展 两个用例之间的关系主要可以概括为两种情况: 1. 用于重用的包含关系,用构造型《include》表示; 2. 用于分离出不同的行为,用构造型《extend》表示。 n 包含关系 当可以从两个或两个以上的原始用例中提取公共行为,或者发现能够使用一个组件来实现某一个用例的部分功能是很重要时,应该使用包含关系来表示它们,如图 2.3所示。 图 2.3 包含关系 n 扩展关系 如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种事情。我们可以将这个用例分为一个主用例和一个或多个辅用例,描述可能更加清晰。如下图所示。 图 2.4 扩展关系 2.1.5 用例模型 描述的是外部执行者(Actor)所理解的系统功能,由若干个用例图构成。用例模型用于需求分析阶段,它的建立是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格达成的共识。首先,它描述了系统的功能需求;其次,它将系统看作黑盒,从外部活动者的角度来理解系统;另外,它驱动了需求分析之后个阶段的开发工作,从而影响开发工作各个阶段和UML的各个模型。 用例模型是软件系统后续开发活动的基础。 2.2 类图 在面向对象建模技术中,我们将客观世界的实体映射为对象,并归纳成一个个类,类(Class)、对象(Object)和它们之间的关联是面向对象技术中最基本的元素。对于一个想要描述的系统,其类模型和对象模型提示了系统的结构。 2.2.1 类 在UML中,类的可视化表示为一个划分成3个格子的长方形(下面两个格子可省略)。在下图中,“书籍”,“借阅记录”等都是一个类。最顶部的格子包含类的名字, 中间的格子包含类的属性(public,private,protected,分别用“+”,“-”,“#”号表示),最下面是类的操作,类如图 2.5所示。 图 2.5 类模型元素 类可以分为3种类型:实体类(保存数据和维护数据之间的关系)、接口类(负责和外界交互)、控制类(负责业务及协调实体类和接口类工作的)。 2.2.2 类之间的关系 在类图中,类与类之间有4个很重要的关系:依赖关系、泛化关系、关联关系、实现关系。 1. 依赖关系 依赖是两个事物之间的语义关系,其中一个事物发生变化会影响另一个事物的语义。有两个元素A,B,如果修改元素A的定义可能会引起对另一个元素B的定义的修改,则称元素B依赖(Dependency)于元素A。使用带箭头的虚线表示依赖关系(A,B分别为两个类中的元素,箭头指向X),如图 2.6所示。 图 2.6 依赖关系 依赖关系有如下四种(假设B类依赖A类): (1) A类是B类的一个成员变量 class B:public shape { private: A x_circle; public: void display() { x_circle.displayIt(); } }; (2) A类是B类方法中的一个参数 class B { public: void f1(A obj); } (3) A类向B类发送消息,从而影响B类发生变化 class A { public: void f1() { B::staticF(1,2); b.f1(); } } (4) B类继承A类 class A { public:do(){……}; } class B:public A{……} 注意:依赖程度最高的继承。 2. 泛化关系 又叫做概括关系。就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说,子类是从父类中继承的,而父类则是子类的泛化。使用带空心箭头的实线表示,箭头指向父类。泛华图形元素如图 2.7所示。 图 2.7 泛华图形元素 泛化关系有如下特点: (1) 父类所具有的属性、操作,子类都有; (2) 子类中除了与父类一致的信息外,还包括自己的信息,父类称为一般类,子类称为特殊类; (3) 子类对象能完成父类对象的一切功能; (4) 是一种“is-a”的关系。 3. 关联关系 关联(Association)表示两个类之间存在某种语义上的联系,描述一组对象之间连接的结构关系。关联关系一般都是双向的,即关联的对象双方彼此都能与对方通信。根据关联的不同含义,关联又可分为:普通关联、递归关联、或关联、有序关联、三元关联、聚合和组合等。本节重点介绍普通关联、聚合和组合三种关联。 (1) 普通关联 普通关联是最常见的一种关联。只要类与类之间存在连接关系就可以用普通关联表示。普通关联的图标是一条直线。 如图 2.8所示是关联在类图中的表示。一个关联至少有两个关联端,每个关联端连接到一个类,关联端是有序的。 图 2.8 普通关联 n 名字 可以在关联的一个方向上为关联取一个名字,而在另一个方向上取另一个名字或不取名字。关联的名字最好是能够反映类之间的关系的动词。为避免混淆,在名字的前面或后面带一个表示关联方向的黑三角,黑三角的尖角指明这个关联只能够用在尖角所指的类上。 n 导航 关联的方向也可以用在关联端加上箭头来表示,这些箭头起导航的作用。关联可以是单向的,也可以是双向的。如果关联是双向的,则不必指出方向箭头。 n 重复度(Multiplicity) 又称多重性,指的是一个类的实例能够与另一个类的多少个实例相关联,多重性表示为一个整数范围n..m ,整数n定义所连接的最少对象的数目,而m则为最多对象数(当不知道确切的最大数时,最大数用*号表示)。最常见的多重性有: 0..1 表示0到1个对象 0..*或* 表示0到多个对象 1..* 表示1到多个对象 3..15 表示3到15个对象 5 表示5个对象 例如:经理与员工之间的关系则应为1对0..*的关系,也就是一个经理可以领导0个或多个员工。 学生与选修课程之间的关系就可以表示为0..*对1..*的关系,也就是一个学生可以选择1门或多门课程,而一门课程有0个或多个学生选修。 如果图中没有明确标明关联的多重性,则意味着是1,多重性标识在表示关联关系方向上直线的末端,如图 2.9所示。 图 2.9关联的多重性示例 如图 2.9所示中表示“一个人参加一个会议,一个会议可以有一个或多人参加”。 n 角色 在关联的类图标旁还可以标出类的角色名。任何关联关系中都会涉及到与此关联有关的角色,即与此关联相连的对象所扮演的角色。例如,在下图中,类Account与类AccountGroup关联,类Account又与类Password关联,类Account在这两个关联中的角色分别是user和owner,而Password类在关联中的角色是key。 关联中的角色通常用字符串命名,并放置在类图中与此角色有关的关联关系(直线)的末端,紧靠使用该角色的类。 图 2.10关联的角色与可见性示例 如图 2.10所示的图形对应的代码定义为: class AccountGroup { public: Account *user[100]; …… }; class Account { private: Password key; }; AccountGroup obj; n 可见性 某些情况,需要限制关联外部的对象对于该关联的可见性。如上图所示,给出一个Account对象,可以找到相应的Password对象,但是,由于Password是Account私有的,它不应该被外部对象访问,因此如果给出一个AccountGroup对象,虽然可以导航到Account对象,但不应该看到Account对象的Password对象。 在UML中,通过对角色名附加可见性符号“+”、“-”和“#”,分别表示3种可见性:公共可见性,私有特性和保护可见性。 (2) 聚合关系 聚合(Aggregation)是一种特殊形式的关联。聚合表示类之间的关系是整体与部分的关系(整体类和局部类无共同的生命周期)。在UML中,使用一个带空心的菱形的实线表示,空心菱形指向是代表“整体”的类,如下图所示。聚合关系中可以出现多重性、角色(仅用于表示部分的类)和限定符,也可以为聚合关系命名,图形元素如图 2.11所示。 图 2.11 聚合关系图形元素 例如主板(Mainboard)、CPU、内存(Memory)等都是计算机(Computer)的组成部分,因此,在Computer类与Mainboard类、CPU类或Memory类之间的关系都是聚合关系,如图 2.12所示。 图 2.12 聚合关系示例 代码为: class Computer { private: Mainboard *m; CPU *c; Memory *me; } (3) 组合关系 又叫组装关系,是聚合的变种,也是关联的特例,其表示是一种“has -a”关系,如鸟类和翅膀类。在一个组合关系中,一个对象一次只能是一个组合的一部分;另外,在组合关系中,“整体”负责“部分”的创建和破坏。使用带有实心菱形的实线表示,如图 2.13所示。 图 2.13 组合图形元素 4. 实现关系 实现关系是用来规定接口和实现接口的类或组件之间的关系,其中的一个类指定了由另一个类保证执行的契约。接口是操作的集合,这些操作用于规定类或组件的服务。在UML中,使用一个带空心箭头的虚线表示。 图 2.14 实现关系图形元素 2.2.3 类图 对于软件系统,其类模型和类图(Class Diagram)描述类和类之间的静态关系。通常,一个典型的系统有多个类图。在一个类图中不一定要包含系统中所有的类,同时一个类也可以加到几个类图中。在类图的基础上,状态图、协作图等进一步描述了系统其他方面特性。类图也是构件图和部署图的基础。类图如图 2.15所示。 图 2.15 类图示例 2.3 对象图 UML中对象图与类图具有相同的表示形式。对象图可以看做是类图的一个实例:对象之间的链是类之间的关联的实例。对象与类的图形表示相似,均为划分成两个格子的长方形(下面的格子可以省略)。上面的格子是对象名,对象名下有下划线:下面的格子记录属性值。链的图形表示与关联相似。对象图常用于表示复杂的类图的一个实例。 如图 2.16所示,图a为类图,抽象地显示了类以及它们之间的关系,图b为对象图,是类图a的一个实例表示。 图 2.16对象图与类图示例 图 2.17 对象 如图 2.17所示,a为控制对象,b为实体对象,c为边界对象。 n 控制对象:控制对象负责业务逻辑,如一个窗口上有一个删除用户的按钮,这个窗口就是边界对象。 n 实体对象:实体对象负责数据的持久化,如点击按钮将请求传到用户管理类,负责删除用户的同时删除用户的其他子信息,用事务控制,这就是控制对象。 n 边界对象:边界对象负责和用户进行交互,如实体对象如用户信息在数据库对应的用户表,对它进行删除操作。 以上的三种对象对应了MVC软件框架,MVC(Model-View-Controller,模型-视图-控制器)是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 n Model(模型):用于存储和处理应用程序数据逻辑的部分,是应用程序的核心(比如数据库记录列表)。 n View(视图):应用程序中负责显示数据(数据库记录)的部分,通常视图是依据模型数据创建的。 n Controller(控制器):应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据(写入数据库记录)。 2.3.1 2004年5月下午试题试题三 阅读下列说明以及图3-1和图3-2,回答问题1、问题2和问题3,将解答填入答题纸的对应栏内。 【说明】某电话公司决定开发一个管理所有客户信息的交互式网络系统。系统的功能如下: 1.浏览客户信息:任何使用Internet的网络用户都可以浏览电话公司所有的客户信息(包括姓名、住址、电话号码等)。 2.登录:电话公司授予每个客户一个帐号。拥有授权帐号的客户,可以使用系统提供的页面设置个人密码,并使用该帐号和密码向系统注册。 3.修改个人信息:客户向系统注册后,可以发送电子邮件或者使用系统提供的页面,对个人信息进行修改。 4.删除客户信息:只有公司的管理人员才能删除不再接受公司服务的客户的信息。 系统采用面向对象方法进行开发,在开发过程中认定出的类如下表所示: 【问题1】 在需求分析阶段,采用UML的用例图(use case diagram)描述系统功能需求,如图3-1所示。请指出图中的A、B、C和D分别是哪个用例? 图3-1 【问题2】 在UML中,重复度(Multiplicity)定义了某个类的一个实例可以与另一个类的多少个实例相关联。通常把它写成一个表示取值范围的表达式或者一个具体的值。例如图 3-2 中的类 InternetClient和CustomerList,InternetClient 端的“0..*”表示:1个 CustomerList 的实例可以与 0 个或多个 InternetClient 的实例相关联;CustomerList 端的“1”表示:一个InternetClient的实例只能与一个CustomerList的实例相关。 请指出图3-2中(1)到(4)处的重复度分别为多少? 【问题3】 类通常不会单独存在,因此当对系统建模时,不仅要识别出类,还必须对类之间的相互关系建模。在面向对象建模中,提供了四种关系:依赖(dependency)、概括(generalization)、关联(aassociation)和聚集(aggregation)。请分别说明这四种关系的含义,并说明关联和聚集之间的主要区别。 n 解析及参考答案: 目标:uml类图和代码进行相互转换。上图CustomerList和CompanyCustomer类对应的代码段可编写如下: class CustomerList { private: Customer *CustomerArray[1000]; //。。。。 } class CompanyCustomer:public InternetClient { private: Customer _customer; public: bool Login(…) { _customer.check_pwd(…) //省略 } char *ViewMyInfo(…) { _customer.showInfo(…); } bool Update(…){…}; } 【问题1】 A:浏览客户信息; B:修改个人信息;C:登录;D:删除客户信息。 【问题2】 (1)1 (2)0..* (3)0..1 (4)0..1 【问题3】 四种关系如下: n 依赖表示类之间的使用关系。 n 概括(泛化)表示一般类和特殊类之间的关系。 n 关联和聚集都表示实例之间的结构关系。 n 关联和聚集的区别:关联指明一个类的对象与另一个类的对象间的联系;两个类之间的关联表示了两个不同地位类之间的结构关系,这两个类在概念上是同级的。聚集是一种特殊的关联,它表示整体与部分的关系。 2.4 功能复用及解题方法 2.4.1 引用机制(聚合或组合) 就是让一个类或几个类作为其他类的成员,作为成员的类会被其他类引用,从而完成其他类所需要的功能。 类A定义: class A { public: 打人(); } 类B引用类A完成打人的功能(从类B的对象可以导航到类A的对象): class B { private: A *打手; public: B() { 打手 = new A; } void 老夫打人() { 打手.打人(); } void 换打手() { 打手 = new A(); } } 使用: B b; b.老夫打人(); b.换打手(); b.老夫打人(); 2.4.2 继承机制(泛化的反关系)实现功能复用 把几个类中相同的部分提取出来,放到共同的基类里。然后派生类体现不同的具体实现部分,答题时可上下对照父类和派生类,从而得到答案。 类C通过继承完成打人的功能: class C:private A { public: void 老夫打人() { A::打人(); } } 使用: C c; c.老夫打人(); 程序的UML类图如图 2.18所示。 图 2.18 类图 从上图,换个角度也可以理解成是把B类和C类的共同属性和行为提到了A类中。 2.4.3 两者对比 优先使用组合(聚合)(has-a)而不使用继承(泛化反关系)(is-a),原因如下: 1. 继承的优点 (1) 容易进行新的实现,因为其大多数可继承而来。 (2) 易于修改或扩展那些被复用的实现。 2. 继承的缺点 (1) 破坏了封装性,因为这会将父类的实现细节暴露给子类。 (2) "白盒"复用,因为父类的内部细节对于子类而言通常是可见的。 (3) 当父类的实现更改时,子类也不得不随之更改。 (4) 从父类继承来的实现将不能在运行期间进行改变。 3. 组合的优点 (1) 容器类仅能通过被包含对象的接口来对其进行访问。 (2) "黑盒"复用,因为被包含对象的内部细节对外是不可见。 (3) 封装性好。 (4) 被包含对象与容器对象之间的依赖关系比较少 (5) 每一个类只专注于一项任务。 (6) 通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。 4. 组合的缺点 (1) 从而导致系统中的对象过多; (2) 为了能将多个不同的对象作为组合块(composition block)来使用,必须仔细地对接口进行定义。 2.5 顺序图(序列图、时序图、循序图) 顺序图(Sequence Diagram)用来描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。顺序图允许直观地表示出对象的生存期,在生存期内,对象可以对输入消息做出响应,并且可以发送消息。 如图 2.19所示,顺序图是一个二维图形,存在两个轴。水平轴表示不同的对象,为对象维,即在图中的Client 、Factory、Product等。垂直方向为时间维,表示时间,表示对象及类的生命周期。 图 2.19 序列图 对象间的通信通过在对象生命线间画消息来表示。消息的箭头指明消息的类型。当收到消息时,接受对象立即开始执行活动,即对象被激活了。通过在对象生命线上显示一个细长矩形来表示激活。 n 同步消息:如果发出了一条消息后,只能等待接收该消息的对方返回一个反馈消息以后才能产生其他的行为,此消息称为同步消息,用实心三角箭头及实线表示。箭头上的方法表示被调用的方法,而箭头指向的对象为实现被调方法的对象,即箭头上函数定义体位于箭头指向的对象所属的类当中。 n 异步消息:如果发出了一条消息后,不需要等待接收该消息的对方返回一个反馈消息便能进行与其他对象的交互,则此消息称为异步消息,用空心箭头及实线表示。箭头上的方法表示被调用的方法,而箭头指向的对象为实现被调方法的对象,即箭头上函数定义体位于箭头指向的对象所属的类当中。 n 返回消息:表示调用一个方法后返回的消息,用实心三角箭头及虚线表示。 箭头上方为返回的消息,箭头指向的对象表示之前调用了返回该消息的函数。 ●(2012年上)UML序列图是一种交互图,描述了系统中对象之间传递消息的时间次序。其中,异步消息与同步消息不同, (40) 。下图中 (41) 表示一条同步消息, (42) 表示一条异步消息, (43) 表示一条返回消息。 (40)A.异步消息并不引起调用者终止执行而等待控制权的返回 B.异步消息和阻塞调用有相同的效果 C.异步消息是同步消息的响应 D.异步消息和同步消息一样等待返回消息 (41)A.1 B.2 C.3 D.4 (42)A.1 B.2 C.3 D.4 (43)A.1 B.2 C.3 D.4 ●下图所示的UML序列图中,(39)表示返回消息,Accunt类应该实现的方法有(40)。 (39)A.xfer B.check C.evaluation D.minus (40)A.xfer0 B.xfer()、plus()和minus() C.check()、plus()和minus() D.xfer()、evaluation()、plus()和minus() 2.5.1 2004年11月下午试题三(15分) 阅读下列说明和数据流图,回答问题1和问题3,将解答填入答题纸的对应栏内。 【说明】 某指纹门禁系统结构如图3-1所示,其主要部件有: 图3-1指纹门禁系统的体系结构图 主机(MainFrame)、锁控器(LockController)、指纹采集器(FingerReader)和电控锁(Lock)。 (1)系统中的每个电控锁都有一个惟一的编号。锁的状态有两种:“已锁住”和“未锁住”。 (2)在主机上可以设置每把锁的安全级别以及用户的开锁权限。只有当用户的开锁权限大于或等于锁的安全级别并且锁处于“已锁住”状态时,才能将锁打开。 (3)用户的指纹信息、开锁权限以及锁的安全级别都保存在主机上的数据库中。 (4)用户开锁时,只需按一下指纹采集器。指纹采集器将发送一个中断事件给锁控器,锁控器从指纹采集器读取用户的指纹并将指纹信息发送到主机,主机根据数据库中存储的信息来判断用户是否具有开锁权限,若有且锁当前处于“已锁住”状态,则将锁打开;否则系统报警。 该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图3-2是该系统类图的一部分;系统的动态行为采用UML序列图表示,图3-3是用户成功开锁的序列图。 图3-2 图3-3 【问题1】(6分)图3-2是该系统类图的一部分,依据上述说明中给出的术语,给出类Lock的主要属性。 【问题2】(5分)依据上述说明中给出的词语,将图3-3中的(1)~(5)处补充完整。 【问题3】(4分)组装(Composition)和聚集(Aggregation)是UML中两种非常重要的关系。请说明组装和聚集分别表示什么含义?两者的区别是什么? 2.6 协作图(通信图) 协作图(Collaboration Diagram)用于描述相互合作的对象间的交互关系和链接关系,强调的是参与交互作用的对象的组织结构。虽然顺序图和协作图都是用来描述对象间的交互关系,但侧重点不一样。顺序图着重体现交互的时间顺序,协作图则着重体现交互对象间的静态链接关系(对象的组织结构关系)。如图 2.20所示就是与顺序图相对应的协作图,可以从图中很明显地发现它与顺序图之间的异同点。 图 2.20 协作图 2.7 状态图 状态图(State Diagram)给出了一个状态机,用来描述一个特定对象的所有可能状态及其引起状态转移的事件。大多数面向对象技术都用状态图表示单个对象在生命周期中的行为。一个状态图包括一系列的状态及状态之间的转移。如图 2.21所示是一个数码冲印店的订单状态图实例。 图 2.21 状态图 如图所示,状态图包括以下几个部分。 n 状态:又称为中间状态,用圆角矩形框表示。 n 初始状态:又称为初态,用一个黑色的实心圆圈表示,在一张状态图中只能够有一个初始状态。 n 结束状态:又称为终态,在黑色的实心圆圈外面套上一个空间圆,在一张状态图中可能有多个结束状态。 n 状态转移:用箭头说明状态的转移情况,并用文字说明引发这个状态变化的相应事件是什么。 状态图适合用于表述在不同用例之间的对象行为,但并不适合于表述包括若干协作的对象行为。通常不会需要对系统中的每一个类绘制相应的状态图,而通常会在业务流程、控制对象、用户界面的设计方面使用状态图。 状态图用于模拟系统的动态特性。使用状态图可以对一个对象(类)的行为建模,也可以对一个子系统或整个系统的行为建模。 2.8 活动图 活动图就是通常所说的流程图,描述从活动到活动的流(不是消息流,也不是数据流,而是控制流)。 活动图是一种特殊的状态机。在该状态机中,大部分的状态都是活动状态,活动图中一个活动结束后将立即进入下一个活动(在状态图中状态的变迁可能需要事件的触发)。活动图的组成元素有:动作状态、活动状态、转移、分支、分叉、联结、泳道和对象流。 活动图用于以图形化的方式描述一个业务过程或者一个用例的活动的顺序流。 2.8.1 基本活动图 如图 2.22所示给出了一个基本活动图的例子。 图 2.22 活动图 正如图 2.22所示,活动图与状态图类似,包括初始状态、终止状态、以及中间的活动状态,每个活动之间,也就是一种状态的变迁。在活动图中,还引入了一下一个概念。 n 判定:说明基于某些表达式的选择性路径,在UML中使用菱形表示。 n 分叉与结合:由于活动图建模时经常会遇到并发流,因此在UML中引入了如上图所示的粗线来表示分叉和结合。 2.8.2 带泳道的活动图 在前面说明的基本活动图中,虽然能够描述系统发生了什么,但没有说明该项活动由谁来完成,可以通过泳道来解决这个问题。它将活动图的逻辑描述与顺序图、协作图的责任描述结合起来。如图 2.23所示。 图 2.23 带泳道的活动图 n 对象流:在活动图中可以出现对象。对象可以作为活动的输入或输出,对象与活动间的输入/输出关系由虚线箭头表示。如果仅表示对象受到某一活动的影响,则可用不带箭头的虚线来连接对象与活动。 n 信号:在活动图中可以表示信号的发送与接收,分别用发送和接收标志来表示。发送和接收标志也可与对象连接,用于表示消息的发送者和接收者。 ●(2014年上)对一个复杂用例中的业务处理流程进行进一步建模的最佳工具是UML (41) 。 (41)A.状态图 B.顺序图 C.类图 D.活动图 2.9 构件图 描述了组件和组件之间的关系,表示了组件之间的组织和依赖关系。它用来模拟系统的静态实现,是面向对象系统的物理方面进行建模时要用的两种图之一。它可以有效的显示一组构件及它们之间关系。构件图中通常包括构件、接口及各种关系。构件图如图 2.24所示。 图 2.24 构件图 通常构件指的是源代码文件、二进制代码文件和可执行文件等。而构件图就是用来显示编译、链接或执行构件之间的依赖关系。例如,在上图中,就是说明QueryCient.exe将通过调用QueryServer.exe来完成相应的功能,而QueryServer.exe则需要Find.exe来支持,Find.exe在实现时调用了Query.dll. 组件代表一个接口定义良好的软件模型,其是系统的一个物理的、可替代的部分,它遵循接口定义,并为接口提供了实现,一般情况下组件是开发环境中的实现文件。 组件特点如下: n -组件是物理的,非概念的; n -组件是可替代的,可以用遵循同一个接口的组件来代替另一个组件 n -组件是系统的一部分 通常来说,可以使用构件图完成以下工作: n 对源代码进行建模:这样可以清晰的表示出各个不同源程序文件之间的关系。 n 对可执行体的发布建模:如上图所示,将清晰的表示出各个可执行文件、DLL文件之间的关系。 n 对物理数据库建模:用来表示各种类型的数据库、表之间的关系。 n 对可调整的系统建模:例如对于应用了负载均衡、故障恢复等系统的建模。 注意:逻辑数据库建模使用类图。 2.10 部署图 部署图,也称为实施图或配置图,显示了基于计算机系统的物理系统结构。它和构件图一样,是面向对象系统的物理方面建模的两种图之一。部署图在构件图的基础上更进一步,描述系统硬件的物理拓扑结构及在此结构上执行的软件。部署图可以显示计算结点的拓扑结构和通信路径、结点上运行的软件构件,常常用于帮助理解分布式系统。 图 2.25为图 2.24构件图对应的部署图,这样的图可以使系统的安装、部署更为简单。 图 2.25 部署图示例 在部署图中,通常包括以下一些关键的组成部分: 1. 节点和连接 节点(node)代表一个物理设备及其上运行的软件系统,如一台UNIX主机、一个PC 终端、一台打印机、一个传感器等。 图 2.25中“客户端:个人PC”和“服务器”就是两个节点。用一个立方体表示一个节点,节点名放在左上角。节点之间的连线表示系统之间进行交互的通信路径,称为连接。通信类型则放在连接旁边的“<< >>”之间,表示所用的通信协议或网络类型。 2. 构件和接口 在部署图中,构件代表可执行的物理代码模块,如一个可执行程序。逻辑上它可以与类图中的包或类对应。如在图 2.25 中,“服务器”节点中包含“QueryServer.exe”、“Find.exe”和“Query.dll”3个构件。 在面向对象方法中,类和构件等元素并不是所有的属性和操作都对外可见。它们对外提供了可见操作和属性,称为类和构件的接口。界面可以表示为一头是小圆圈的直线。在图B部署图中,“Query.dll”构件提供了一个“查询”接口。 2.11 各种图总结 1. 用来描述逻辑方面的UML图有用例图、类图、对象图、状态图、活动图、协作图和序列图。 2. 用来描述物理方面的UML图有:构件图和配置图。 3. 4静:类图,对象图,构件图,部署图 4. 4动:顺序图,协作图,状态图,活动图顺序图,协作图统称为交互图。 5. 九种图形 (1) 用例图:用例图以图形化的方式描述系统与外部系统及用户的交互,其以图形化的方式描述了谁将使用系统,以及用户期望以什么方式与系统交互。 (2) 类图:类图是显示一组类、接口、协作以及它们之间关系的图。类图用于

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开