面向对象建模-UML建模语言.ppt
UML建模语言,第五章,UML建模语言目录,5.1 UML概述,5.2 通用模型元素,5.3 用例建模,5.4静态建模,5.5 动态建模,5.6 实现模型,UML建模语言,概 述,软件工程领域在1995年至1997年取得了前所未有的进展,其成果超过软件工程领域过去15年来的成就总和。其中最重要的、具有划时代重大意义的成果之一就是统一建模语言 UML(Unified Modeling Language)的出现。在世界范围内,至少在近10年内,UML将是面向对象技术领域内占主导地位的标准建模语言。,概 述,5.1 UML概述,5.1 UML概述,UML(Unified Modeling Language)是软件界第一个统一的建模语言,该方法结合了Booch,OMT,和OOSE方法的优点,统一了符号体系,并从其它的方法和工程实践中吸收了许多经过实际检验的概念和技术。它是一种标准的表示,已成为国际软件界广泛承认的标准。它是第三代面向对象的开发方法,是一种基于面向对象的可视化的通用(General)建模语言。为不同领域的用户提供了统一的交流标准 UML图。UML应用领域很广泛,可用于软件开发建模的各个阶段,商业建模(Business Modeling),也可用于其它类型的系统。,什么是模型?为什么要建模?,什么是模型?,模型是一个系统的完整的抽象。人们对某个领域特定问题的求解及解决方案,对它们的理解和认识都蕴涵在模型中。通常,开发一个计算机系统是为了解决某个领域特定问题,问题的求解过程,就是从领域问题到计算机系统的映射。,领域问题,概念模型,分析、抽取,系统需求,解决方案,分析、设计,提取,UML作为一种可视化的建模语言,提供了丰富的基于面向对象概念的模型元素及其图形表示元素。,5.1.1 UML的形成,九十年代中,面向对象方法已经成为软件分析和设计方法的主流。1994年10月Jim Rumbaugh和Grady Booch共同合作把他们的OMT和Booch方法统一起来,到1995年成为“统一方法”(Unified Method)版本0.8。随后,Ivar Jacobson加入,并采用他的用例(User case)思想,到1996年,成为“统一建模语言”版本0.9。1997年1月,UML版本1.0被提交给OMG组织,作为软件建模语言标准的候选。其后的半年多时间里,一些重要的软件开发商和系统集成商都成为“UML伙伴”,如IBM,Mircrosoft,HP等.1997年11月7日被正式采纳作为业界标准。,5.1.1 UML的形成,图5.1,5.1.1 UML的形成,5.1.2 UML的主要内容,UML的定义包括UML语义和UML表示法两个部分。(1)UML语义 描述基于UML的精确元模型(meta-model)定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的表达方法所造成的影响。此外UML还支持对元模型的扩展定义。UML支持各种类型的语义。如布尔、表达式、列表、阶、名字、坐标、这字符串和时间等,还允许用户自定义类型。(2)UML表示法定义UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准.。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。,5.1.2 UML的主要内容,5.1.2 UML的主要构成,UML是一种标准化的图形建模语言,它是面向对象分析与设计的一种标准表示。由:视图(views),图(Diagrams),模型元素(Model elements)通用机制(general mechanism)等几个部分构成。,UML的主要构成,UML的主要内容,一个系统应从不同的角度进行描述,从一个角度观察到的系统称为一个视图(view)。视图由多个图(Diagrams)构成,它不是一个图表(Graph),而是在某一个抽象层上,对系统的抽象表示。如果要为系统建立一个完整的模型图,需定义一定数量的视图,每个视图表示系统的一个特殊的方面。另外,视图还把建模语言和系统开发时选择的方法或过程连接起来。,5.1.2 UML的主要内容,视图(views),Use case View描述系统的外部特性、系统功能等。,Implementation View 表示系统的实现特征,常用构件图表示。,Design View 描述系统设计特征,包括结构模型视图和行为模型视图,前者描述系统的静态结构(类图、对象图),后者描述系统的动态行为(交互图、状态图、活动图)。,Process View 表示系统内部的控制机制。常用类图描述过程结构,用交互图描述过程行为。,Deployment View 配置视图描述系统的物理配置特征。用配置图表示。,5.1.2 UML的主要内容,UML常用视图,UML语言定义了五种类型,9种不同的图,把它们有机的结合起来就可以描述系统的所有视图。用例图(Use case diagram)从用户角度描述系统功能,并指出各功能的操作者。静态图(Static diagram),表示系统的静态结构。包括类图、对象图、包图。行为图(Behavior diagram),描述系统的动态模型和组成对象间的交互关系。包括状态图、活动图。交互图(Interactive diagram),描述对象间的交互关系。包括顺序图、合作图。实现图(Implementation diagram)用于描述系统的物理实现。包括构件图、部件图。,5.1.2 UML的主要内容,图(Diagrams),图,代表面向对象中的类,对象,关系和消息等概念,是构成图的最基本的常用的元素。一个模型元素可以用在多个不同的图中,无论怎样使用,它总是具有相同的含义和相同的符号表示。通用机制(general mechanism)用于表示其他信息,比如注释,模型元素的语义等。另外,为了适应用户的需求,它还提供了扩展机制(Extensibility mechanisms),包括构造型(Stereotype)、标记值(Tagged value)和约束(Constraint).使用UML语言能够适应一个特殊的方法(或过程),或扩充至一个组织或用户。,5.1.2 UML的主要内容,模型元素(Model elements),UML在演变过程中还提出了一些新的概念。在UML标准中新加了模板(Stereotypes)、职责(Responsibilities)、扩展机制(Extensibility mechanisms)、线程(Threads)、过程(Processes)、分布式(Distribution)、并发(Concurrency)、模式(Patterns)、合作(Collaborations)、活动图(Activity diagram)等新概念,并清晰地区分类型(Type)、类(Class)和实例(Instance)、细化(Refinement)、接口(Interfaces)和组件(Components)等概念。,5.1.2 UML的主要内容,(1)统一标准UML统一了Booch、OMT和OOSE等方法中的基本概念,已成为OMG的正式标准,提供了标准的面向对象的模型元素的定义和表示。(2)面向对象UML还吸取了面向对象技术领域中其他流派的长处。UML符号表示考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极少使用的符号,也添加了一些新符号。(3)可视化、表示能力强系统的逻辑模型或实现模型都能用UML模型清晰的表示,可用于复杂软件系统的建模。(4)独立于过程UML是系统建模语言,独立于开发过程。(5)易掌握、易用由于UML的概念明确,建模表示法简洁明了,图形结构清晰,易于掌握使用。,5.1.3 UML的特点,5.1.3 UML的特点,5.2 通用模型元素,5.2 通用模型元素,模型元素是UML构造系统的各种元素,是UML构建模型的基本单位。模型元素代表面向对象中的类,对象,关系和消息等概念,是构成图的最基本的常用的概念。分为以下两类:1、基元素 是已由UML定义的模型元素。如:类、结点、构件、注释、关联、依赖和泛化等。2、构造型元素 在基元素的基础上构造的新的模型元素,是由基元素增加了新的定义而构成的,如扩展基元素的语义(不能扩展语法结构),也允许用户自定义。构造型用括在双尖括号中的字符串表示。目前UML提供了40多个预定义的构造型元素。如使用Use、扩展 Extend。,5.2.1 模型元素,5.2.1 模型元素,图5.2,可以在图中使用的概念统称为模型元素。模型元素在图中用其相应的视图元素(符号)表示,图3.2给出了常用的元素符号:类、对象、结点、包和组件等。,模型元素,关联:连接(connect)模型元素及链接(link)实例。依赖:表示一个元素以某种方式依赖于另一种元素。泛化:表示一般与特殊的关系,即“一般”元素是“特殊”关系的泛化。聚合:表示整体与部分的关系。除了上述的模型元素外,模型元素还包括消息,动作和版类(stereotype)等。,图5.3,3.2.1 模型元素,模型元素与模型元素之间的连接关系也是模型元素,常见的关系有关联(association)、泛化(generalization)、依赖(dependency)和聚合(aggregation),其中聚合是关联的一种特殊形式。这些关系的图示符号如图3.3所示。,5.2.2 关联和链,关联(association)是两个或多个类之间的一个关系。链(link)是关联的具体体现。,5.2.2 关联和链,关联的表示如图3.(a)(b)所示,关联有二元关联(binary)、三元关联(ternary)、多元关联(higher order)。,图5.,(a)二元关联,(b)三元关联,3.2.3 关联的表示,关联的重数重数(multiplicity)表示多少个对象与对方对象相连接(图3.5),常用的重数符号有:“0.1”表示零或1“0.*”或“*”表示零或多个“1.*”表示1或多个“1,3,7”表示1或3或7(枚举型)重数的默认值为1。,5.2.3 关联的表示,图5.5 带有多重性关联,有序关联与导航(导引)在关联的多端标注ordered指明这些对象是有序的(图3.6)。关联可以用箭头,表示该关联使用的方向(单向或双向),称为导引或导航(navigation)。,受限关联(qualified association)使用限定词对该关联的另一端的对象进行明确的标识和鉴别(图5.7)。,图5.7 受限关联,5.3.1 关联的表示5,关联的表示,5.2.4 约束,UML中提供了一种简便、统一和一致的约束(constraint),是各种模型元素的一种语义条件或限制。一条约束只能应用于同一类的元素。,约束的表示如果约束应用于一种具有相应视图元素的模型元素,它可以出现在它所约束元素视图元素的旁边。通常一个约束由一对花括号括起来(constraint),花括号中为约束内容(图5.8)。,如果一条约束涉及同一种类的多个元素,则要用虚线把所有受约束的元素框起来,并把该约束显示在旁边(如或约束)。,图5.8,5.2.4 约束,约束,图5.9 对泛化的约束的两种表示方法,约束可分为:对泛化的约束、关联的约束,对泛化的约束应用于泛化的约束,显示在大括号里,若有多个约束,用逗号隔开。如果没有共享,则用一条虚线通过所有继承线,并在虚线的旁边显示约束,如图5.9所示:,5.3.2 约束,对泛化有以下常用的约束:1、complete:说明泛化中所有子元素都已在模型中说明,不允许再增加其它子元素。2、disjoint:父类对象不能有多于一个型的子对象。3、incomplete:说明不是泛化中所有子元素都已说明,允许再增加其它子元素。4、overlapping:给定父类对象可有多于一个型的子对象,表示重载。,5.3.2 约束,返回,对消息,链接角色和对象的约束 自定义约束,图5.10 对象类的xor关联,5.3.2 约束,关联的约束 对关联有以下常用的约束:1、implicit:该关联只是概念性的,在对模型进行精化时不再用。2、ordered:具有多重性的关联一端的对象是有序的。3、changeable:关联对象之间的链(Link)是可变的(添加、修改、删除)。4、addonly:可在任意时刻增加新的链接。5、frozen:冻结已创建的对象,不能再添加、删除和修改它的链接。6、xor:“或约束”,某时刻只有一个当前的关联实例。,5.2.6 依赖,依赖关系描述的是两个模型元素(类,组合,用例等)之间的语义上的连接关系,其中一个模型元素是独立的,另一个模型元素是非独立的(或依赖的)。如图5.11表示类A依赖于类B的一个友元依赖关系。,类A,类 B,友元,5.2.6 依赖,图5.11,依赖的形式可能是多样的,针对不同的依赖的形式,依赖关系有不同的变体(varieties):,依赖的形式可能是多样的,针对不同的依赖的形式,依赖关系有不同的变体(varieties):抽象(abstraction):从一个对象中提取一些特性,并用类方法表示。绑定(binding):为模板参数指定值,以定义一个新的模板元素。组合(combination):对不同类或包进行性质相似融合。许可(permission):允许另一个对象对本对象的访问。使用(usage):声明使用一个模型元素需要用到已存在的另一个模型元素,这样才能正确实现使用者的功能(包括调用、实例化、参数、发送)。跟踪(trace):声明不同模型中元素的之间的存在一些连接。访问或连接(access):允许一个包访问另一个包的内容。调用(call):声明一个类调用其他类的操作的方法。,5.2.6 依赖,导出(derive):声明一个实例可从另一个实例导出。友元(friend):允许一个元素访问另一个元素,不管被访问的元素是否具有可见性。引入(import):允许一个包访问另一个包的内容并被访问组成部分增加别名。实例(instantiation):关于一个类的方法创建了另一个类的实例声明。参数(parameter):一个操作和它参数之间的关系。实现(realize):说明和其实之间的关系。精化(refine):声明具有两个不同语义层次上的元素之间的映射。发送(send):信号发送者和信号接收者之间的关系。,5.2.6 依赖,5.2.7 细化,有两个元素A和B,若B元素是A元素的详细描述,则称B,A元素之间的关系为B元素细化A元素。细化与类的抽象层次有密切的关系,在构造模型时要经过逐步细化,逐步求精的过程。如图3.9所示,类B是类A细化的结果。,5.2.7 细化,5.2.8 注释,注释用于对UML语言的元素或实体进行说明,解释和描述。通常用自然语言进行注释。,5.3 用例建模,1992年由Jacobson提出了Use case 的概念及可视化的表示方法Use case图,受到了IT界的欢迎,被广泛应用到了面向对象的系统分析中。用例驱动的系统分析与设计方法已成为面向对象的系统分析与设计方法的主流。用例模型由Jacobson在开发AXE系统中首先使用,并加入由他所倡导的OOSE和Objectory方法中。用例方法引起了面向对象领域的极大关注。自1994年Ivar Jacobson的著作出版后,面向对象领域已广泛接纳了用例这一概念,并认为它是第二代面向对象技术的标志。,5.3 用例建模,用例建模技术,用于描述系统的功能需求。在宏观上给出模型的总体轮廓。通过对典型用例的分析,使开发者能够有效地了解用户的需求。,5.3.1 用例建模概述,5.3.1 用例建模概述,图3.14,3.3.2 用例模型(Use case model)用例模型描述的是外部执行者(Actor)所理解的系统功能。它描述了待开发系统的功能需求。它驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用于验证和检测所开发的系统,从而影响到开发工作的各个阶段和 UML 的各个模型。用例模型由若干个用例图构成,用例图中主要描述执行者和用例之间的关系。在UML中,构成用例图的主要元素是用例和执行者及其它们之间的联系。,3.3.2 用例模型,创建用例模型的工作包括:定义系统、确定执行者和用例、描述用例、定义用例间的关系、确认模型。,一、执行者(Actor)执行者是指用户在系统中所扮演的角色。执行者在用例图中是用类似人的图形来表示,但执行者可以是人,也可以是一个外界系统。,注意:用例总是由执行者启动的。,如何确定执行者:1、谁使用系统的主要功能(主执行者)?2、谁需要从系统获得对日常工作的支持和服务?3、需要谁维护管理系统的日常运行(副执行者)?4、系统需要控制哪些硬件设备?5、系统需要与其它哪些系统交互?6、谁需要使用系统产生的结果(值)?,一、执行者,5.3.2 用例模型,供货,买饮料,取货款,客户,供货人,收银员,图5.15自动售货系统,回例1,二、用例,二、用例(use case)从本质上讲,一个用例是用户与计算机之间的一次典型交互作用。在UML中,用例被定义成系统执行的一系列动作(功能)。用例有以下特点:用例捕获某些用户可见的需求,实现一个具体的用户目标。用例由执行者激活,并将结果值反馈给执行者。用例必须具有功能上的完整描述。,如何确定用例:1、与系统实现有关的主要问题是什么?2、系统需要哪些输入/输出?这些输入/输出从何而来?到哪里去?3、执行者需要系统提供哪些功能?4、执行者是否需要对系统中的信息进行读、创建、修改、删除或存储?,二、用例,5.3.2 用例模型,回例1,用例图,图3.16 用例图的元素,用例图,用例图描述了系统的功能需求,它是从执行者的角度来理解系统,用于捕获系统的需求,规划和控制项目;描述了系统外部的执行者与系统提供的用例之间的某种联系。图中还有另外两种类型的连接,即使用和扩展关系,是两种不同形式的泛化关系。,Use表示一个用例使用另一个用例。Extend通过向被扩展的用例添加动作来扩展用例。,用例图实例,用例图实例,图5.18 应用生命周期用例图,图5.17 金融贸易系统,贸易经理,风险分析,设置边界,进行交易,交易估价,更新帐目,使用,使用,扩展,营销人员,超越边界,评价,记帐系统,销售人员,5.3.4 用例图实例,5.3.4 用例图实例,例1 建立项目与资源管理系统的Use case图,系统的主要功能是:项目管理,资源管理和系统管理。项目管理包括项目的增加、删除、更新。资源管理包括对资源和技能的添加、删除和更新。系统管理包括系统的启动和关闭,数据的存储和备份等功能。,1、分析确定系统的执行者(角色),到确定,到确定,项目管理员、资源管理员、系统管理员、备份数据系统。,项目管理,资源管理和系统管理。,2、确定用例,3、对用例进行分解,画出下层的Use case图 对上层的用例进行分解,并将执行者分配到各层次的Use case图中。,图5.19角色描述模板,还应画出相应的执行者描述模板及用例描述模板。,例1 项目与资源管理系统(PRMS),Use Case图可以自顶而下不断精化,抽象出不同层次的Use Case图。,5.3.4 用例图实例,例1 项目与资源管理系统(PRMS),5.3.4 用例图实例,作 业,现有一医院病房监护系统,病症监视器安置在每个病房,将病人的病症信号实时传送到中央监视系统进行分析处理。在中心值班室里,值班护士使用中央监视系统对病员的情况进行监控,根据医生的要求随时打印病人的病情报告,定期更新病历,当病症出现异常时,系统会立即自动报警,并实时打印病人的病情报告,立及更新病历。要求根据现场情景,对医院病房监护系统进行需求分析,建立系统的Use case model。,请对系统需求进行分析!,经过初步的需求分析,得到系统功能要求:1、监视病员的病症(血压、体温、脉搏等)2、定时更新病历3、病员出现异常情况时报警。4、随机地产生某一病员的病情报告。,例2 医院病房监护系统,监视病情,更新病历,情景教学,任何建模语言都以静态建模机制为基础,标准建模语言UML也不例外。所谓静态建模是指对象之间通过属性互相联系,而这些关系不随时间而转移。类和对象的建模,是UML建模的基础。我们认为,熟练掌握基本概念、区分不同抽象层次以及在实践中灵活运用,是三条最值得注意的建模基本原则。UML的静态建模机制包括:用例图(Use case diagram)类图(Class diagram)对象图(Object diagram)包图(Package diagram)构件图(Component diagram)配置图(Deployment diagram),5.4 静态建模,5.4 静态建模,5.4.1 对象类与对象,5.4.1 对象类与对象,面向对象的开发方法的基本任务是建立对象模型,是软件系统开发的基础。UML中的对象类图(Class Diagram)与对象图(Object Diagram)表达了对象模型的静态结构,能够有效地建立专业领域的计算机系统对象模型。,一、类图与对象图 对象类简称类,是面向对象模型的最基本的模型元素,用类图来描述。类图(Class diagram)由系统中使用的类以及它们之间的关系组成,是描述系统的一种图式,分为长式和短式。类及类型名均用英文大写字母开头,属性及操作名为小写字母开头。常见类型有:Char,Boolean,Double,Float,Integer,Object,Short,String等。类图是构建其它图的基础。,5.4.1 对象类与对象,类名,对象是对象类的实例(instance),用对象图来描述。对象图亦分长式和短式。,对象名,图5.24 类图与对象图,图5.25 对象图,(1)属性(attribute)属性用来描述类的特征,表示需要处理的数据。属性定义:visibility attribute-name:type=initial-value property-string 可见性 属性名:类型=缺省值约束特性 其中:可见性(visibility)表示该属性对类外的元素是否可见。分为:public(+)公有的,即模型中的任何类都可以访问该属性。private(-)私有的,表示不能被别的类访问。protected(#)受保护的,表示该属性只能被该类及其子类访问。如果可见性未申明,表示其可见性不确定。,5.4.1 对象类与对象,(2)操作 对数据的具体处理方法的描述则放在操作部分,操作说明了该类能做些什么工作。操作通常称为函数,它是类的一个组成部分,只能作用于该类的对象上。操作定义:visibility operating-name(parameter-list):return-type property-string 可见性 操作名(参数表);返回类型约束特性 其中:可见性同上。参数表:参数名:类型,Parameter-name:type=default-value 返回类型:操作返回的结果类型。,5.4.1 对象类与对象,类图的描述,5。4.1 对象类与对象,二、类的识别 是面向对象方法的一个难点,但又是建模的关键。常用的方法有:1、名词识别法 2、系统实体识别法 3、从用例中识别类 4、利用分解与抽象技术,关键是要定义类的“属性”及“操作”。,5.4.2 UML中类之间的关系,UML中类的关系有关联(association)、聚集(aggregation)、泛化(generalization)、依赖(depending)和细化(refinement)。,一、关联 关联是类之间的连结,分为:1、常规关联(图5.26)2、多元关联3、有序关联4、受限关联5、或关联(图5.27)6、关联类(图5.28),图5.26 顾佣关联,图5.27 或关联,图5.28 关联类,5.4.2 UML中类之间的关系,5.4.2 UML中类之间的关系,7、其它关联 递归关联(Recursive association)即一个类到自身的关联。,图5.29 递归关联,人,治疗,病人,医生,图5.30 带有职责的递归关联,二、聚集(aggregation),聚集是一种特殊的关联,它指出类间的“整体-部分”关系。又分为:,1、共享聚集(shared aggregation)其“部分”对象可以是任意“整体”对象的一部分。当“整体”端的重数不是1时,称聚集是共享的。,、组合聚集(composition aggregation)其“整体”(重数为0、1)拥有它的“部分”。部分仅属于同一对象,整体与部分同时存在。,图3.31 共享聚集,图3.32 组合聚集,3.4.2 UML中类之间的关系,三、泛化,泛化指出类之间的“一般与特殊关系”,即继承关系。父类与子类之间构成类的分层结构。,5.4.2 UML中类之间的关系,抽象类 指没有实例的类,定义一些抽象的操作,即不提供实现方法的操作,只提供操作的特征。并附以abstract。交叠泛化 在继承树中,若存在某种具有公共父类的多重继承,称为是交叠(overlapping)的。否则是不交的(disjoint)。完全泛化 一般类特化出它所有的子类,称为完全泛化,记为complete。不完全泛化 即未特化出它所有的子类,称为是不完全泛化 的,表示为incomplete.,有关泛化的约束,5.4.2 UML中类之间的关系,三、泛化,图3.34 完全泛化,图3.35 泛化中的多态性及带识别名称的泛化,propulsion,propulsion,继承性的实例,图5.36 泛化关系,5.4.2 UML中类之间的关系,5.4.2 UML中类之间的关系,图5.37 泛化关系,五、类图的抽象层次和细化(Refinement)关系,需要注意的是,虽然在软件开发的不同阶段都使用类图,但这些类图表示了不同层次的抽象。在需求分析阶段,类图是研究领域的概念;在设计阶段,类图描述类与类之间的接口;而在实现阶段,类图描述软件系统中类的实现。按照Steve Cook和John Dianiels的观点,类图分为三个层次:概念层、说明层、实现层。需要说明的是,这个观点同样也适合于其他任何模型,只是在类图中显得更为突出。描述了类图的抽象层次和细化(Refinement)关系。,5.4.2 UML中类之间的关系,概念层,概念层(Conceptual)类图描述应用领域中的概念。实现它们的类可以从这些概念中得出,但两者并没有直接的映射关系。事实上,一个概念模型应独立于实现它的软件和程序设计语言。,5.4.1 对象类与对象,说明层,说明层(Specification)类图描述软件的接口部分,而不是软件的实现部分。面向对象开发方法非常重视区别接口与实现之间的差异,但在实际应用中却常常忽略这一差异。这主要是因为OO语言中类的概念将接口与实现合在了一起。大多数方法由于受到语言的影响,也仿效了这一做法。现在这种情况正在发生变化。可以用一个类型(Type)描述一个接口,这个接口可能因为实现环境、运行特性或者用户的不同而具有多种实现。,实现层,只有在实现层(Implementation)才真正有类的概念,并且揭示软件的实现部分。这可能是大多数人最常用的类图,但在很多时候,说明层的类图更易于开发者之间的相互理解和交流。理解以上层次对于画类图和读懂类图都是至关重要的。但是由于各层次之间没有一个清晰的界限,所以大多数建模者在画图时没能对其加以区分。画图时,要从一个清晰的层次观念出发;而读图时,则要弄清它是根据哪种层次观念来绘制的。要正确地理解类图,首先应正确地理解上述三种层次。虽然将类图分成三个层次的观点并不是UML的组成部分,但是它们对于建模或者评价模型非常有用。尽管迄今为止人们似乎更强调实现层类图,但这三个层次都可应用于UML,而且实际上另外两个层次的类图更有用。,5.4.1 对象类与对象,5.4.3 包图,一个最古老的软件方法问题是:怎样将大系统拆分成小系统。解决该问题的思路之一是将许多类集合成一个更高层次的单位,形成一个高内聚、低耦合的类的集合。UML中这种分组机制叫包(Package)。引入包是为了降低系统的复杂性。包是一种组合机制,把各种各样的模型元素通过内在的语义连在一起成为一个整体就叫包,构成包的模型元素称为包的内容,包通常用于对模型的组织管理,因此有时又将包称为子系统(subsystem)。包拥有自己的模型元素,包与包之间不能共用一个相同的模型元素,包的实例没有任何语义(含义)。仅在模型执行期间包才有意义。,5.4.3 包图,图3.32描述了包的表示及包之间的关系。包的内容:可以是类的列表,也可以是另一个包图,还可以是一个类图。包之间的关系有依赖和泛化(继承)。,5.4.3 包图,包,和类一样包也有可见性,利用可见性控制外部包对包的内容的存取方式,UML中定义了四种可见性:私有(private),公有(public),保护(protected)和实现(implementation)。缺省值为公有。包也可以有接口,接口与包之间用实线相连,接口通常由包的一个或多个类实现。,5.4.3 包图,图5.39 包图举例,包的继承,5.4.3 包图,图5.40 包图,包图举例,5.4.3 包图,图5.41 包图举例,5.5动态建模,9.5动态模型,5.5 UML动态建模,图5.42,动态模型主要描述系统的动态行为和控制结构。动态行为包括系统中对象生存期内可能的状态以及事件发生时状态的转移,对象之间动态合作关系,显示对象之间的交互过程以及交互顺序,同时描述了为满足用例要求所进行的活动以及活动间的约束关系。,在动态模型中,对象间的交互是通过对象间消息的传递来完成的。对象通过相互间的通信(消息传递)进行合作,并在其生命周期中根据通信的结果不断改变自身的状态。,UML消息的图形表示是用带有箭头的线段。,动态模型,状态图(state diagram):状态图用来描述对象,子系统,系统的生命周期。活动图(activity diagram):着重描述操作实现中完成的工作以及用例实例或对象中的活动,活动图是状态图的一个变种。顺序图(sequence diagram):是一种交互图,主要描述对象之间的动态合作关系以及合作过程中的行为次序,常用来描述一个用例的行为。合作图(collaboration diagram):用于描述相互合作的对象间的交互关系,它描述的交互关系是对象间的消息连接关系。,9.5动态模型,5.5 UML动态建模,动态模型主要描述系统的动态行为和控制结构。包括4类图:状态图、活动图、顺序图、合作图。,UML中的消息,一、简单消息(simple)表示控制流,描述控制如何从一个对象传递到另一个对象,但不描述通信的细节。,二、同步消息(synchronous)是一种嵌套的控制流,用操作调用实现。操作的执行者要到消息相应操作执行完并回送一个简单消息后,再继续执行。,三、异步消息(asynchronous)是一种异步的控制流,消息的发送者在消息发送后就继续执行,不等待消息的处理。,5.5 UML动态建模,消 息,在面向对象技术中,对象间的交互是通过对象间消息的传递来完成的。在UML中,消息的图形表示是用带有箭头的线段将消息的发送者和接收者联系起来,箭头的类型表示消息的类型。UML定义的消息类型有三种:简单消息(Simple Message)表示简单的控制流。同步消息(Synchronous Message)表示嵌套的控制流。操作的调用是一种典型的同步消息。异步消息(Asynchronous Message)表示异步控制流。当调用者发出消息后不用等待消息的返回即可继续执行自己的操作。异步消息主要用于描述实时系统中的并发行为。,5.5.3 顺序图,5.5.1 状态图,状态图(State Diagram)用来描述一个特定对象的所有可能的状态及其引起状态转移的事件。一个状态图包括一系列的状态以及状态之间的转移。状态所有对象都具有状态,状态是对象执行了一系列活动的结果。当某个事件发生后,对象的状态将发生变化。状态图中定义的状态有:,5.5.1 状态图,初态状态图的起始点,一个状态图只能有一个初态。终态是状态图的终点。而终态则可以有多个。中间状态可包括三个区域:名字域、状态变量与活动域。复合状态可以进一步细化的状态称作复合状态。,中间态,响应事件的内部动作或活动的列表,定义为:事件名(参数表条件)/动作表达式,状态变量 是状态图所显示的类的属性。活动 列出了在该状态时要执行的事件和动作。有3个标准事件:entry事件用于指明进入该状态时的特定动作。exit事件用于指明退出该状态时的特定动作。do事件用于指明在该状态中时执行的动作。,例:,5.5.1 状态图,5.5.1 状态图,状态迁移一个对象的状态的变迁称为状态迁移。通常是由事件触发的,此时应标出触发转移的事件表达式。如果转移上未标明事件,则表示在源状态的内部活动执行完毕后自动触发转移。,状态图,图5.44 电梯状态图,5.5.1 状态图,图5.45 或关系的子状态,嵌套状态图 状态图可能有嵌套的子状态图,且子状态图可以是另一个状态图。子状态又可分为两种:“与”子状态和“或”子状态,,图5.46 与子状态及或子状态,状态图,细化的状态表示,UML给出了电梯细化的状态表示(图5.47)。,状态名状态变量活动,5.5.1 状态图,事件,5.5.1 状态图,事件是激发状态迁移的条件或操作。在UML中,有4类事件:,1、某条件变为真;表示状态迁移的上的警戒条件。2、收到来自外部对象的信号(signal)表示为状态迁移上的事件特征,也称为消息。3、收到来自外部对象的某个操作中的一个调用,表示为状态迁移上的事件特征,也称为消息。、状态迁移上的时间表达式。,状态图之间的消息发送,状态图之间可以发送消息,用虚箭头表示。,图5.48 消息发送状态图,5.5.1 状态图,顺序图存在两个轴:水平轴表示一组对象,垂直轴表示时间。顺序图中的对象用一个带有垂直虚线的矩形框表示,并标有对象名和类名。垂直虚线是对象的生命线,用于表示在某段时间内对象是存在的。对象间的通信通过在对象的生命线之 间消息来表示,消息的箭头类型指明消息的类型。,5.5.2 顺序图,顺序图(Sequence Diagram)用来描述对象之间动态的交互行为,着重体现对象间消息传递的时间顺序。,5.5.3 顺序图,一、概述,当收到消息时,接收对象立即开始执行活动,即对象被激活了,通过在对象生命线上显示一个细长矩形框来表示激活。,5.5.3 顺序图,二、消息,5.5.2 顺序图,有两种使用顺序图的方式:一般格式和实例格式。实例格式详细描述一次可能的交互。没有任何条件和分支或循环,它仅仅显示选定情节(场景)的交互(图5.49)。而一般格式则描述所有的情节。因此,包括了分支,条件和循环。,三、顺序图的形式,图5.49 顺序图,图5.50带分支的顺序图,5.5.3 顺序图,呼叫者,交换,接受者,拿起话筒,响拨号声,拨号码,路由选择,鸣响音,停音,响铃声,接电话,停铃声,ABCDE,B-A1SC-B10S通过网络选择通话路径E-D5S双方通话,图5.52打电话的顺序图,5.5.3 顺序图,创建对象与对象的消亡,在顺序图中,还可以描述一个对象通过发送一条消息来创建另一个对象。,当对象消亡(destroying)时,用符号 表示。,5.5.2 顺序图,图5.53 创建或删除对象,活动图(Activity Diagram)的应用非常广泛,它既可用来描述操作(类的方法)的行为,也可以描述用例和对象内部的工作过程,并可用于表示并行过程。活动图是由状态图变化而来的,它们各自用于不同的目的。活动图描述了系统中各种活动的执行的顺序。刻化一个方法中所要进行的各项活动的执行流程。活动图中一个活动结束后将立即进入下一个活动(在状态图中状态的变迁可能需要事件的触发)。,5.5.3 活动图,5.5.3 活动图,一、概述,二、活动图的模型元素,5.5.3 活动图,构成活动图的模型元素有:活动、转移、对象、信号、泳道等。,、活动是构成活动图的核心元素,是具有内部动作的状态,由隐含的事件触发活动的转移。活动的解释依赖