1、2 概述 面向对象的分析和设计方法 基于UML的面向对象分析与设计3 面向对象是一种面向对象是一种风范(Paradigm),是一种观察是一种观察和分析问题的和分析问题的方法论(Methodology)从本质上来说,面向对象方法是确定从本质上来说,面向对象方法是确定动作的主体在先(先确定系统中的(先确定系统中的对象),),执行动作在后(再确定在这些对象上可能实施的(再确定在这些对象上可能实施的操作)传统的面向过程的程序设计,最关心的是过程传统的面向过程的程序设计,最关心的是过程 面向对象技术:是一种软件系统设计的工程技术,面向对象技术:是一种软件系统设计的工程技术,将将“对象对象”作为软件系统的
2、基本组成单元,将数作为软件系统的基本组成单元,将数据及其上作用的操作一起据及其上作用的操作一起封装封装,以标准的,以标准的接口接口规规范对外提供服务范对外提供服务 4 客观世界是由客观世界是由对象组成的组成的 从动态观点看,对对象施加的从动态观点看,对对象施加的操作就是该对就是该对象的行为象的行为 具有相同数据和相同操作的对象可以归并为具有相同数据和相同操作的对象可以归并为一个一个类,对象是类的一个,对象是类的一个实例 对象之间通过对象之间通过消息传递相互联系相互联系 类具有类具有封装性 类可以类可以派生出子类,子类出子类,子类继承父类的全部特性,父类的全部特性,又可以有自己的新特性又可以有自
3、己的新特性5 初始阶段(初始阶段(60年代末年代末80年代中期)年代中期)挪威,挪威,Simula语言:引入了类的概念和继承机制语言:引入了类的概念和继承机制 Xerox,Smalltalk语言语言 发展阶段(发展阶段(80年代中期到年代中期到90年代)年代)面向对象编程语言的繁荣:面向对象编程语言的繁荣:C+、Object Pascal、Java等等 成熟阶段(成熟阶段(90年代中期以后)年代中期以后)面向对象分析和设计方法的发展与规范:面向对象分析和设计方法的发展与规范:Booch方法、方法、Rumbaugh的的OMT方法、方法、Coad/Yourdon方法、方法、Jacobson的的OO
4、SE方方法法 等等 形成一整套面向对象软件工程体系形成一整套面向对象软件工程体系6 按照人类的自然思维方式建立软件系统模型,有利于理解和交流 在整个开发过程中采用统一的概念和模型表示,使开发活动之间平滑过渡 对象所具有的封装性和信息隐蔽等特性,容易实现软件复用 易于维护,体系结构易于理解、扩充和修改7 对象(对象(Object)由一组由一组属性和在这些属性数据上的容许和在这些属性数据上的容许操作对对组成组成 类(类(Class)封装(封装(Encapsulation)继承(继承(Inheritance)多态性(多态性(Polymorphism)消息(消息(Message)81.对象(objec
5、t)对象是指一组属性以及这组属性上的专用操作的封装体 属性(attribute)通常是一些数据,有时它也可以是另一个对象。每个对象都有它自己的属性值,表示该对象的状态。对象中的属性只能通过该对象所提供的操作来存取或修改。操作(operation)(也称方法)规定了对象的行为,表示对象所能提供的服务。一个对象通常由对象名、属性和操作三部分组成。92.类(class)类是一组具有相同属性和相同操作的对象的集合。一个类中的每个对象都是这个类的一个实例(instance)。类是创建对象的模板,从同一个类实例化的每个对象都具有相同的结构和行为。轿轿 车车型号:字符串型号:字符串颜色:字符串颜色:字符串牌
6、照号:字符串牌照号:字符串张经理的轿车张经理的轿车型号型号=桑塔纳桑塔纳颜色颜色=红色红色牌照号牌照号=沪沪AN2037AN2037类类实例对象实例对象10 封装封装(encapsulation):):一种信息隐蔽一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。内部实现对用户是隐蔽的。封装的目的:使对象的使用者和生产者分离,使封装的目的:使对象的使用者和生产者分离,使对象的定义和实现分开。对象的定义和实现分开。继承继承(inheritance):):继承是类间的基本关系,它是基于层次关系的不继承是类间的基本关系,它
7、是基于层次关系的不同类共享数据和操作的一种机制。同类共享数据和操作的一种机制。父类中定义了其所有子类的公共属性和操作,在父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承子类中除了定义自己特有的属性和操作外,可以继承其父类(或祖先类)的属性和操作,还可以对父类其父类(或祖先类)的属性和操作,还可以对父类(或祖先类)中的操作重新定义其实现方法。(或祖先类)中的操作重新定义其实现方法。11 矩形矩形长长宽宽对角线对角线计算面积计算面积计算对角线计算对角线 多边形多边形顶点数顶点数顶点坐标顶点坐标计算面积计算面积旋转旋转交通工具交通工具飞行器飞行器汽汽 车车 船
8、船轿轿 车车货货 车车 一般一般-特殊关系特殊关系12 如果一个子类只有唯一一个父类,这个继承称为单一继承。如果一个子类有一个以上的父类,这种继承称为多重继承。水上交通工具水上交通工具 陆上交通工具陆上交通工具 水陆两栖交通工具水陆两栖交通工具多重继承多重继承13 多态性(polymorphism)指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。例如“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形,作用在“圆”对象上,则在屏幕上画一个圆。相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果。14if 条件条件 then
9、 p:=t;else p:=r;area:=p.getarea;getArea abstractpolygonareahexagongetArearectanglegetArealengthwidthtrianglegetAreaVar p:polygon;Var t:triangle:=triangle.new;Var r:rectangle:=rectangle.new;15 面向对象的分析(OOA):分析和理解问题域,:分析和理解问题域,找出类及对象,分析它们的内部构成和外部关系找出类及对象,分析它们的内部构成和外部关系 面向对象的设计(OOD):运用面向对象技术进:运用面向对象技术进行
10、软件设计行软件设计 面向对象的编程(OOP):用面向对象的编程语言:用面向对象的编程语言将设计模型转换成程序将设计模型转换成程序 面向对象的测试(OOT):运用:运用OO技术进行以对技术进行以对象概念为中心的软件测试,以类作为基本测试单位象概念为中心的软件测试,以类作为基本测试单位 面向对象的维护面向对象的维护(OOM)16 迭代迭代和和无间隙无间隙特征特征 迭代迭代:各开发活动常常:各开发活动常常重复工作多次,相关的重复工作多次,相关的功能在每次迭代中随之功能在每次迭代中随之加入演进的系统加入演进的系统 无间隙无间隙:开发活动之间:开发活动之间不存在明显的边界不存在明显的边界17一般步骤如下
11、:1.获取客户对系统的需求:包括标识场景(scenario)和用例(use case),建造需求模型2.用基本的需求为指南,选择类和对象(包括属性和操作)3.定义类的结构和层次4.建造对象-关系模型5.建造对象-行为模型6.利用用例/场景来复审分析模型 181.系统设计系统设计子系统划分子系统划分选择实现数据管理、界面支持和任务管理的设计策选择实现数据管理、界面支持和任务管理的设计策略略为系统设计合适的控制机制为系统设计合适的控制机制复审并考虑权衡复审并考虑权衡2.对象设计对象设计在过程级别设计每个操作的实现细节在过程级别设计每个操作的实现细节定义内部类定义内部类为类属性设计内部数据结构为类属
12、性设计内部数据结构3.消息设计消息设计 使用对象间的协作和对象使用对象间的协作和对象-关系模型,设计关系模型,设计消息模型消息模型4.复审复审 复审设计模型并在需要时迭代复审设计模型并在需要时迭代19 Booch方法方法 Rumbaugh的对象模型化技术的对象模型化技术(OMT)Coad和和Yourdon方法方法 Jacobson的的OOSE(面向对象软件工程面向对象软件工程)20 统一建模语言(Unified Modeling Language,UML):一种直观化、明确化、构建和文档化软件系统产):一种直观化、明确化、构建和文档化软件系统产物的物的可视化建模语言可视化建模语言 21 UML
13、是是Booch、OOSE和和OMT方法的结方法的结合,同时吸收了其他方法的思想合,同时吸收了其他方法的思想 UML是一种是一种语言 UML是一种是一种可视化的建模语言 UML是一种可用于是一种可用于详细描述的语言的语言 UML是一种是一种构造语言 UML是一种是一种文档化语言22 视图(视图(View):用于构造系统模型):用于构造系统模型 图(图(Diagram):用于描述视图):用于描述视图 模型元素:用于表示图的一组符号模型元素:用于表示图的一组符号23用例视图(用例视图(Use Case View):描述:描述系统应该具有的功能集系统应该具有的功能集设计视图(设计视图(Design V
14、iew):描述系:描述系统功能的内部设计和协作情况,包括统功能的内部设计和协作情况,包括静静态结构态结构和和动态行为动态行为进程视图(进程视图(Process View):描述系统的并发工作状况,包含并:描述系统的并发工作状况,包含并发与同步的线程和进程发与同步的线程和进程实现视图(实现视图(Implementation View):描述系统的实现模块(组:描述系统的实现模块(组件或者文件)及其之间的关系件或者文件)及其之间的关系部署视图(部署视图(Deployment View):描述系统的物理架构和硬件拓:描述系统的物理架构和硬件拓扑结构的节点扑结构的节点24 系统功能:用例图 静态结构:
15、类图;对象图 动态行为:状态图;时序图;协作图;活动图 物理架构:组件图;分布图 25主题域视图(view)图(diagram)结构化结构化静态视图静态视图类图(类图(class)设计视图设计视图内部结构(内部结构(internal structure)协作图(协作图(collaboration)构件图(构件图(component)用例视图用例视图用例图(用例图(use case)动态的动态的状态机视图状态机视图状态机图(状态机图(state machine)活动视图活动视图活动图(活动图(activity)交互视图交互视图顺序图(顺序图(sequence)通信图(通信图(communicat
16、ion)物理的物理的部署视图部署视图部署图(部署图(deployment)模型管理模型管理模型管理视图模型管理视图包图(包图(package)26 模型元素 模型元素指模型中的实体以及实体间相互连接的关系 部分模型元素部分模型元素注解注解类类属性属性操作操作对象:类对象:类属性属性操作操作状态状态用例用例 结点结点供应接口供应接口包包依赖依赖关联关联泛化泛化主动类主动类属性属性操作操作请求接口请求接口构件构件实现实现27 对对UML1.4进行了一些扩充。进行了一些扩充。用更为受限的通信图代替了协作图。用更为受限的通信图代替了协作图。增加了交互综述图、定时图、协议状态图、增加了交互综述图、定时图
17、、协议状态图、组成结构图等新图。组成结构图等新图。28 例子描述:例子描述:在在Web浏览器中,编写浏览器中,编写JAVA程序程序Hello,World!import java.awt.Graphics;class HelloWorld extends java.applet.Applet public void paint(Graphics g)g.drawString(Hello,World!,10,10);29HelloWorld类类HelloWorld及其相关类及其相关类HelloWorld的继承层次的继承层次30HelloWorld包包Paint的顺序图的顺序图HelloWorld构
18、件构件31 描述需求:描述需求:使用用例来确定用户需求和系统必须为用户提供的服务 静态建模静态建模:根据需求建立系统的静态模型 动态建模动态建模:描述系统的动态行为参与者用例问题陈述分析模型视图模型数据库实现模型动态模型静态模型设计模型3233实践名称实践名称描述描述用例用例(Use case)描绘一个系统外在可见的需求情况,是代表描绘一个系统外在可见的需求情况,是代表系统中各个项目相关人员之间就系统的行系统中各个项目相关人员之间就系统的行为所达成的契约为所达成的契约用户故事用户故事(user story)由客户参与编写,说明他们需要系统为他们由客户参与编写,说明他们需要系统为他们做什么,一般
19、用客户的术语编写,其长度做什么,一般用客户的术语编写,其长度约为三句话左右约为三句话左右共性:站在用户的角度看待系统、定义系统共性:站在用户的角度看待系统、定义系统;使用用户能够看懂的语言来表述使用用户能够看懂的语言来表述 34 采用场景和用例的技术,是需求获取过程采用场景和用例的技术,是需求获取过程中弥补多个具有不同背景的执行者团队之中弥补多个具有不同背景的执行者团队之间代沟的有力工具间代沟的有力工具 场景:表达了用户和系统之间的一系列交场景:表达了用户和系统之间的一系列交互,描述了一个系统实例互,描述了一个系统实例 用例:是对一类场景所进行的抽象用例:是对一类场景所进行的抽象 场景和用例两
20、者一般均用自然语言描述,场景和用例两者一般均用自然语言描述,这一形式对用户而言是易于理解的这一形式对用户而言是易于理解的35用例(use case)是Ivar Jacobson发明的.其它的中文译名有:用况、用案等.定义1:用例是对一个活动者(actor)使用系统的一项功能时所进行的交互过程的一个文字描述序列.定义2:用例是系统、子系统或类和外部参与者交互的动作序列的说明,包括可选的动作序列和会出现异常的动作序列.用例是代表系统中各个项目相关人员之间就系统的行为所达成的契约.36 1)分析员首先标识使用该系统的不同的执行者(执行者,actor),这些执行者代表使用该系统的不同的角色。每个执行者
21、可以叙述他如何使用系统,或者说他需要系统提供什么功能 2)执行者提出的每一个使用场景都是系统的一个用例的实例,一个用例描述了系统的一种用法(或一个功能),所有执行者提出的所有用例构成系统的完整的需求 注:执行者与用户是不同的两个概念,一个用户可以扮演几个角色(执行者);一个执行者可以是用户,也可以是其他系统(应用程序或设备)37(1)标识执行者标识执行者(2)标识场景)标识场景(3)标识用例标识用例(4)求精用例)求精用例(5)标识用例之间的关系)标识用例之间的关系(6)标识非功能需求)标识非功能需求(7)绘制用例图,编写详细的用例描述)绘制用例图,编写详细的用例描述38 用例图包含的模型元素
22、用例图包含的模型元素执行者执行者(actor)(actor):与系统进与系统进行交互的外部实体。可以是人行交互的外部实体。可以是人或者其它系统或者其它系统用例:用例:描述系统提供的功能描述系统提供的功能(从外部视点角度从外部视点角度)模型元素之间的关系模型元素之间的关系 执行者之间:继承关系执行者之间:继承关系 执行者与用例之间:关联关执行者与用例之间:关联关系系 用例之间:继承、扩展和包用例之间:继承、扩展和包含关系含关系39 是指与系统交互的人或其他系统,它代表是指与系统交互的人或其他系统,它代表外部实体。外部实体。使用用例并且与系统交互的任何人或物都使用用例并且与系统交互的任何人或物都是
23、执行者。是执行者。执行者代表一种执行者代表一种角色角色,而不是某个具体的,而不是某个具体的人或物。人或物。在用例图中用直线连接执行者和用例,表在用例图中用直线连接执行者和用例,表示两者之间交换信息。示两者之间交换信息。40 系统用户系统用户 与所建造的系统交互的其他系统与所建造的系统交互的其他系统 一些可以运行的进程一些可以运行的进程 硬件设备硬件设备 时钟时钟 执行者是为了完成一个事件而与系统交互的实体,执行者是为了完成一个事件而与系统交互的实体,是用户相对系统而言所演的角色。执行者不仅可以是用户相对系统而言所演的角色。执行者不仅可以由人承担,还可以是事物由人承担,还可以是事物411)其它软
24、件系统:当系统需要与其它系统交互时,)其它软件系统:当系统需要与其它系统交互时,如如ATM柜员机系统中,柜员机系统中,银行后台系统银行后台系统就是一个就是一个执行者;执行者;2)硬件设备:如果系统需要与硬件设备交互时,)硬件设备:如果系统需要与硬件设备交互时,如在开发如在开发IC卡门禁系统时卡门禁系统时,IC卡读写器卡读写器就是一就是一个执行者;个执行者;3)时钟:当系统需要定时触发时,)时钟:当系统需要定时触发时,时钟时钟就是执行就是执行者者42 在用例图中,使用泛化在用例图中,使用泛化关系来描述多个执行者关系来描述多个执行者之间的公共行为。之间的公共行为。执行者间的泛化关系执行者间的泛化关
25、系示例:示例:执行者实际上是一个类执行者实际上是一个类,因此它们之间可以存在一因此它们之间可以存在一定的关系定的关系43 需要注意:需要注意:大多数执行者在系统开发之前就已经存在大多数执行者在系统开发之前就已经存在执行者是在系统边界之外的,即它们是来自外部的;执行者是在系统边界之外的,即它们是来自外部的;任何要使用未来系统的外部软件系统就是一个执行者。任何要使用未来系统的外部软件系统就是一个执行者。可通过如下问题的提出获取和确认执行者:可通过如下问题的提出获取和确认执行者:系统完成工作后,哪一个用户组受益?谁将使用系统系统完成工作后,哪一个用户组受益?谁将使用系统的主要功能?的主要功能?谁需要
26、借助系统的支持来完成日常工作?谁需要借助系统的支持来完成日常工作?次要功能由哪一个用户组完成?次要功能由哪一个用户组完成?谁来维护和管理系统谁来维护和管理系统与该系统进行交互的外部硬件和软件系统是谁?与该系统进行交互的外部硬件和软件系统是谁?哪些人或系统对本系统产生的结果(值)感兴趣?哪些人或系统对本系统产生的结果(值)感兴趣?44 某大学准备开发一个某大学准备开发一个学生课程注册系统:学生使用该系统查询新学期将开设的课程和讲课教师情况,选择自学生使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单己要学习的课程进行登记注册,并可以查询成绩单 教师
27、使用该系统查询新学期将开设的课程和选课学生情况,并可以教师使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成绩单登记成绩单 注册管理员使用该系统进行注册管理,包括维护教师信息、学生信注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等息和课程信息等 在每个学期的开始,学生获得该学期的课程目录表,课程目录表列在每个学期的开始,学生获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等等 新学期开始前两周为选课注册时间,在此期间学生可以选课注册,新学期开始前两周为选课注
28、册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过程注册。每个学生可以选择不超过4门课程,同时指定门课程,同时指定2门侯选课门侯选课程以备主选课程未选上。每门课程最多不能超过程以备主选课程未选上。每门课程最多不能超过10人,最少不能人,最少不能低于低于3人,低于人,低于3人选课的课程将被取消。一旦学生的注册过程完人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际毕,注册系统将有关信息提交收费系统以便学生付费。如果在实
29、际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改注册过程中名额已满,系统将通知学生在提交课程表之前予以更改 在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取属于敏感信息,系统必须提供必要的安全措施以防非法存取 45问题:谁使用系统的功能?谁需要借助系统完成日常工作?谁来维护和管理系统,以保证系统正常工作?系统控制的硬件设备有哪些?系统需要与其他哪些系统交互?谁对系统产生的结果感兴趣?46 用例:用例:是能够被执行者感受到的、系统将是能够被执行者感受到的、系统将完成
30、的一系列动作,是一个完整功能完成的一系列动作,是一个完整功能这些动作除了完成系统内部的计算工作外,还这些动作除了完成系统内部的计算工作外,还包括与执行者通信。包括与执行者通信。用例通过用例通过关联关联与执行者连接与执行者连接关联指出一个用例与哪些执行者交互关联指出一个用例与哪些执行者交互47 用例代表某些用户可见的功能,以实现一个具体用例代表某些用户可见的功能,以实现一个具体的用户目标的用户目标 用例总是被执行者启动的,执行者必须直接或间用例总是被执行者启动的,执行者必须直接或间接地指示系统去执行用例,用例向执行者提供可接地指示系统去执行用例,用例向执行者提供可识别的输出识别的输出通过关注谁启
31、动了某一个用例,可标识出前面未注意通过关注谁启动了某一个用例,可标识出前面未注意到的新执行者到的新执行者 用例必须是完整的,描述了一系列从初始情况出用例必须是完整的,描述了一系列从初始情况出发的相关交互发的相关交互 用例是一个类,它代表一类功能而不是使用该功用例是一个类,它代表一类功能而不是使用该功能的某个具体实例。能的某个具体实例。用例的实例称为用例的实例称为“场景场景”4849从执行者的角度出发进行命名(如使用“登录”而不用“身份验证”)使用动宾结构或主谓结构命名.尽量使用行业术语(如用“报销”,而不用“交钱”)例:字处理程序中,“置正文为黑体”和”创建索引”都可以是用例.例:在一个银行业
32、务系统中可能有如右的用例 浏览账户余额浏览账户余额 列出交易内容列出交易内容 划拨资金划拨资金 5051 执行者需要系统提供哪些功能?执行者需要系统提供哪些功能?执行者自身需要做什么?执行者自身需要做什么?执行者是否需要读取、创建、删除、修改或存储系统中的执行者是否需要读取、创建、删除、修改或存储系统中的某类信息?某类信息?系统中发生的事件需要通知执行者吗?系统中发生的事件需要通知执行者吗?执行者需要通知系统某些事情吗?执行者需要通知系统某些事情吗?从功能观点看,这些事件能做什么?从功能观点看,这些事件能做什么?执行者的日常工作是否因为系统的新功能而被简化或提高执行者的日常工作是否因为系统的新
33、功能而被简化或提高了效率?了效率?系统需要哪些输入输出?输入来自何处?输出到哪里去?系统需要哪些输入输出?输入来自何处?输出到哪里去?当前使用的系统(可能是人工系统)存在的主要问题是什当前使用的系统(可能是人工系统)存在的主要问题是什么?么?52 开发者使用系统的用户手册、过程手册、公司标开发者使用系统的用户手册、过程手册、公司标准、用户日志和计划表,以及与用户和客户交谈准、用户日志和计划表,以及与用户和客户交谈的记录等来回答问题。的记录等来回答问题。开发者应该使用开发者应该使用应用领域应用领域中的词汇而非自己专业中的词汇而非自己专业领域的词汇写出场景。领域的词汇写出场景。当开发者更加深入地了
34、解了应用领域且决定了要当开发者更加深入地了解了应用领域且决定了要采用的可能技术后,可采用迭代和增量方式采用的可能技术后,可采用迭代和增量方式求精求精场景。场景。在标识执行者和标识场景期间,开发者要做的最在标识执行者和标识场景期间,开发者要做的最重要工作是重要工作是理解理解这些应用领域。这些应用领域。53l不要将所有的需求都以用例的形式表示出来不要将所有的需求都以用例的形式表示出来.l用例只描述系统功能性方面的需求用例只描述系统功能性方面的需求,它只量全部它只量全部需求的一部分需求的一部分.l本质上用例分析是功能分解技术本质上用例分析是功能分解技术,但目前是但目前是OOOO开开发的第一步发的第一
35、步.l用例是与实现无关的关于系统功能的描述用例是与实现无关的关于系统功能的描述.54标识用例图中的关系标识用例图中的关系关系说明记号关联关联执行者与他所参与的一个用例之间的通信路径。表示了用例执行期间的信息流扩展扩展扩展的用例到基本用例的一种关系,它指出扩展的用例所定义的行为如何插入到基本用例所定义的行为中包含包含指出包含用例定义的行为被包含在基本用例所定义的行为中继承继承一个一般用例与一个更特殊的用例之间的关系,特殊用例可继承一般用例的特征 extendinclude55 表示参与者用例之间进行通信。表示参与者用例之间进行通信。不同的参与者可以访问相同的用例。不同的参与者可以访问相同的用例。
36、56 客户用例可以简单地包含提供者用例具有的行为,客户用例可以简单地包含提供者用例具有的行为,并把它所包含的用例行为作为自身行为的一部分。并把它所包含的用例行为作为自身行为的一部分。57在对系统进行分析时,通常会发现有些功能在不同的环境下都可以被使用。在编写代码时,我们希望编写可重用的构件,这些构件包括诸如可以从其他代码中调用或参考的类库、子过程以及函数。包含关系包含关系是指一个用例(客户用例)的行为包含了另一个用例(提供者用例)的行为.客户用例可以简单地包含提供者用例具有的行为,并把它所包含的用例行为作为自身行为的一部分。58注意注意:箭头方向为客户用例到提供者用例箭头方向为客户用例到提供者
37、用例.59 a.如果有多个用例,并且这些用例如果有多个用例,并且这些用例包含大量类似的行为,应该考虑将这些类似的行为通过包含关系包,应该考虑将这些类似的行为通过包含关系包含到用例中,将这个功能分解到另一个用例中含到用例中,将这个功能分解到另一个用例中 b.对两个或多个互相独立的用例建模时做了对两个或多个互相独立的用例建模时做了重复的工作,可以通过包含关系包含这些重复的工作,可以通过包含关系包含这些重复的工作 c.如果某个行为可能会引入如果某个行为可能会引入冗余,或者,当行为发,或者,当行为发生变化时可能导致生变化时可能导致不一致性,这时,应该对这种行,这时,应该对这种行为进行为进行孤立建模并将
38、它包含到用例中并将它包含到用例中 60 当某个新用例在原来的用例基础上增加了新的步骤序列,当某个新用例在原来的用例基础上增加了新的步骤序列,则原用例被称作基用例,这种关系被称为扩展关系则原用例被称作基用例,这种关系被称为扩展关系。扩展用例被定义为基础用例的增量扩展。扩展用例被定义为基础用例的增量扩展。基础用例提供扩展点以添加新的行为。基础用例提供扩展点以添加新的行为。扩展用例提供插入片段以插入到基础用例的扩展点上。扩展用例提供插入片段以插入到基础用例的扩展点上。61 a.两个用例相似但不完全相同时 b.当要对多个额外情况逐一建模时,可以使用扩展关系,用一个独立的用例替代每个额外的情况 c.如果
39、用例涵盖了所有的情况变化,则该用例将会变得十分复杂,应该考虑使用扩展关系 62基本用例基本用例(扩展关系中扩展关系中)扩展用例扩展用例(扩展关系中扩展关系中)基本用例基本用例(包含关系中包含关系中)包含用例包含用例(包含关系中包含关系中)网上购物的部分用例网上购物的部分用例63 父用例也可以被特别列举为一个或多个子用例。父用例也可以被特别列举为一个或多个子用例。子用例表示父用例的特殊形式。子用例表示父用例的特殊形式。子用例从父用例处继承行为和属性,还可以添加子用例从父用例处继承行为和属性,还可以添加行为或覆盖、改变继承的行为。行为或覆盖、改变继承的行为。646566 两种关系都意味着从几个用例
40、中抽取那些公共的行为两种关系都意味着从几个用例中抽取那些公共的行为并放入一个单独的用例中,而这个用例被其他用例包并放入一个单独的用例中,而这个用例被其他用例包含或扩展含或扩展 两种关系的目的不同:两种关系的目的不同:通常在描述一般行为的变化时采用扩展关系通常在描述一般行为的变化时采用扩展关系在两个或多个用例中出现重复描述又想避免这种重复时,在两个或多个用例中出现重复描述又想避免这种重复时,可以采用包含关系可以采用包含关系根本区别:在包含关系中,源用例没有目的用例就不能工根本区别:在包含关系中,源用例没有目的用例就不能工作,而被包含用例可以独立存在;在扩展关系中,源用例作,而被包含用例可以独立存
41、在;在扩展关系中,源用例即使没有目的用例也能工作得很好,而目的用例通常只能即使没有目的用例也能工作得很好,而目的用例通常只能作为扩展的用例而存在。作为扩展的用例而存在。泛化和扩展表示用例之间的泛化和扩展表示用例之间的“is a”,包含关包含关系表示用例之间的系表示用例之间的“has a”.6768 扩展关系中,基用例可以单独存在,但在一定的条件下,它的行为可以被另一个用例的行为延伸。扩展只能发生在基用例的序列中某个特定的点上,这个点叫扩展点 扩展关系的基本含义与泛化关系类似,但对扩展用例有更多限制,即基本用例必须声明若干”扩展点”,扩展用例只能在扩展点上增加行为和含义.扩展关系与泛化关系扩展关
42、系与泛化关系6970编号编号说明说明FEAT01新增书籍信息新增书籍信息 FEAT02修改已有的书籍信息修改已有的书籍信息 FEAT03书籍信息按计算机类、非计算机类分别建档书籍信息按计算机类、非计算机类分别建档 FEAT04录入新书时能够自动按规则生成书号录入新书时能够自动按规则生成书号FEAT05计算机类与非计算机类书籍采用不同的书号规则计算机类与非计算机类书籍采用不同的书号规则FEAT06录入新书时如果重名将自动提示录入新书时如果重名将自动提示FEAT07按书名、作者、类别、出版社等关键字组合查询书籍按书名、作者、类别、出版社等关键字组合查询书籍FEAT08列出所有书籍信息列出所有书籍信
43、息FEAT09记录外借情况记录外借情况FEAT10外借状态能够自动反应在书籍信息中外借状态能够自动反应在书籍信息中FEAT11按人、按书查询外借情况按人、按书查询外借情况FEAT12列出所有的外借情况列出所有的外借情况FEAT13按特定时间段统计购买金额、册数按特定时间段统计购买金额、册数FEAT14所有查询、列表、统计功能应可以单独对计算机类或非计算机类进所有查询、列表、统计功能应可以单独对计算机类或非计算机类进行行71特性特性用例用例FEAT01.新增书籍信息新增书籍信息FEAT03.书籍信息按计算机类、非计算机类分别建档书籍信息按计算机类、非计算机类分别建档FEAT04.录入新书时能够自
44、动按规则生成书号录入新书时能够自动按规则生成书号FEAT05.计算机类与非计算机类书籍采用不同的书号规则计算机类与非计算机类书籍采用不同的书号规则FEAT06.录入新书时如果重名将自动提示录入新书时如果重名将自动提示UC01.新增书籍信息新增书籍信息FEAT02.修改已有的书籍信息修改已有的书籍信息UC02.修改书籍信息修改书籍信息FEAT07.按书名、作者、类别、出版社等关键字组合查询书按书名、作者、类别、出版社等关键字组合查询书籍籍FEAT08.列出所有书籍信息列出所有书籍信息FEAT14.所有查询、列表、统计功能应可以单独对计算机类所有查询、列表、统计功能应可以单独对计算机类或非计算机类
45、进行或非计算机类进行UC03.查询书籍信息查询书籍信息FEAT09.记录外借情况记录外借情况FEAT10.外借状态能够自动反应在书籍信息中外借状态能够自动反应在书籍信息中UC04.登记外借信息登记外借信息FEAT11.按人、按书查询外借情况按人、按书查询外借情况FEAT12.列出所有的外借情况列出所有的外借情况FEAT14.所有查询、列表、统计功能应可以单独对计算机类所有查询、列表、统计功能应可以单独对计算机类或非计算机类进行或非计算机类进行UC05.查询外借信息查询外借信息FEAT13.按特定时间段统计购买金额、册数按特定时间段统计购买金额、册数FEAT14.所有查询、列表、统计功能应可以单
46、独对计算机类所有查询、列表、统计功能应可以单独对计算机类或非计算机类进行或非计算机类进行UC06.统计金额和册统计金额和册数数72 找出系统外部的参与者和外部系统找出系统外部的参与者和外部系统,确定系统边确定系统边界和范围界和范围 确定每一个参与者所期望的系统行为确定每一个参与者所期望的系统行为 把这些系统行为命名为用例把这些系统行为命名为用例 使用泛化、包含、扩展等关系处理系统行为的公使用泛化、包含、扩展等关系处理系统行为的公共或变更部分共或变更部分 编制每一个用例的脚本编制每一个用例的脚本 绘制用例图绘制用例图 区分主要事件流和异常事件流区分主要事件流和异常事件流,如果需要如果需要,可以把
47、可以把异常事件流处理为单独的用例异常事件流处理为单独的用例 细化用例图细化用例图,解决用例间重复与冲突的问题解决用例间重复与冲突的问题.73用例描述是指对一个用例的功能进行的文字描述用例描述是指对一个用例的功能进行的文字描述,是是参与者与系统交互动作序列的说明参与者与系统交互动作序列的说明.用例描述才是用例的主要部分用例描述才是用例的主要部分,是后续的是后续的交互图分析和类图分析必不可少的部分交互图分析和类图分析必不可少的部分.用例采用自然语言描述参与者与系统的交互行为用例采用自然语言描述参与者与系统的交互行为,要要易于理解易于理解.其读者是开发人员、用户、项目经理、测其读者是开发人员、用户、
48、项目经理、测试人员等试人员等.74用例的目标用例的目标用例是怎么启动的用例是怎么启动的参与者与用例之间的消息如何传送参与者与用例之间的消息如何传送用例中除了主路径外用例中除了主路径外,其它路径是什么其它路径是什么用例结束后系统的状态用例结束后系统的状态其它需要描述的内容其它需要描述的内容用例描述一般包括的内容:用例描述一般包括的内容:描述用例时的原则是尽可能写得描述用例时的原则是尽可能写得“充分充分”,而不是形式而不是形式化、完整或漂亮化、完整或漂亮.75 执行者的简要描述 客户:向公司订购商品的人 客户代表:公司处理客户请求的雇员 库存系统:记录公司库存的软件 用例的简要描述 订购货物:客户
49、创建一个新的请求商品的订单,并为那些商品付费 取消订单:客户取消一个已经存在的订单76 用例的详细描述用例的详细描述 用例通常用正文来描述,也可用活动图来描述。用例的正文描述应包括以下内容:用例的目的用例的目的:用例的最终目的是什么?它试图达到什么?用例是如何启动的用例是如何启动的:哪个执行者在什么情况下启动用例的执行?执行者和用例之间的事件流执行者和用例之间的事件流:用例与执行者之间交换什么消息或事件来通知对方改变或恢复信息?描述系统与执行者之间的主事件流是什么?以及系统中哪些实体被使用或修改?用例中可供选择的流用例中可供选择的流:用例中的活动可根据条件或异常(exception)有选择地执
50、行。如何结束用例如何结束用例:描述何时可认为用例已结束。77 事件流是用例完成需求行为的事件描述 事件流的目的是:建立用例中逻辑流程的文档,详细描述系统用户的工作和系统本身的工作,既包括正常状态下系统完成需求行为的事件,也包括在其他状态下不能完成需求行为的事件78 用例名称用例名称 参与的执行者参与的执行者 目标目标:简要描述用例的最终任务和结果简要描述用例的最终任务和结果 前置条件前置条件:此用例开始执行的前提条件此用例开始执行的前提条件 事件流事件流:是从执行者的角度看,列出用例的各个步骤。:是从执行者的角度看,列出用例的各个步骤。包括基本流程和可选流程包括基本流程和可选流程 用例是怎样启