《第9章面向对象方法学引论优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第9章面向对象方法学引论优秀PPT.ppt(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第9章章 面对对象方法学引论面对对象方法学引论9.1 面对对象方法学概述面对对象方法学概述9.2 面对对象的概念面对对象的概念9.3 面对对象建模面对对象建模9.4 对象模型对象模型9.5 动态模型动态模型9.6 功能模型功能模型9.7 3种模型之间的关系种模型之间的关系1面对对象的概念起源于面对对象的概念起源于20世纪世纪60年头中期的年头中期的Simula67。80年头中期年头中期OOP模式进入主流。模式进入主流。80年头中后期,年头中后期,面对对象分析与设计的探讨起先发展。进入面对对象分析与设计的探讨起先发展。进入90年头,年头,面对对象软件工程成了很多软件产品的开发模式。面对对象软件
2、工程成了很多软件产品的开发模式。1 1 面对对象方法学概述面对对象方法学概述2面对对象方法学面对对象方法学OOM(Object-Oriented Methodology)OOM(Object-Oriented Methodology)特点:尽可能模拟人类习惯的思维方式,即问题域特点:尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一样。与传统方法相反,与求解域在结构上尽可能一样。与传统方法相反,OOM把数据和处理结合构成统一体把数据和处理结合构成统一体对象。这对象。这时程序不再是一系列工作在数据上的函数集合,而时程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的
3、集合。是相互协作又彼此独立的对象的集合。3成都成都北北京京Post-officeMessageSendbymethod对象对象ObjectObject=属性属性AttributeAttributes:location;employee;+操作操作MethodMethods:send;sell;留意:对象内部的属性不允许外部用户干脆改动,只有当它供应了留意:对象内部的属性不允许外部用户干脆改动,只有当它供应了相应的服务操作时,用户才能通过发送消息来提请它执行。相应的服务操作时,用户才能通过发送消息来提请它执行。我想把邮局搬到我想把邮局搬到我家门口,多加几个我家门口,多加几个邮递员,邮递员,24小
4、时都开门小时都开门对不起,对不起,本邮局不供应本邮局不供应此类服务此类服务唉,那就先送束花吧唉,那就先送束花吧Post_office.Send(request,payment)例:例:4OOM的四要素:的四要素:对象对象(object):世界由:世界由对象对象组成。组成。类类(class):具有相同属性和操作的:具有相同属性和操作的对象对象可划分为可划分为类类;单个对象可视为某一类的单个对象可视为某一类的实例实例(instance)。继承继承(inheritance):类可分层,下层:类可分层,下层子类子类与上层与上层父类父类有相同特征,称为有相同特征,称为继承继承。OOM=Object+Cl
5、ass+Inheritance+Communicationwithmessages消息消息(message):对象间只能通过发送消息进行联:对象间只能通过发送消息进行联系,外界不能处理对象的内部数据系,外界不能处理对象的内部数据,只能通过消息恳求它进行处理,只能通过消息恳求它进行处理(假如它供应相应消息的话)。(假如它供应相应消息的话)。5OOM:以:以object 为核心,强调对现实概念的模拟而不强调为核心,强调对现实概念的模拟而不强调算法。算法。“面对对象方法学的基本原则,是依据人们习面对对象方法学的基本原则,是依据人们习惯的思维方式建立问题域的模型,开发出尽可能直惯的思维方式建立问题域的
6、模型,开发出尽可能直观、自然地表现求解方法的软件系统观、自然地表现求解方法的软件系统”。Class:由特殊到一般的归纳:由特殊到一般的归纳 Inheritance:由一般到特殊的演绎:由一般到特殊的演绎OOM相比传统方法的优点:相比传统方法的优点:传统方法:面对过程设计,以计算为核心,数据与传统方法:面对过程设计,以计算为核心,数据与操作分别,不易理解。操作分别,不易理解。6OOM:以:以object模拟实体,需求变更不会引起结构的整体模拟实体,需求变更不会引起结构的整体变更,因为实体相对稳定,故系统也相应稳定。变更,因为实体相对稳定,故系统也相应稳定。传统方法:结构依靠于功能,不稳定。传统方
7、法:结构依靠于功能,不稳定。传统方法:通过建立标准函数库来重用软构件。传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的但标准函数缺少必要的“柔性柔性”,难,难以适应不同场合的不同须要。以适应不同场合的不同须要。OOM:一个:一个class全部的全部的 instances 都可重用它的代码;都可重用它的代码;由由 inheritance 派生出的新的派生出的新的 class 可重用其父可重用其父类的代码,并且可以修改、扩充而不影响其父类类的代码,并且可以修改、扩充而不影响其父类的运用。的运用。7稳定性好:软件功能需求的变更不牵动全局,只需局稳定性好:软件功能需求的变更不牵动全局,只
8、需局部修改;部修改;Class 独立性强:只要修改不涉及独立性强:只要修改不涉及class的对外接口,的对外接口,则内部修改完全不影响外部调用;则内部修改完全不影响外部调用;Inheritance和多态性和多态性(polymorphism)使其很简洁被修使其很简洁被修改和扩充;改和扩充;简洁理解;简洁理解;传统方法:可维护性是最令人头痛的问题。传统方法:可维护性是最令人头痛的问题。OOM:从以下几方面改善了可维护性从以下几方面改善了可维护性注:注:OOM并不是削减了开发时间,而是通过提高并不是削减了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的简洁可重用性、可维护性,进行扩充和修改
9、的简洁程度等,从长远角度改进了软件的质量。程度等,从长远角度改进了软件的质量。OOM与与Prototyping结合运用效果好。结合运用效果好。8特点:特点:以数据为中心,不设与数据无关的操作;以数据为中心,不设与数据无关的操作;Object主动处理而不主动处理而不被动地等待被处理,外部只能被动地等待被处理,外部只能通过通过message恳求操作;恳求操作;具有封装性:外部操作时,无须知道该具有封装性:外部操作时,无须知道该object内部内部的数据结构及算法;的数据结构及算法;具有并行性:不同具有并行性:不同object各自独立地处理自身数据,各自独立地处理自身数据,彼此间仅通过传递彼此间仅通
10、过传递message完成通信;完成通信;模块独立性好:内聚强、耦合松模块独立性好:内聚强、耦合松2 2 面对对象的概念面对对象的概念1、对象、对象93、消息、消息:object_ID.method_ID(parameter(s);4、方法(操作)、方法(操作):object能做的操作,亦称为能做的操作,亦称为service,在在 class 中须定义相应的代码;中须定义相应的代码;5、属性、属性:object 的固有数据;的固有数据;2、类:具有相同数据和相同操作的一组对象;、类:具有相同数据和相同操作的一组对象;实例:某个实例:某个class描述的具体对象;描述的具体对象;6、封装:把内部实
11、现细微环节隐藏起来,使其他外、封装:把内部实现细微环节隐藏起来,使其他外部对象无法访问,仅仅供应某些功能。使对象形成部对象无法访问,仅仅供应某些功能。使对象形成接口部分和实现部分接口部分和实现部分10Class中国人中国人中国人中国人Attributes中国人中国人Methods张三张三(instance)Class中国人中国人张三的张三的AttributesClass成都成都人人(子类子类)成都人成都人Attributes成都人成都人MethodsClass中国人中国人李四李四(instance)中国人李四的中国人李四的Attributes成都人李四的成都人李四的AttributesClas
12、s成都人成都人例:例:7、继承:、继承:子类自动共享父类的子类自动共享父类的attributes和和methods,而不必重复定义。,而不必重复定义。特点:特点:若若成都人成都人的的 methods中有与中有与中国人中国人的同名,则李的同名,则李四执行该四执行该 method 时以时以成都人成都人为准,不执行为准,不执行中国人中国人中定中定义的同名义的同名 method。传递性:传递性:AB、BCAC一个一个class继承了上层全部继承了上层全部classes的一切性质。的一切性质。11留意:多重继承在定留意:多重继承在定义中应避开二义性,义中应避开二义性,即两二个父类中定义即两二个父类中定义
13、重名,但各具不同性重名,但各具不同性质。质。例:例:FemaleChineseScholarCardDeckGraphicalObjectGraphicalDeckMethod:Draw:=takeacardfromadeckMethod:Draw:=displayagraphicalobjectMethod:Draw:=?例:例:修改与扩充可以很简洁地通过派生子类来完成。修改与扩充可以很简洁地通过派生子类来完成。一个子类只一个子类只有有一一个父类称为单个父类称为单继继承承,一个子类可有一个子类可有多个父类称为多重继承。多个父类称为多重继承。128、多态性与动态联编、多态性与动态联编多态性是指
14、子类对象可以像父类对象那样运用,同样多态性是指子类对象可以像父类对象那样运用,同样的消息既可以发送给父类对象也可以发送给子类对象。的消息既可以发送给父类对象也可以发送给子类对象。不同层次的不同层次的 classes 可共享一个可共享一个method名,但按各名,但按各自的方式来实现这种自的方式来实现这种 method。9、重载、重载在同一作用域内的若干个参数特征不同的函数可以运在同一作用域内的若干个参数特征不同的函数可以运用相同的函数名字。用相同的函数名字。在在C+语言中函数重载通过静态联编语言中函数重载通过静态联编(也叫从前联编也叫从前联编)实实现。现。如虚函数机制能在一个类如虚函数机制能在
15、一个类等级中运用相同函数的多等级中运用相同函数的多个不同版本,在运行时刻个不同版本,在运行时刻才依据接收消息的对象所才依据接收消息的对象所属于的类,确定究竟执行属于的类,确定究竟执行哪个特定的版本,称为动哪个特定的版本,称为动态联编,也叫滞后联编。态联编,也叫滞后联编。13模型:为了理解事物而对事物作出的一种抽象,是模型:为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。对事物的一种无歧义的书面描述。3种面对对象的模型:种面对对象的模型:描述系统数据结构的对象模型。描述系统数据结构的对象模型。描述系统限制结构的动态模型。描述系统限制结构的动态模型。描述系统功能的功能模型。描述
16、系统功能的功能模型。一个典型的软件系统组合了上述一个典型的软件系统组合了上述3方面内容:它运用方面内容:它运用数据结构数据结构(对象模型对象模型),执行操作,执行操作(动态模型动态模型),并且,并且完成数据值的变更完成数据值的变更(功能模型功能模型)。3 3 面对对象建模面对对象建模14几种面对对象开发方法几种面对对象开发方法:nBooch方法方法n Booch是面对对象方法最早的提出者之一,提是面对对象方法最早的提出者之一,提出了面对对象软件工程的概念。出了面对对象软件工程的概念。Booch认为软件认为软件开发是一个螺旋上升的过程。开发是一个螺旋上升的过程。nCoad-Yourdon方法方法
17、n 著名的著名的OOA/OOD方法,也是最早的面对对象的方法,也是最早的面对对象的分析与设计方法之一。简洁、易学。分析与设计方法之一。简洁、易学。nRumbaugh方法(简称方法(简称OMTObject Modeling Technology)n 该方法强调了三种模型,并将软件开发过程划分该方法强调了三种模型,并将软件开发过程划分为系统分析、系统设计、对象设计等几个阶段。为系统分析、系统设计、对象设计等几个阶段。nJacobson 方法(简称方法(简称OOSE)n 最大特点是强调运用用例(最大特点是强调运用用例(Use-Case),每一,每一个用例就是一个运用系统的方式,用例的执行将引个用例就
18、是一个运用系统的方式,用例的执行将引发执行一系列与行为相关的事务。发执行一系列与行为相关的事务。15统一建模语言统一建模语言UMLUML 由由Rumbaugh、Booch、Jacobson提出的统一提出的统一建模语言(建模语言(Unified Modeing Language),简,简称称UML。产生于产生于90年头中期。它不仅统一了年头中期。它不仅统一了Booch、OMT和和OOSE方法中的概念和表示法,而且对其作了方法中的概念和表示法,而且对其作了进一步扩展,最终成为在面对对象技术领域占主进一步扩展,最终成为在面对对象技术领域占主导地位的、并被大众所接受的标准建模语言。导地位的、并被大众所
19、接受的标准建模语言。UML不是一个开发过程,也不是一个方法,但允不是一个开发过程,也不是一个方法,但允许任何一种开发过程和面对对象方法运用它。许任何一种开发过程和面对对象方法运用它。16类图用来描述系统中的类及类和类之间的静态关系。类图用来描述系统中的类及类和类之间的静态关系。类的表示:类的表示:例如:例如:可访问性通常有可访问性通常有3种:种:公有的公有的(public)私有的私有的(private)爱护的爱护的(protected),分别用加号(分别用加号(+)、减号)、减号(-)和井号()和井号(#)表示。)表示。类名类的简单表示类的简单表示类的完整表示类的完整表示对象模型表现了客观世界
20、实体对象的相互关系。通对象模型表现了客观世界实体对象的相互关系。通常运用常运用UML供应的类图来建立对象模型。供应的类图来建立对象模型。4 4 对象模型对象模型类图的基本符号类图的基本符号17类图由类及类与类之间的关系组成。定义了类类图由类及类与类之间的关系组成。定义了类之后就可以定义类与类之间的各种关系了。类与类之后就可以定义类与类之间的各种关系了。类与类之间通常有关联、泛化(继承)、依靠和细化等之间通常有关联、泛化(继承)、依靠和细化等4种关系。种关系。表示关系的符号表示关系的符号18类1类2角色角色关联名角色表示该类在这个关联角色表示该类在这个关联中的作用。假如没有显式中的作用。假如没有
21、显式标出角色名,则意味着用标出角色名,则意味着用类名作为角色名。类名作为角色名。重数:该类有多少个对象重数:该类有多少个对象与对方的一个对象连接。与对方的一个对象连接。关联关联表示两个类的对象之间存在某种语义上的联系。表示两个类的对象之间存在某种语义上的联系。重数1、关联、关联19在表示关联的直线两端可以写上重数(在表示关联的直线两端可以写上重数(multiplicity),),它表示该类有多少个对象与对方的一个对象连接。它表示该类有多少个对象与对方的一个对象连接。重数的表示方法通常有:重数的表示方法通常有:01表示表示0到到1个对象个对象0*或或*表示表示0到多个对象到多个对象1+或或1*表
22、示表示1到多个对象到多个对象115表示表示1到到15个对象个对象3表示表示3个对象个对象假如图中未明确标出关联的重数,则默认重数是假如图中未明确标出关联的重数,则默认重数是1。20公司董事会默认关联名是默认关联名是has(有),省略重数默认(有),省略重数默认1。人员董事会成员0,3.8*董事会每一个董事会没有或者有每一个董事会没有或者有38个董事会成员个董事会成员(有角色名,可以省略关联名)(有角色名,可以省略关联名)(1)一般关联一般关联最常见的关联关系。最常见的关联关系。例如:例如:21(2)递归关联)递归关联即一个类与它本身有关联关系。即一个类与它本身有关联关系。例如:22(3)限定关
23、联限定关联也叫受限关联,两个类及一个限定词组成,限定词也叫受限关联,两个类及一个限定词组成,限定词是一种特定的属性,用来有效地削减关联的重数。是一种特定的属性,用来有效地削减关联的重数。在类图中把限定词放在关联关系末端的一个小方框在类图中把限定词放在关联关系末端的一个小方框内。内。限定关联通常用在一对多或多对多的关联关系中,限定关联通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一,或从可以把模型中的重数从一对多变成一对一,或从多对多简化成多对一。多对多简化成多对一。23例如,某操作系统中一个书目下有很多文件,一个例如,某操作系统中一个书目下有很多文件,一个文件仅属于一个
24、书目,在一个书目内文件名确定了文件仅属于一个书目,在一个书目内文件名确定了惟一一个文件。图惟一一个文件。图9.8利用限定词利用限定词“文件名文件名”表示了表示了书目与文件之间的关系,可见,利用限定词把一对书目与文件之间的关系,可见,利用限定词把一对多关系简化成了一对一关系。多关系简化成了一对一关系。图图9.8一个受限的关联一个受限的关联24限定提高了语义精确性,增加了查询实力。限定提高了语义精确性,增加了查询实力。在图在图9.8中,限定的语法表明,文件名在其书中,限定的语法表明,文件名在其书目内是惟一的。因此,查找一个文件的方法目内是惟一的。因此,查找一个文件的方法就是,首先定下书目,然后在该
25、书目内查找就是,首先定下书目,然后在该书目内查找指定的文件名。由于书目加文件名可惟一地指定的文件名。由于书目加文件名可惟一地确定一个文件,因此,限定词确定一个文件,因此,限定词“文件名文件名”应应当放在靠近书目的那一端。当放在靠近书目的那一端。25在一些状况下关联可能须要记录一些信息,但这些信息不能放在一些状况下关联可能须要记录一些信息,但这些信息不能放在任何一个类中,可引入一个关联类记录这些信息。关联类通在任何一个类中,可引入一个关联类记录这些信息。关联类通过一条虚线与关联连接。过一条虚线与关联连接。学生*选修 *课程一个多对多关联。一个多对多关联。“成绩成绩”属性不能放在任何一方属性不能放
26、在任何一方学生*课程选修成绩创建一个关联类创建一个关联类来保存成绩,关来保存成绩,关联类与一般的类联类与一般的类一样,也有属性、一样,也有属性、操作和关联。操作和关联。学生*选修 *成绩课程与带有关联类的多对多关联等价的两与带有关联类的多对多关联等价的两个一对多关联的图个一对多关联的图(4)关联类关联类26整体类部分类整体类部分类共享聚集共享聚集组合聚集组合聚集2、聚集:、聚集:组合是一种强类型的聚集,整体类和部分类共存亡,假如整组合是一种强类型的聚集,整体类和部分类共存亡,假如整体类被撤销,部分类也不存在。体类被撤销,部分类也不存在。表示表示“整体整体-部分部分”的特殊关联的特殊关联例如:2
27、7(1)共享聚集共享聚集假如在聚集关系中处于部分方的对象可同时参与多假如在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。个处于整体方对象的构成,则该聚集称为共享聚集。例如,一个课题组包含很多成员,每个成员又可以例如,一个课题组包含很多成员,每个成员又可以是另一个课题组的成员,则课题组和成员之间是共是另一个课题组的成员,则课题组和成员之间是共享聚集关系,。享聚集关系,。(2)组合聚集组合聚集假如部分类完全隶属于整体类,部分与整体共存,假如部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消逝(或失去存在价值整体不存在了部分也会随之消逝(或失去存
28、在价值了),则该聚集称为组合聚集(简称为组成)。例了),则该聚集称为组合聚集(简称为组成)。例如,在屏幕上打开一个窗口,它就由文本框、列表如,在屏幕上打开一个窗口,它就由文本框、列表框、按钮和菜单组成,一旦关闭了窗口,各个组成框、按钮和菜单组成,一旦关闭了窗口,各个组成部分也同时消逝,窗口和它的组成部分之间存在着部分也同时消逝,窗口和它的组成部分之间存在着组合聚集关系。组合聚集关系。283.泛化泛化UML中的泛化关系就是通常所说的继承关系,中的泛化关系就是通常所说的继承关系,它是通用元素和具体元素之间的一种分类关它是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并系。具
29、体元素完全拥有通用元素的信息,并且还可以附加一些其他信息。且还可以附加一些其他信息。在在UML中,用一端为空心三角形的连线表示中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。泛化关系,三角形的顶角紧挨着通用元素。留意,泛化针对类型而不针对实例,一个类留意,泛化针对类型而不针对实例,一个类可以继承另一个类,但一个对象不能继承另可以继承另一个类,但一个对象不能继承另一个对象。事实上,泛化关系指出在类与类一个对象。事实上,泛化关系指出在类与类之间存在之间存在“一般一般-特殊特殊”关系。泛化可进一步划关系。泛化可进一步划分成一般泛化和受限泛化。分成一般泛化和受限泛化。29一般类特
30、殊类人员教师学生由一个超类和几个干脆子类构成的结构通常称由一个超类和几个干脆子类构成的结构通常称为泛化为泛化。表示一般。表示一般-特殊关系或继承关系。特殊关系或继承关系。例如:(1)一般泛化)一般泛化30须要特殊说明的是,没有具体对象的类称为抽象类。须要特殊说明的是,没有具体对象的类称为抽象类。抽象类通常作为父类,用于描述其他类(子类)的抽象类通常作为父类,用于描述其他类(子类)的公共属性和行为。图示抽象类时,在类名下方附加公共属性和行为。图示抽象类时,在类名下方附加一个标记值一个标记值abstract,如图,如图9.12所示。图下方的所示。图下方的两个折角矩形是模型元素两个折角矩形是模型元素
31、“笔记笔记”的符号,其中的的符号,其中的文字是注释,分别说明两个子类的操作文字是注释,分别说明两个子类的操作drive的功能。的功能。抽象类通常都具有抽象操作。抽象操作仅用来指定抽象类通常都具有抽象操作。抽象操作仅用来指定该类的全部子类应具有哪些行为。抽象操作的图示该类的全部子类应具有哪些行为。抽象操作的图示方法与抽象类相像,在操作标记后面跟随一特性质方法与抽象类相像,在操作标记后面跟随一特性质串串abstract。31图图9.12抽象类示例抽象类示例32与抽象类相反的类是具体类,具体类有自己的对象,与抽象类相反的类是具体类,具体类有自己的对象,并且该类的操作都有具体的实现方法。并且该类的操作
32、都有具体的实现方法。图图9.13给出一个比较困难的类图示例,这个例子综给出一个比较困难的类图示例,这个例子综合应用了前面讲过的很多概念和图示符号。合应用了前面讲过的很多概念和图示符号。33图9.13 困难类图示例34(2)受限泛化受限泛化可以可以给给泛化关系附加泛化关系附加约约束条件,以束条件,以进进一步一步说说明明该该泛泛化关系的运用方法或化关系的运用方法或扩扩充方法,充方法,这样这样的泛化关系称的泛化关系称为为受限泛化。受限泛化。预预定定义义的的约约束有束有4种:种:多重、不相交、多重、不相交、完全和不完全。完全和不完全。这这些些约约束都是束都是语义约语义约束。束。多重多重继继承指的是,一
33、个子承指的是,一个子类类可以同可以同时时多次多次继继承同一承同一个上个上层层基基类类,例如,例如图图9.14中的水中的水陆陆两用两用类继类继承了两承了两次交通工具次交通工具类类。与多重与多重继继承相反的是不相交承相反的是不相交继继承,即一个子承,即一个子类类不能不能多次多次继继承同一个基承同一个基类类(这样这样的基的基类类相当于相当于C+语语言中的虚基言中的虚基类类)。假如)。假如图图中没有指定中没有指定多重多重约约束,束,则则是不相交是不相交继继承,一般的承,一般的继继承都是不相交承都是不相交继继承。承。35图图9.14多重继承示例多重继承示例36完全继承指的是父类的全部子类都已在类图中穷举
34、完全继承指的是父类的全部子类都已在类图中穷举出来了,图示符号是指定出来了,图示符号是指定完全完全约束。约束。不完全继承与完全继承恰好相反,父类的子类并没不完全继承与完全继承恰好相反,父类的子类并没有都穷举出来,随着对问题理解的深化,可不断补有都穷举出来,随着对问题理解的深化,可不断补充和维护,这为日后系统的扩充和维护带来很大便充和维护,这为日后系统的扩充和维护带来很大便利。不完全继承是一般状况下默认的继承关系。利。不完全继承是一般状况下默认的继承关系。374、依靠和细化、依靠和细化(1)依靠关系依靠关系描述两个模型元素(类、用例等)之间的语义连接描述两个模型元素(类、用例等)之间的语义连接关系
35、:关系:其中一个模型元素是独立的,另一个模型其中一个模型元素是独立的,另一个模型元素不是独立的,它依靠于独立的模型元素。元素不是独立的,它依靠于独立的模型元素。独立类不独立版类标签:说明依赖的种类例如:例如:友元关系使得类友元关系使得类B B的操作可以运用的操作可以运用A A类中私有的或爱护的成员。类中私有的或爱护的成员。38(2)细化关系细化关系当对同一个事物在不同抽象层次上描述时,这些描当对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。述之间具有细化关系。假设两个模型元素假设两个模型元素A和和B描述同一个事物,它们的描述同一个事物,它们的区分是抽象层次不同,假如区分是抽象层次
36、不同,假如B是在是在A的基础上的更的基础上的更具体的描述,则称具体的描述,则称B细化了细化了A,或称,或称A细化成了细化成了B。细化用来协调不同阶段模型之间的关系,表示各个细化用来协调不同阶段模型之间的关系,表示各个开发阶段不同抽象层次的模型之间的相关性,常常开发阶段不同抽象层次的模型之间的相关性,常常用于跟踪模型的演化用于跟踪模型的演化BA39ClassNameAttributesMethodsClassClassNameAttributesMethodsClass-&-Object表示属于该类表示属于该类的对象的对象也可对类和对象用有区分的画法:也可对类和对象用有区分的画法:40动态模型表
37、示瞬时的、行为化的系统的动态模型表示瞬时的、行为化的系统的“限制限制”性性质,它规定了对象模型中的对象的合法变更序列。质,它规定了对象模型中的对象的合法变更序列。一旦建立起对象模型之后,就须要考察对象的动态一旦建立起对象模型之后,就须要考察对象的动态行为。全部对象都具有自己的生命周期(或称为运行为。全部对象都具有自己的生命周期(或称为运行周期)。对一个对象来说,生命周期由很多阶段行周期)。对一个对象来说,生命周期由很多阶段组成,在每个特定阶段中,都有适合该对象的一组组成,在每个特定阶段中,都有适合该对象的一组运行规律和行为规则,用以规范该对象的行为。生运行规律和行为规则,用以规范该对象的行为。
38、生命周期中的阶段也就是对象的状态。命周期中的阶段也就是对象的状态。动态模型:表示系统瞬时的限制性质动态模型:表示系统瞬时的限制性质5 5 动态模型动态模型41状态1do/活动1状态2do/活动2事件条件/动作其中:状态内部的“活动”不引起状态转移;箭头上的“动作”指状态转移时要执行的动作。注:当描述循环运行过程时,通常不关切是怎样启动的。注:当描述循环运行过程时,通常不关切是怎样启动的。三要素:三要素:事务事务:引发:引发 object 状态变更的限制信息(瞬时)。状态变更的限制信息(瞬时)。状态:即状态:即 object 的的 attributes 所处的情形(可持续)。所处的情形(可持续)
39、。活动:活动:Object 要达到某种要达到某种 status 所做的操作(耗时)。所做的操作(耗时)。状态图状态图42通常,用通常,用UML供应的状态图来描绘对象的状态、触供应的状态图来描绘对象的状态、触发状态转换的事务以及对象的行为(对事务的响应)发状态转换的事务以及对象的行为(对事务的响应)。每个类的动态行为用一张状态图来描绘,各个类的每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事务合并起来,从而构成系统的动状态图通过共享事务合并起来,从而构成系统的动态模型。也就是说,动态模型是基于事务共享而相态模型。也就是说,动态模型是基于事务共享而相互关联的一组状态图的集合。互关联的一
40、组状态图的集合。43闲闲 置置拨拨 号号通通 话话断断 线线拨号音拨号音do:do:响拨号音响拨号音超超 时时do:do:响蜂鸣音响蜂鸣音存储的信息存储的信息do:do:播放信息播放信息接通中接通中do:do:试接通试接通振振 铃铃do:do:振振 铃铃忙忙 音音do:do:响忙音响忙音拿起听筒拿起听筒数字数字数字数字有效号码有效号码已接通已接通受话人回话受话人回话受话人挂断电话受话人挂断电话挂断电话挂断电话超超时时挂断电话挂断电话超时超时无效号码无效号码信息播完信息播完占占线线例:例:电电话话的的状状态态图图44UML供应的用例图也是建立功能模型的强有力工供应的用例图也是建立功能模型的强有力
41、工具。在具。在UML中把用用例图建立起来的系统模型称中把用用例图建立起来的系统模型称为用例模型,一个用例模型由若干幅用例图组成。为用例模型,一个用例模型由若干幅用例图组成。6 6 功能模型功能模型功能模型:表明系统应当做什么功能模型:表明系统应当做什么通常的表示方法:数据流图(通常的表示方法:数据流图(DFD)用例图仅仅从参与者运用系统的角度描述系统,用例图仅仅从参与者运用系统的角度描述系统,不反映内部的处理方式。因此用例图定义的是系不反映内部的处理方式。因此用例图定义的是系统的功能需求。其主要目的是以一种可视化的方统的功能需求。其主要目的是以一种可视化的方式理解系统的功能需求。式理解系统的功
42、能需求。一幅用例图包含的模型元素有系统、行为者、用一幅用例图包含的模型元素有系统、行为者、用例及用例之间的关系。例及用例之间的关系。45用例建模的主要步骤:用例建模的主要步骤:首先定义一个系统;首先定义一个系统;并在该系统中确定执行者;并在该系统中确定执行者;确定用例,描述每一个用例;确定用例,描述每一个用例;确定关系(包括用例与执行者之间的关系,执行者确定关系(包括用例与执行者之间的关系,执行者之间的关系,用例之间的关系);之间的关系,用例之间的关系);最终确认所建的模型。最终确认所建的模型。461.系统系统系统被看作是一个供应用例的黑盒子,内部如何工系统被看作是一个供应用例的黑盒子,内部如
43、何工作、用例如何实现,这些对于建立用例模型来说都作、用例如何实现,这些对于建立用例模型来说都是不重要的。是不重要的。代表系统的方框的边线表示系统的边界,用于划定代表系统的方框的边线表示系统的边界,用于划定系统的功能范围,定义了系统所具有的功能。描述系统的功能范围,定义了系统所具有的功能。描述该系统功能的用例置于方框内,代表外部实体的行该系统功能的用例置于方框内,代表外部实体的行为者置于方框外。为者置于方框外。9.6.1 用例图47例如:48签定一份签定一份保险单保险单客户客户保险销保险销售人员售人员销售统计销售统计客户统计客户统计某保险业务的用例图某保险业务的用例图又如:492.用例用例一个用
44、例是可以被行为者感受到的、系统的一个完一个用例是可以被行为者感受到的、系统的一个完整的功能。在整的功能。在UML中把用例定义成系统完成的一中把用例定义成系统完成的一系列动作,动作的结果能被特定的行为者察觉到。系列动作,动作的结果能被特定的行为者察觉到。这些动作除了完成系统内部的计算与工作外,还包这些动作除了完成系统内部的计算与工作外,还包括与一些行为者的通信。用例通过关联与行为者连括与一些行为者的通信。用例通过关联与行为者连接,关联指出一个用例与哪些行为者交互,这种交接,关联指出一个用例与哪些行为者交互,这种交互是双向的。互是双向的。用例具有下述特征:用例具有下述特征:(1)用例代表某些用户可
45、见的功能,实现一个具用例代表某些用户可见的功能,实现一个具体的用户目标;体的用户目标;50(2)用例总是被行为者启动的,并向行为者供应用例总是被行为者启动的,并向行为者供应可识别的值;可识别的值;(3)用例必需是完整的。用例必需是完整的。留意,用例是一个类,它代表一类功能而不是运用留意,用例是一个类,它代表一类功能而不是运用该功能的某个具体实例。用例的实例是系统的一种该功能的某个具体实例。用例的实例是系统的一种实际运用方法,通常把用例的实例称为脚本。脚本实际运用方法,通常把用例的实例称为脚本。脚本是系统的一次具体执行过程,例如,在自动售货机是系统的一次具体执行过程,例如,在自动售货机系统中,张
46、三投入硬币购买矿泉水,系统收到钱后系统中,张三投入硬币购买矿泉水,系统收到钱后把矿泉水送出来,上述过程就是一个脚本;李四投把矿泉水送出来,上述过程就是一个脚本;李四投币买可乐,但是可乐已卖完了,于是系统给出提示币买可乐,但是可乐已卖完了,于是系统给出提示信息并把钱退还给李四,这个过程是另一个脚本。信息并把钱退还给李四,这个过程是另一个脚本。513.行为者行为者行为者是指与系统交互的人或其他系统,它代表外行为者是指与系统交互的人或其他系统,它代表外部实体。运用用例并且与系统交互的任何人或物都部实体。运用用例并且与系统交互的任何人或物都是行为者。是行为者。行为者代表一种角色,而不是某个具体的人或物
47、。行为者代表一种角色,而不是某个具体的人或物。事实上,一个具体的人可以充当多种不同角色。事实上,一个具体的人可以充当多种不同角色。52在用例图中用直线连接行为者和用例,表示两者之在用例图中用直线连接行为者和用例,表示两者之间交换信息,称为通信联系。行为者触发(激活)间交换信息,称为通信联系。行为者触发(激活)用例,并与用例交换信息。单个行为者可与多个用用例,并与用例交换信息。单个行为者可与多个用例联系;反之,一个用例也可与多个行为者联系。例联系;反之,一个用例也可与多个行为者联系。对于同一个用例而言,不同行为者起的作用也不同。对于同一个用例而言,不同行为者起的作用也不同。可以把行为者分成主行为
48、者和副行为者,还可分成可以把行为者分成主行为者和副行为者,还可分成主动行为者和被动行为者。主动行为者和被动行为者。实践表明,行为者对确定用例是特别有用的。面对实践表明,行为者对确定用例是特别有用的。面对一个大型、困难的系统,要列出用例清单往往很困一个大型、困难的系统,要列出用例清单往往很困难,可以先列出行为者清单,再针对每个行为者列难,可以先列出行为者清单,再针对每个行为者列出它的用例。这样做可以比较简洁地建立起用例模出它的用例。这样做可以比较简洁地建立起用例模型。型。534.用例之间的关系用例之间的关系UML用例之间主要有扩展和运用两种关系,它们用例之间主要有扩展和运用两种关系,它们是泛化关
49、系的两种不同形式。是泛化关系的两种不同形式。(1)扩展关系扩展关系向一个用例中添加一些动作后构成了另一个用例,向一个用例中添加一些动作后构成了另一个用例,这两个用例之间的关系就是扩展关系,后者继承前这两个用例之间的关系就是扩展关系,后者继承前者的一些行为,通常把后者称为扩展用例。例如,者的一些行为,通常把后者称为扩展用例。例如,在自动售货机系统中,在自动售货机系统中,“售货售货”是一个基本的用例,是一个基本的用例,假如顾客购买罐装饮料,售货功能完成得很顺当,假如顾客购买罐装饮料,售货功能完成得很顺当,但是,假如顾客要购买用纸杯装的散装饮料,则不但是,假如顾客要购买用纸杯装的散装饮料,则不能执行
50、该用例供应的常规动作,而要做些改动。能执行该用例供应的常规动作,而要做些改动。54我们可以修改售货用例,使之既能供应售罐装饮料我们可以修改售货用例,使之既能供应售罐装饮料的常规动作又能供应售散装饮料的特别规动作,但的常规动作又能供应售散装饮料的特别规动作,但是,这将把该用例与一些特殊的推断和逻辑混杂在是,这将把该用例与一些特殊的推断和逻辑混杂在一起,使正常的流程晦涩难懂。图一起,使正常的流程晦涩难懂。图9.18中把常规动中把常规动作放在作放在“售货售货”用例中,而把特别规动作放置于用例中,而把特别规动作放置于“售散装饮料售散装饮料”用例中,这两个用例之间的关系就是用例中,这两个用例之间的关系就