1、 众多的建模语言各有优点,大多类同,但仍存众多的建模语言各有优点,大多类同,但仍存在某些细微的差别,妨碍了用户之间的交流。在某些细微的差别,妨碍了用户之间的交流。 统一建模语言在这样的背景下产生。统一建模语言在这样的背景下产生。 1995年年10月:第一个公开版本月:第一个公开版本UM 0.8(Unified Method)。)。 1996年年6月:月:UM改名为改名为UML(Unified Modeling Language),发布,发布 UML 0.9。 1996年底:年底:UML占面向对象技术市场的占面向对象技术市场的85,成为可视化建模语言事实上的工业标准。成为可视化建模语言事实上的工
2、业标准。 现最新版本:现最新版本:UML2.0 UML是标准的建模语言,而不是标准的是标准的建模语言,而不是标准的开发过程。开发过程。 在不同组织和不同应用领域,在不同组织和不同应用领域,UML应用应用需采取不同的开发过程。需采取不同的开发过程。 1998年:年:RUP( Rational Unified Process)是一种典型的建模过程。是一种典型的建模过程。2. 标准建模语言标准建模语言UML的内容的内容UML的定义包括的定义包括UML语义语义和和UML表示法表示法两部分。两部分。UML的重要内容可以由五类图(的重要内容可以由五类图(9种图形)来定义:种图形)来定义:1)用例图)用例图
3、:从用户角度描述系统功能,并指出各功能从用户角度描述系统功能,并指出各功能2)静态图)静态图:包括类图、对象图和包图;包括类图、对象图和包图;类图类图2)静态图)静态图:包括类图、对象图和包图;包括类图、对象图和包图;对象图对象图包图包图3)行为图)行为图:描述系统的动态模型;描述系统的动态模型;4)交互图)交互图:描述对象间的交互关系;描述对象间的交互关系;交互图交互图5)实现图)实现图:如配置图,定义系统中软硬件的物理体系结构。如配置图,定义系统中软硬件的物理体系结构。3. 标准建模语言标准建模语言UML的应用领域的应用领域 UML适用于软件开发中从需求分析到测试的不适用于软件开发中从需求
4、分析到测试的不同阶段:同阶段: 需求获取需求获取:用例图、活动图:用例图、活动图 需求分析需求分析:类图、对象图和包图:类图、对象图和包图 系统分析与设计系统分析与设计:状态图、顺序图、合作图、:状态图、顺序图、合作图、活动图、部件图和配置图。活动图、部件图和配置图。 测试测试:单元测试用类图、集成测试用部件图和:单元测试用类图、集成测试用部件图和合作图、确认测试用用例图等。合作图、确认测试用用例图等。 UML常用于建立软件系统模型,但同样可常用于建立软件系统模型,但同样可用于描述非软件领域的系统,如:用于描述非软件领域的系统,如: 机械系统;机械系统; 企业机构或业务过程;企业机构或业务过程
5、; 处理复杂数据的信息系统;处理复杂数据的信息系统; 具有实时要求的工业系统或工业过程;具有实时要求的工业系统或工业过程; 等。等。 9.4 对象模型对象模型9.4.1 类图的基本符号类图的基本符号 1. 定义类定义类类名类名属性属性服务服务图图9.5 表示类的图形符号表示类的图形符号2. 定义属性定义属性 UML描述属性的语法格式:描述属性的语法格式: 可见性可见性 属性名:类型名初值属性名:类型名初值性质串性质串 可见性:公有(可见性:公有(public)/ +、私有(私有(private)/、保护(保护(protected)/# (没有默认可见性)(没有默认可见性) 性质串性质串:可能枚
6、举值或其它性质,如:可能枚举值或其它性质,如只读只读 例:例:管理员:管理员:String=“未定未定” 类变量实例:类变量实例:货单数:货单数:Integer(类变量在该类所有对象中的属性值相等)(类变量在该类所有对象中的属性值相等)3. 定义服务(操作)定义服务(操作) UML描述操作的语法格式:描述操作的语法格式: 可见性可见性 操作名(参数表):返回值类型操作名(参数表):返回值类型性质串性质串 参数的语法:参数的语法: 参数名:类型名默认值参数名:类型名默认值 Show(x:integer=0, y :integer, z :integer):integer9.4.2 表示关系的符号
7、表示关系的符号 1. 关联关联 1)普通关联)普通关联作家作家计算机计算机使用使用被使用被使用*1*图图9.6 普通关联示例普通关联示例重数(重数(multiplicity)的表示方法:的表示方法: 01 表示表示 0到到1个对象;个对象; 0* 或或* 表示表示 0到多个对象;到多个对象; 1+ 或或1* 表示表示 1到多个对象到多个对象; 115 表示表示 1到到15个对象;个对象; 3 表示表示 3个对象。个对象。 2)关联的角色)关联的角色人人结婚结婚丈夫丈夫妻子妻子图图9.7 关联的角色关联的角色上图是一个递归关联的例子。上图是一个递归关联的例子。这种情况下,标明角色名有助于理解类图
8、。这种情况下,标明角色名有助于理解类图。 3)限定关联)限定关联目录目录文件文件文件名图图9.8 限定关联限定关联目录目录文件文件保存保存被保存被保存1* 普通关联普通关联利用限定词把一对多关系简化成了一对一关系。利用限定词把一对多关系简化成了一对一关系。 4)关联类)关联类队列队列电梯控制器电梯控制器电梯电梯按钮按钮4*图图9.9 关联类示例关联类示例 控制器对象和电梯对象之间的连接,对应着一个队列(对象),它存储着控制器对象和电梯对象之间的连接,对应着一个队列(对象),它存储着控制器和电梯内部按钮的请求信息。控制器和电梯内部按钮的请求信息。聚集表示类与类之间是整体与部分的关系。聚集表示类与
9、类之间是整体与部分的关系。 2. 聚集聚集 1)共享聚集)共享聚集课题组课题组人人成员成员*1*图图9.10 共享聚集示例共享聚集示例 处于部分方的对象可同时参与多个处于整体方对象的构成。处于部分方的对象可同时参与多个处于整体方对象的构成。 部分类完全隶属于整体类,部分与整体共存,整体不部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也随之消失。存在了部分也随之消失。2)组合聚集)组合聚集教材教材描绘教材结构的对象模型(组合聚集)描绘教材结构的对象模型(组合聚集)封面封面前言前言1+1+目录目录章章节节习题习题包含包含包含包含例子:例子:3. 泛化(继承)泛化(继承) 1)普通泛化)普
10、通泛化抽象类抽象类:描述子类的公:描述子类的公共属性和行为,不能生共属性和行为,不能生成具体对象的类。成具体对象的类。一个比较复杂的类图示例:一个比较复杂的类图示例:2)受限泛化)受限泛化 给泛化关系(继承关系)附加约束条件,说明给泛化关系(继承关系)附加约束条件,说明该泛化关系的使用方法和扩充方法。该泛化关系的使用方法和扩充方法。 约束有:多重、不相交、完全和不完全。约束有:多重、不相交、完全和不完全。多重继承多重继承:一个子类可以同时多次继承同一个上层基类。:一个子类可以同时多次继承同一个上层基类。不相交继承不相交继承:一个子类不能多次继承同一个上层基类。:一个子类不能多次继承同一个上层基
11、类。(默认为不相交继承)(默认为不相交继承) 完全继承完全继承:指父类的所有子类都已经在类:指父类的所有子类都已经在类图中穷举出来了。图中穷举出来了。 不完全继承不完全继承:指父类的所有子类并没有在:指父类的所有子类并没有在类图中穷举出来了。类图中穷举出来了。 随着对问题理解的深入,不完全继承中可随着对问题理解的深入,不完全继承中可以不断扩充子类。以不断扩充子类。(默认为不完全继承)(默认为不完全继承)4. 依赖和细化依赖和细化 1)依赖关系)依赖关系类类B类类A友元友元图图9.15 友元依赖关系友元依赖关系 描述两个模型元素(类、用例)之间的关系,其中一个模型元素是独立的(被描述两个模型元素
12、(类、用例)之间的关系,其中一个模型元素是独立的(被箭头指),另一个依赖于独立的模型元素。如,一个类使用另一个类的对象作为箭头指),另一个依赖于独立的模型元素。如,一个类使用另一个类的对象作为自己的函数的参数。自己的函数的参数。(友元:依赖类可以使用独立类中私有的或保护的成员)(友元:依赖类可以使用独立类中私有的或保护的成员)2)细化关系)细化关系分析类分析类设计类设计类图图9.16 细化关系示例细化关系示例 细化用来协调不同阶段模型之间的关系,表示各个开发阶段不同抽象层细化用来协调不同阶段模型之间的关系,表示各个开发阶段不同抽象层次模型之间的相关性,通常用于跟踪模型的演变。次模型之间的相关性
13、,通常用于跟踪模型的演变。例子:例子:公司公司员工员工名字名字电话号码电话号码主要产品主要产品地址地址雇佣雇佣解雇解雇姓名姓名地址地址身份证号码身份证号码工资工资1+职务职务部门名部门名部门部门工人工人经理经理01管理管理产品产品产品名产品名成本成本重量重量项目项目项目名项目名预算预算优先级优先级生产生产1+主持主持参加参加1+1+1+ 一家公司的对象模型一家公司的对象模型组成组成9.5 动态模型动态模型 1)事件事件:事件是某个特定时刻所发生的事情。:事件是某个特定时刻所发生的事情。它是引起对象状态转换的控制信息。它是引起对象状态转换的控制信息。 2)状态状态:状态就是对象在其生命周期中的某
14、:状态就是对象在其生命周期中的某个特定阶段所处的某种情形。个特定阶段所处的某种情形。 3)行为行为:行为是指对象达到某种状态时所做:行为是指对象达到某种状态时所做的一系列处理操作。的一系列处理操作。 通常用通常用UML提供的状态图来描绘动态模型。提供的状态图来描绘动态模型。 注意:注意: 每个类的动态行为用一张状态图来描绘,各每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构个类的状态图通过共享事件合并起来,从而构成系统的动态模型。成系统的动态模型。实例:实例:电话的状态图电话的状态图 9.6 功能模型功能模型 通常,功能模型由一组数据流图组成。通常,功能模型由一组
15、数据流图组成。 UML提供的用例图也是进行需求分析和建立提供的用例图也是进行需求分析和建立功能模型的有力工具。功能模型的有力工具。 以用例图建立起来的系统模型称为用例模型,以用例图建立起来的系统模型称为用例模型,它描述的是外部行为者所理解的系统功能。它描述的是外部行为者所理解的系统功能。9.6.1 用例图用例图1、系统、系统2、用例、用例(use case) 行为者感受到的一个完整行为者感受到的一个完整的功能。的功能。 用例是类,代表一类功能,用例是类,代表一类功能,用例的实例称为脚本。用例的实例称为脚本。3、行为者行为者(actor) 与系统交互的人或其他系与系统交互的人或其他系统。它代表一
16、种角色。统。它代表一种角色。4、用例之间的关系用例之间的关系1)扩展关系扩展关系 向一个用例中添加一些向一个用例中添加一些动作后构成另一个用例,动作后构成另一个用例,它们之间构成扩展关系。它们之间构成扩展关系。 2)使用关系使用关系 一个用例使用另一个用一个用例使用另一个用例,它们之间构成使用关例,它们之间构成使用关系。系。 描述一般行为的变化描述一般行为的变化时采用扩展关系;时采用扩展关系; 两个或多个用例中出两个或多个用例中出现重复描述时可采用使现重复描述时可采用使用关系。用关系。9.6.2 用例建模用例建模 一个用例模型由若干幅用例图组成。一个用例模型由若干幅用例图组成。 创建用例模型的
17、工作包括:定义系统、寻找创建用例模型的工作包括:定义系统、寻找行为者、寻找用例、描述用例、定义用例之间行为者、寻找用例、描述用例、定义用例之间的关系、确认模型。的关系、确认模型。1、寻找行为者、寻找行为者 下述问题有助于发现行为者:下述问题有助于发现行为者: 1)谁将使用系统的主要功能?)谁将使用系统的主要功能? 2)谁需要借助系统的支持来完成日常工作?)谁需要借助系统的支持来完成日常工作? 3)谁来维护和管理系统?)谁来维护和管理系统? 4)系统控制哪些硬件设备?)系统控制哪些硬件设备? 5)系统需要与哪些其他系统交互?)系统需要与哪些其他系统交互? 6)哪些人或系统对本系统产生的结果感兴趣
18、?)哪些人或系统对本系统产生的结果感兴趣?2、寻找用例、寻找用例 可以通过每个行为者回答下述问题来获取用例:可以通过每个行为者回答下述问题来获取用例: 1)行为者需要系统提供哪些功能?)行为者需要系统提供哪些功能? 2)行为者自身需要做什么?)行为者自身需要做什么? 3)行为者是否需要读取、创建、删除、修改或)行为者是否需要读取、创建、删除、修改或存储系统中的信息?存储系统中的信息? 4)系统中发生的事件需要通知行为者吗?)系统中发生的事件需要通知行为者吗? 5)行为者需要通知系统某些事情吗?)行为者需要通知系统某些事情吗? 6)系统需要哪些输入输出?)系统需要哪些输入输出? 7)当前使用的系
19、统存在的主要问题是什么?)当前使用的系统存在的主要问题是什么?9.7 三种模型之间的关系三种模型之间的关系1)针对每个类建立的动态模型,描述了实例的)针对每个类建立的动态模型,描述了实例的生命周期或运行周期。生命周期或运行周期。2)状态转换驱使行为发生,这些行为在数据流)状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。例,它们同时与类图中的服务相对应。3)功能模型中的处理(或用例)对应于对象模)功能模型中的处理(或用例)对应于对象模型中的类所提供的服务。型中的类所提供的服务。4)数据流图中的数据
20、存储,以及数据的源点)数据流图中的数据存储,以及数据的源点/终点,终点,通常是对象模型中的对象。通常是对象模型中的对象。5)数据流图中的数据流,往往是对象模型中对象的)数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。属性值,也可能是整个对象。6)用例图中的行为者,可能是对象模型中的对象。)用例图中的行为者,可能是对象模型中的对象。7)功能模型中的处理(或用例)可能产生动态模型)功能模型中的处理(或用例)可能产生动态模型中的事件。中的事件。8)对象模型描述了数据流图中的数据流、数据存储)对象模型描述了数据流图中的数据流、数据存储以及数据源点以及数据源点/终点的结构。终点的结构
21、。第第10章章 面向对象分析面向对象分析10.1 面向对象分析的基本过程面向对象分析的基本过程10.1.1 概述概述面向对象分析从分析描写用户需求的文件开始。面向对象分析从分析描写用户需求的文件开始。用户单方书写的需求;用户单方书写的需求;系统分析员配合用户书写的需求;系统分析员配合用户书写的需求;项目标书中书写的需求。项目标书中书写的需求。10.1.2 3个子模型与个子模型与5个层次个层次主题层主题层类与对象层类与对象层结构层结构层属性层属性层服务层服务层复杂问题的对象模型的复杂问题的对象模型的5个层次个层次(对应(对应5 5项活动:找出类与对象、识别结构、识别主题、定义属项活动:找出类与对
22、象、识别结构、识别主题、定义属性、定义服务。)性、定义服务。)3个子模型:个子模型: 对象模型(静态结构);对象模型(静态结构); 动态模型(交互次序);动态模型(交互次序); 功能模型(数据变换)。功能模型(数据变换)。 面向对象分析大体上按照下列顺序进行:寻找类与对面向对象分析大体上按照下列顺序进行:寻找类与对象、识别结构、识别主题、定义属性、建立动态模型、象、识别结构、识别主题、定义属性、建立动态模型、建立功能模型、定义服务。建立功能模型、定义服务。UML是是OO思想的一种表现形式,思想的一种表现形式, “OO是神,是神,而而UML是型是型”;以以CMS(内容管理系统)为例:(内容管理系
23、统)为例:“内容内容”包括文件、表格、图片、数据库中的数据,甚至图片、动画、包括文件、表格、图片、数据库中的数据,甚至图片、动画、视频等一切要发布到视频等一切要发布到 网站的信息。网站的信息。内容管理系统内容管理系统是一种位于是一种位于Web 服务器和后端办公系统或流程(内容服务器和后端办公系统或流程(内容创作、编辑)之间的软件系统。重点解决各种数字资源的采集、管创作、编辑)之间的软件系统。重点解决各种数字资源的采集、管理、利用、传递和增值。内容的创作人员、编辑人员、发布人员使理、利用、传递和增值。内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。用内容管理系统来
24、提交、修改、审批、发布内容。1. 从需求到业务用例图从需求到业务用例图 OOA&D的第一步:了解用户需求,并将其转换为业的第一步:了解用户需求,并将其转换为业务用例图。务用例图。 CMS描述如下:这个系统主要用来发布新闻,管理员描述如下:这个系统主要用来发布新闻,管理员只需要一个,登录后可以在后台发布新闻。任何人可以只需要一个,登录后可以在后台发布新闻。任何人可以浏览新闻,浏览者可以注册成为系统会员,注册后可对浏览新闻,浏览者可以注册成为系统会员,注册后可对新闻进行评论。管理员在后台可以对新闻、评论、注册新闻进行评论。管理员在后台可以对新闻、评论、注册会员进行管理,如修改、删除等。会员进行管理
25、,如修改、删除等。 根据上述需求描述,画出业务用例图:注意事项:注意事项:1.业务用例是仅从系统业务角度关注的用例,而不是具体业务用例是仅从系统业务角度关注的用例,而不是具体系统的用例。它描述的是系统的用例。它描述的是“该实现什么业务该实现什么业务”,而不是,而不是“系统该提供什么操作系统该提供什么操作”。例如,在实际系统中,。例如,在实际系统中,“登登录录”肯定要作为一个用例,但是这是软件系统中的操作,肯定要作为一个用例,但是这是软件系统中的操作,而用户所关注的业务是不包含而用户所关注的业务是不包含“登录登录”的。的。2.业务用例仅包含客户业务用例仅包含客户“感兴趣感兴趣”的内容。的内容。3
26、.业务用例所有的用例名应该让客户能看懂,如果某个用业务用例所有的用例名应该让客户能看懂,如果某个用例的名字客户看不懂什么意思,它也许就不适合作为业例的名字客户看不懂什么意思,它也许就不适合作为业务用例。务用例。 2. 从业务用例图到活动图从业务用例图到活动图 完成了业务用例图后,需要为每一个业务用完成了业务用例图后,需要为每一个业务用例绘制一幅活动图。例绘制一幅活动图。 活动图描述了这个业务用例中,用户可能会活动图描述了这个业务用例中,用户可能会进行的操作序列。进行的操作序列。 活动图有个很重要的用途:从业务用例分析活动图有个很重要的用途:从业务用例分析出系统用例。出系统用例。 例如,例如,
27、“新闻管理新闻管理”的活动图:的活动图: 是否已登是否已登陆陆用户、密码用户、密码是否正确是否正确 一个一个“新闻管理新闻管理” 业务用例,分解出若干系统操作。业务用例,分解出若干系统操作。其中很多其中很多“活动活动”都很可能是一个系统用例。都很可能是一个系统用例。 例如,从上图知系统至少包含以下备选系统用例:登例如,从上图知系统至少包含以下备选系统用例:登录、注销登录、查看新闻列表、修改新闻、删除新闻。录、注销登录、查看新闻列表、修改新闻、删除新闻。 这样,将每个业务用例都绘制出相应的活动图,再将这样,将每个业务用例都绘制出相应的活动图,再将其中的其中的“活动活动”整合,就得出所有备选的系统
28、用例。整合,就得出所有备选的系统用例。 3. 从活动图到系统用例图从活动图到系统用例图 找出所有的备选系统用例后,要对其进行合并和筛选。找出所有的备选系统用例后,要对其进行合并和筛选。 合并:将相同的用例合并成一个;合并:将相同的用例合并成一个; 筛选:将不符合系统用例条件的备选用例去掉。筛选:将不符合系统用例条件的备选用例去掉。 一个系统用例应该是实际使用系统的用户所进行的一个一个系统用例应该是实际使用系统的用户所进行的一个操作,例如,操作,例如,“查看新闻列表查看新闻列表”就不能算一个系统用例,就不能算一个系统用例,因为它只是某系统用例的一个序列项。因为它只是某系统用例的一个序列项。 经合
29、并和筛选后的系统用例图:经合并和筛选后的系统用例图:5. 绘制业务领域类图绘制业务领域类图 接着绘制业务领域类图。接着绘制业务领域类图。 业务领域类图要描述以下三点:业务领域类图要描述以下三点: (1)系统中有哪些实体;)系统中有哪些实体; (2)这些实体能做什么操作。)这些实体能做什么操作。 (3)实体间的关系。)实体间的关系。 实体不是实体不是Actor,而是,而是Actor使用系统时所调用的实体。使用系统时所调用的实体。例如,管理员是例如,管理员是Actor,没有作为实体出现在类图中,管,没有作为实体出现在类图中,管理员的工作可以通过调用三个类的方法完成。理员的工作可以通过调用三个类的方
30、法完成。 “注册会员注册会员”实体也不是用例图中的注册会员实体也不是用例图中的注册会员Actor,而是一个系统内的业务实体,供而是一个系统内的业务实体,供Actor们使用。例如,其们使用。例如,其中的中的“注册注册”功能是给注册会员功能是给注册会员Actor使用,而使用,而“移除移除”则是给管理员则是给管理员Actor使用的。使用的。6. 绘制实现类图绘制实现类图 面向对象分析只关心系统本身的功能和业务,而不关心与面向对象分析只关心系统本身的功能和业务,而不关心与计算机相关的内容。计算机相关的内容。 面向对象设计和平台、语言、开发模型等内容关系紧密,面向对象设计和平台、语言、开发模型等内容关系
31、紧密,因而很难找出一个通用的设计过程。但是,一般在设计过程因而很难找出一个通用的设计过程。但是,一般在设计过程中实现类图是要绘制的。中实现类图是要绘制的。 实现类图和领域类图不一样,它描述系统的静态结构,是实现类图和领域类图不一样,它描述系统的静态结构,是和最后的代码完全一致的。因此,它和平台关系密切,必须和最后的代码完全一致的。因此,它和平台关系密切,必须准确给出系统中的实体类、控制类、界面类、接口等元素以准确给出系统中的实体类、控制类、界面类、接口等元素以及其中的关系。及其中的关系。一个简化的实现类图: 注册会员作为注册会员作为Actor,调用,调用UserController的的Logi
32、n方法方法启动序列,而启动序列,而UserServices作为业务组件,首先调用数据作为业务组件,首先调用数据访问组件的访问组件的GetByName确定用户是否存在,如果存在,确定用户是否存在,如果存在,再调用再调用GetByNameAndPassword确定输入密码是否是此确定输入密码是否是此用户的密码。用户的密码。 注意:序列图在实际应用中是很多的,几乎每个类方法注意:序列图在实际应用中是很多的,几乎每个类方法都配有相应的序列图。都配有相应的序列图。 8. 分析与设计之后的工作分析与设计之后的工作 基于软件工具进行编码、调试、测试等。小结:面向对象分析和设计的过程没有一个固定模式,随着系统
33、的不小结:面向对象分析和设计的过程没有一个固定模式,随着系统的不同,过程有所变化。上例可了解基于同,过程有所变化。上例可了解基于UML的分析与设计的一般过程。的分析与设计的一般过程。实际的分析和设计,还需要实践的积累。实际的分析和设计,还需要实践的积累。 10.2 需求陈述需求陈述10.2.1 书写要点书写要点 需求陈述的内容包括:需求陈述的内容包括: 问题范围、功能需求、性能需求、应用环境、问题范围、功能需求、性能需求、应用环境、假设条件等。假设条件等。10.2.2 实例:自动取款机(实例:自动取款机(ATM)系统系统10.3 建立对象模型建立对象模型10.3.1 确定类与对象确定类与对象
34、1. 找出候选的类与对象找出候选的类与对象 多数客观事物分为多数客观事物分为5类:类: 1)可感知的物理实体,如汽车、书、房屋;)可感知的物理实体,如汽车、书、房屋; 2)人或组织的角色,如雇员、雇主、柜员;)人或组织的角色,如雇员、雇主、柜员; 3)应该记忆的事件,如演出、访问、事故;)应该记忆的事件,如演出、访问、事故; 4)两个或多个对象的相互作用,如购买;)两个或多个对象的相互作用,如购买; 5)需要说明的概念,如政策、法律;)需要说明的概念,如政策、法律;非正式分析方法:非正式分析方法: 用自然语言书写需求陈述,把陈述中的用自然语言书写需求陈述,把陈述中的名词作为类与对象的候选者,从
35、形容词中名词作为类与对象的候选者,从形容词中考虑属性,把动词作为服务(操作)的候考虑属性,把动词作为服务(操作)的候选者。选者。以以ATM系统为例:系统为例: 类与对象的候选者:类与对象的候选者: 银行、自动取款机(银行、自动取款机(ATM)、)、系统、中央计算系统、中央计算机、分行计算机、柜员终端、网络、总行、分行、机、分行计算机、柜员终端、网络、总行、分行、软件、成本、市、街道、营业厅、储蓄所、柜员、软件、成本、市、街道、营业厅、储蓄所、柜员、储户、现金、支票、帐户、事务、现金兑换卡、储户、现金、支票、帐户、事务、现金兑换卡、余额、磁卡、分行代码、卡号、用户、信息、密余额、磁卡、分行代码、
36、卡号、用户、信息、密码、类型、取款额、帐单、访问等。码、类型、取款额、帐单、访问等。2. 筛选出正确的类与对象筛选出正确的类与对象 主要依据以下标准:主要依据以下标准: 1)冗余:)冗余:如如“储户储户”与与“用户用户”、“磁卡磁卡”与与“现金兑换卡现金兑换卡”; 2)无关:)无关:如如“成本成本”、“街道街道”、“营业厅营业厅”、“储蓄所储蓄所”; 3)笼统:)笼统:如如“银行银行”、“网络网络”、“系统系统”、“软件软件”、“信信息息”; 4)属性:)属性:如如“余额余额”、“分行代码分行代码”、“卡号卡号”、“密码密码”、“类型类型”; 5)操作:)操作:如如“访问访问”; 6)实现)实
37、现 在在ATM实例中,经过初步筛选,剩下的实例中,经过初步筛选,剩下的类与对象为:类与对象为: ATM、中央计算机、分行计算机、柜员中央计算机、分行计算机、柜员终端、总行、分行、柜员、储户、帐户、终端、总行、分行、柜员、储户、帐户、事务、现金兑换卡。事务、现金兑换卡。10.3.2 确定关联确定关联 1. 初步确定关联初步确定关联 1)直接提取动词短语得出的关联)直接提取动词短语得出的关联 总行总行 拥有拥有 ATM 储户储户 拥有拥有 帐户帐户 分行计算机分行计算机 维护维护 帐户帐户 2)需求陈述中隐含的关联)需求陈述中隐含的关联 分行分行 组成组成 总行总行 分行分行 保管保管 帐户帐户
38、3)根据问题域知识得出的关联)根据问题域知识得出的关联 现金兑换卡现金兑换卡 访问访问 帐户帐户 分行分行 雇用雇用 柜员柜员 2. 筛选筛选 根据下述标准删除候选关联:根据下述标准删除候选关联: 1)已删去的类之间的关联)已删去的类之间的关联 如如“系统系统”、“成本成本”等类已经删除,所以也应该删除的关等类已经删除,所以也应该删除的关联:联: 系统系统 维护维护 事务日志事务日志 分行分行 分摊分摊 软件成本软件成本 2)与问题无关的或应在实现阶段考虑的关联)与问题无关的或应在实现阶段考虑的关联 如应删除的关联:如应删除的关联: 系统系统 处理处理 并发访问并发访问3)瞬时事件)瞬时事件
39、关联不应是一个瞬时事件,如应该删除:关联不应是一个瞬时事件,如应该删除: ATM 读取读取 现金兑换卡现金兑换卡4)三元关联)三元关联 三个或三个以上对象之间的关联,可分解为二元关联:三个或三个以上对象之间的关联,可分解为二元关联: “柜员输入针对帐户的事务柜员输入针对帐户的事务”可分解为:可分解为: “柜员柜员 输入输入 事务事务” 、 “事务事务 修改修改 帐户帐户”5)派生关联)派生关联 去掉可以用其它关联定义的冗余关联,如去掉可以用其它关联定义的冗余关联,如“分行计算机分行计算机 维护维护 帐户帐户”,可用,可用 “分行分行 保管保管 帐户帐户”、“事务事务 修修改改 帐户帐户”代替。
40、代替。3. 进一步完善进一步完善 1)正名)正名 选择含义更明确的名字。选择含义更明确的名字。 2)分解)分解 必要时分解类与对象,如必要时分解类与对象,如“事务事务”分解为:分解为: “远程事务远程事务”、“柜员事务柜员事务”。 3)补充)补充 发现遗漏的关联及时补上。发现遗漏的关联及时补上。 4)标明重数)标明重数10.3.3 划分主题划分主题。10.3.4 确定属性确定属性 1. 分析分析 需求陈述不能得到所有属性,须借助领域知识和常识。需求陈述不能得到所有属性,须借助领域知识和常识。 2. 选择选择 根据下述情况,删除不必要的属性:根据下述情况,删除不必要的属性: 1)误把对象当属性)
41、误把对象当属性 2)误把关联类的属性当作一般对象的属性)误把关联类的属性当作一般对象的属性 3)误把限定当成属性(如)误把限定当成属性(如“站号站号”不是不是“分行计算机分行计算机”的属性)的属性) 4)误把内部状态当属性)误把内部状态当属性 10.3.5 识别继承关系识别继承关系 可以使用两种方式建立继承(泛化)关系:可以使用两种方式建立继承(泛化)关系: 1)自底向上:从现有类泛化出父类;)自底向上:从现有类泛化出父类; 如:如:“远程事务远程事务”和和“柜员事务柜员事务”泛化出泛化出“事务事务”; “ATM”和和“柜员终端柜员终端”泛化出泛化出“输入终端输入终端”。 2)自顶向下:把现有
42、类细化成子类。)自顶向下:把现有类细化成子类。10.3.6 反复修改反复修改 1. 分解类分解类 如:分解如:分解“现金兑换卡现金兑换卡”类为类为“卡权限卡权限”和和“现金兑换现金兑换卡卡”,使每个类功能更单一;,使每个类功能更单一; 2. 合理组织类合理组织类 如:如:“事务事务”由由“更新更新”组成,组成,“更新更新”包括包括“取款取款”、“存款存款”、“查询查询”等动作。等动作。 3. 合并类合并类 如:合并如:合并“分行分行”与与“分行计算机分行计算机”、“总行总行”与与“中中央计算机央计算机”。10.4 建立动态模型建立动态模型建立动态模型的步骤建立动态模型的步骤:1)第一步,是编写
43、典型交互行为的脚本。)第一步,是编写典型交互行为的脚本。2)第二步,从脚本中提取出事件,确定触发每)第二步,从脚本中提取出事件,确定触发每个事件的动作对象,以及接受事件的目标对个事件的动作对象,以及接受事件的目标对象。象。3)第三步,排列事件发生的次序,确定每个)第三步,排列事件发生的次序,确定每个对象可能有的状态及状态之间的转换关系,对象可能有的状态及状态之间的转换关系,并用状态图描绘它们。并用状态图描绘它们。4)第四步,比较各个对象的状态图,检查它)第四步,比较各个对象的状态图,检查它们之间的一致性,确保事件之间的匹配。们之间的一致性,确保事件之间的匹配。10.4.1 编写脚本编写脚本 在
44、建立动态模型的过程中,脚本是指系统在建立动态模型的过程中,脚本是指系统在某一执行期间内出现的一系列事件。在某一执行期间内出现的一系列事件。 脚本描述用户(或其它外部设备)与目标脚本描述用户(或其它外部设备)与目标系统之间的一个或多个典型的交互过程。系统之间的一个或多个典型的交互过程。编写脚本的目的编写脚本的目的:保证不遗漏重要的交互步骤:保证不遗漏重要的交互步骤 编写脚本时,首先考虑正常情况的脚本,然编写脚本时,首先考虑正常情况的脚本,然后考虑特殊情况,最后考虑出错情况。后考虑特殊情况,最后考虑出错情况。 脚本描述事件序列。脚本描述事件序列。 对于每个事件,都应该指明触发事件的动作对于每个事件
45、,都应该指明触发事件的动作对象(如:计算机系统;用户;外部事物等)、对象(如:计算机系统;用户;外部事物等)、接受事件的目标对象和该事件的参数。接受事件的目标对象和该事件的参数。10.4.2 设想用户界面设想用户界面10.4.3 画事件跟踪图画事件跟踪图 1. 确定事件确定事件 2. 画事件跟踪图画事件跟踪图 事件跟踪图实质上是扩充的脚本,是事件跟踪图实质上是扩充的脚本,是简化的简化的UML顺序图。顺序图。对象:竖线;对象:竖线;事件:水平箭头。事件:水平箭头。10.4.4 画状态图画状态图 状态图描绘事件与对象状态的关系。状态图描绘事件与对象状态的关系。 通常,用一张状态图描绘一类对象的行通
46、常,用一张状态图描绘一类对象的行为,它确定了由事件序列引出的状态序列。为,它确定了由事件序列引出的状态序列。但是,也不是任何一个类都需要有一张状但是,也不是任何一个类都需要有一张状态图描绘它的行为。态图描绘它的行为。 根据一张事件跟踪图画出状态图后,再根据一张事件跟踪图画出状态图后,再把其他脚本的事件跟踪图合并到已画出的把其他脚本的事件跟踪图合并到已画出的状态图中。状态图中。 考虑完正常事件后考虑边界情况和特殊考虑完正常事件后考虑边界情况和特殊情况,当所有脚本都被状态图反映出来,情况,当所有脚本都被状态图反映出来,该类的状态图就构造好了。该类的状态图就构造好了。10.4.5 审查动态模型审查动态模型 审查每个事件,跟踪它对系统中各个对象所审查每个事件,跟踪它对系统中各个对象所产生的效果,保证它们与每个脚本都匹配。产生的效果,保证它们与每个脚本都匹配。10.5 建立功能模型建立功能模型10.5.1 画出基本系统模型图画出基本系统模型图10.5.2 画出功能级数据流图画出功能级数据流图10.5.3 描述处理框功能描述处理框功能