1、 面向对象分析与设计方法的发展在面向对象分析与设计方法的发展在20世纪世纪80年代年代末到末到90年代中出现了一个高潮,统一建模语言年代中出现了一个高潮,统一建模语言UML就就是这个高潮的产物。是这个高潮的产物。UML是由面向对象方法领域的三是由面向对象方法领域的三位著名专家位著名专家Grady Booch,James Rumbaugh和和Ivar Jacobson提出的,不仅统一了他们三人的表示方法,提出的,不仅统一了他们三人的表示方法,而且融入了众多优秀的软件方法和思想,从而把面向而且融入了众多优秀的软件方法和思想,从而把面向对象方法提高到一个崭新的高度,标志着面向对象建对象方法提高到一个
2、崭新的高度,标志着面向对象建模方法进入了第三代。模方法进入了第三代。UML已得到许多世界知名公司的使用和支持,并已得到许多世界知名公司的使用和支持,并于于1997年年11月月17日被日被OMG组织采纳,成为面向对象建组织采纳,成为面向对象建模的标准语言。目前,模的标准语言。目前,OMG已经把已经把UML作为公共可作为公共可得到的规格说明提交给国际标准化组织进行国际标准得到的规格说明提交给国际标准化组织进行国际标准化,这一进程在近期完成后化,这一进程在近期完成后UML将最终成为信息技术将最终成为信息技术的正式国际标准。的正式国际标准。四年来,四年来,UML已经迅速成长为一个事实上的工业已经迅速成
3、长为一个事实上的工业标准。不论在计算机学术界、软件产业界还是在商业标准。不论在计算机学术界、软件产业界还是在商业界,界,UML已经逐渐成为人们为各种系统建模、描述系已经逐渐成为人们为各种系统建模、描述系统体系结构、商业体系结构和商业过程时使用的统一统体系结构、商业体系结构和商业过程时使用的统一工具,而且在实践过程中人们还在不断扩展它的应用工具,而且在实践过程中人们还在不断扩展它的应用领域。领域。15.1.1 UML的产生和发展的产生和发展 15.1.2 UML的结构的结构 UML是一种标准的图形化是一种标准的图形化(即可视化即可视化)建模语言,建模语言,它由图和元模型组成。图是它由图和元模型组
4、成。图是UML的语法,而元模型给的语法,而元模型给出图的含义,是出图的含义,是UML的语义。的语义。1.UML的语义的语义 UML的语义是定义在一个四层的语义是定义在一个四层(四个抽象级别四个抽象级别)建建模概念框架中的,这四层分别是:模概念框架中的,这四层分别是:(1)(1)元元模型元元模型(meta_metamodel)(meta_metamodel)层层 由由UML最基本的元素最基本的元素“事物事物(thing)(thing)”组成,代表组成,代表要定义的所有事物。要定义的所有事物。(2)(2)元模型元模型(metamodel)(metamodel)层层 由由UML基本元素组成,包括面向
5、对象和面向构件基本元素组成,包括面向对象和面向构件的概念。这一层的每个概念都是元元模型中的概念。这一层的每个概念都是元元模型中“事物事物”概念的实例概念的实例(通过版类化通过版类化)。(3)(3)模型模型(model)(model)层层 由由UML模型组成,这一层的每个概念都是元模型模型组成,这一层的每个概念都是元模型层中概念的实例层中概念的实例(通过版类化通过版类化)。这一层的模型通常称。这一层的模型通常称为类模型或类型模型。为类模型或类型模型。(4)(4)用户模型用户模型(user model)(user model)层层 由由UML模型的例子组成,这一层中的每个概念都模型的例子组成,这一
6、层中的每个概念都是模型层的一个实例是模型层的一个实例(通过分类通过分类),也是元模型层模型,也是元模型层模型的一个实例的一个实例(通过版类化通过版类化)。这一层的模型通常称为对。这一层的模型通常称为对象模型或实例模型。象模型或实例模型。2.UML的表示法的表示法 UML由视图由视图(view)、图、图(diagram)、模型元素、模型元素(model element)和通用机制和通用机制(general mechanism)等几等几个部分组成。个部分组成。(1)视图视图 为了完整地描述一个系统,往往需要描述该系统为了完整地描述一个系统,往往需要描述该系统的许多方面。用视图可以表示被建模系统的各
7、个方面,的许多方面。用视图可以表示被建模系统的各个方面,也就是说,从不同目的出发可以为系统建立多个模型,也就是说,从不同目的出发可以为系统建立多个模型,这些模型都描述同一个系统,只是描述的角度不同,这些模型都描述同一个系统,只是描述的角度不同,它们之间具有一致性。它们之间具有一致性。(2)图图 图是用来表达一个视图的内容的,通常,一个视图是用来表达一个视图的内容的,通常,一个视图由多张图组成。图由多张图组成。UML语言共定义了语言共定义了9种不同的图,种不同的图,把它们有机地结合起来就可以描述系统的所有视图。把它们有机地结合起来就可以描述系统的所有视图。(3)(3)模型元素模型元素 可以在图中
8、使用的概念可以在图中使用的概念(例如,用例、类、对象、例如,用例、类、对象、消息和关系消息和关系),统称为模型元素。模型元素在图中用相,统称为模型元素。模型元素在图中用相应的视图元素应的视图元素(图形符号图形符号)表示。一个模型元素可以用表示。一个模型元素可以用在多个不同的图中,不管怎样使用,它总是具有相同在多个不同的图中,不管怎样使用,它总是具有相同的含义和相同的符号表示。的含义和相同的符号表示。(4)(4)通用机制通用机制 UML语言利用通用机制为图附加一些额外的信息,语言利用通用机制为图附加一些额外的信息,比如,可以在比如,可以在“笔记笔记”中书写注释,或用中书写注释,或用“标签值标签值
9、”说明模型元素的性质等。此外,它还提供扩展机制说明模型元素的性质等。此外,它还提供扩展机制(例例如,版类、标签值、约束如,版类、标签值、约束),使,使UML能够适应一种特能够适应一种特殊方法或满足某些特殊用户的需要。殊方法或满足某些特殊用户的需要。15.1.3 15.1.3 UML的图的图 1.1.用例图用例图(use-case diagram)(use-case diagram)用例是对系统提供的功能用例是对系统提供的功能(即系统的具体用法即系统的具体用法)的的描述。用例图从用户的角度描述系统功能,并指出各描述。用例图从用户的角度描述系统功能,并指出各个功能的操作者。用例图定义了系统的功能需
10、求。个功能的操作者。用例图定义了系统的功能需求。2.2.静态图静态图(static diagram)(static diagram)这类图描述系统的静态结构,属于这类图的有类这类图描述系统的静态结构,属于这类图的有类图图(class diagram)(class diagram)和对象图和对象图(object diagram)(object diagram)。类图。类图不仅定义系统中的类,表示类与类之间的关系不仅定义系统中的类,表示类与类之间的关系(例如,例如,关联、依赖、泛化和细化等关系关联、依赖、泛化和细化等关系),也表示类的内部结,也表示类的内部结构构(类的属性和操作类的属性和操作)。类
11、图描述的是一种静态关系,。类图描述的是一种静态关系,在系统的整个生命期内都是有效的。在系统的整个生命期内都是有效的。对象图是类图的实例,它使用几乎与类图完全相对象图是类图的实例,它使用几乎与类图完全相同的图示符号。两者之间的差别在于,对象图表示的同的图示符号。两者之间的差别在于,对象图表示的是类的多个对象实例,而不是实际的类。由于对象有是类的多个对象实例,而不是实际的类。由于对象有生命周期,因此对象图只能在系统的某个时间段内存生命周期,因此对象图只能在系统的某个时间段内存在。一般说来,对象图没有类图重要,它主要用来帮在。一般说来,对象图没有类图重要,它主要用来帮助对类图的理解,也可用在协作图中
12、,表示一组对象助对类图的理解,也可用在协作图中,表示一组对象之间的动态协作关系。之间的动态协作关系。3.3.行为图行为图(behavior diagram)(behavior diagram)这类图描述系统的动态行为和组成系统的对象间这类图描述系统的动态行为和组成系统的对象间的交互关系,包括状态图的交互关系,包括状态图(state diagram)(state diagram)和活动图和活动图(activity diagram)(activity diagram)两种图形。状态图描述类的对象两种图形。状态图描述类的对象可能具有的所有状态,以及引起状态变化的事件,状可能具有的所有状态,以及引起状
13、态变化的事件,状态变化称作状态转换。通常,状态图是对类图的补充。态变化称作状态转换。通常,状态图是对类图的补充。实际使用时,并不需要为每个类都画状态图,仅需要实际使用时,并不需要为每个类都画状态图,仅需要为那些有多个状态,且其行为在不同状态有所不同的为那些有多个状态,且其行为在不同状态有所不同的类画状态图。类画状态图。活动图描述为满足用例要求而进行的动作以及动活动图描述为满足用例要求而进行的动作以及动作间的关系。活动图是状态图的一个变种,它是另一作间的关系。活动图是状态图的一个变种,它是另一种描述交互的方法。种描述交互的方法。4.4.交互图交互图(interactive diagram)(in
14、teractive diagram)这类图描述对象间的交互关系,包括顺序图这类图描述对象间的交互关系,包括顺序图(sequence diagram)(sequence diagram)和协作图和协作图(collaboration(collaboration diagram)diagram)两种图形。顺序图显示若干个对象间的动态两种图形。顺序图显示若干个对象间的动态协作关系,它强调对象之间发送消息的先后次序,描协作关系,它强调对象之间发送消息的先后次序,描述对象之间的交互过程。述对象之间的交互过程。协作图与顺序图类似,也描述对象间的动态协作协作图与顺序图类似,也描述对象间的动态协作关系。除了显示
15、对象间发送的消息之外,协作图还显关系。除了显示对象间发送的消息之外,协作图还显示对象及它们之间的关系示对象及它们之间的关系(称为上下文相关称为上下文相关)。由于顺序图和协作图都描述对象间的交互关系,由于顺序图和协作图都描述对象间的交互关系,所以建模者可以选择其中一种表示对象间的协作关系:所以建模者可以选择其中一种表示对象间的协作关系:如果需要强调时间和顺序,最好选用顺序图;如果需如果需要强调时间和顺序,最好选用顺序图;如果需要强调上下文相关,最好选择协作图。要强调上下文相关,最好选择协作图。5.5.实现图实现图(implementation diagram)(implementation di
16、agram)这类图提供关于系统实现方面的信息,构件图这类图提供关于系统实现方面的信息,构件图(component diagram)(component diagram)和配置图和配置图(deployment diagram)(deployment diagram)属于这类图。构件图描述代码构件的物理结构及各个属于这类图。构件图描述代码构件的物理结构及各个构件之间的依赖关系。构件可能是源代码、二进制文构件之间的依赖关系。构件可能是源代码、二进制文件或可执行文件。使用构件图有助于分析和理解构件件或可执行文件。使用构件图有助于分析和理解构件之间的相互影响。之间的相互影响。配置图定义系统中软件和硬件的
17、物理体系结构。配置图定义系统中软件和硬件的物理体系结构。通常,配置图中显示实际的计算机和设备通常,配置图中显示实际的计算机和设备(用节点表用节点表示示),以及各个节点之间的连接关系,也可以显示连接,以及各个节点之间的连接关系,也可以显示连接的类型及构件之间的依赖关系。在节点内部显示可执的类型及构件之间的依赖关系。在节点内部显示可执行的构件和对象,以清晰地表示出哪个软件单元运行行的构件和对象,以清晰地表示出哪个软件单元运行在哪个节点上。在哪个节点上。15.1.4 UML的应用领域的应用领域 UML是一种建模语言,是一种标准的表示方法,是一种建模语言,是一种标准的表示方法,而不是一种完整的方法学。
18、因此,人们可以用各种方而不是一种完整的方法学。因此,人们可以用各种方法使用法使用UML,无论采用何种方法,它们的基础都是,无论采用何种方法,它们的基础都是UML的图,这就是的图,这就是UML的最终用途的最终用途为不同领域的为不同领域的人提供统一的交流方法。人提供统一的交流方法。UML适用于系统开发的全过程,它的应用贯穿于适用于系统开发的全过程,它的应用贯穿于从需求分析到系统建成后测试的各个阶段。从需求分析到系统建成后测试的各个阶段。需求分析:可以用用例来捕获用户的需求。通需求分析:可以用用例来捕获用户的需求。通过用例建模,可以描述对系统感兴趣的外部角色及其过用例建模,可以描述对系统感兴趣的外部
19、角色及其对系统的功能要求对系统的功能要求(用例用例)。分析:分析阶段主要关心问题域中的基本概念分析:分析阶段主要关心问题域中的基本概念(例如,抽象、类和对象等例如,抽象、类和对象等)和机制,需要识别这些类和机制,需要识别这些类以及它们相互间的关系,可以用以及它们相互间的关系,可以用UMLUML的逻辑视图和动态的逻辑视图和动态视图来描述。类图描述系统的静态结构,协作图、顺视图来描述。类图描述系统的静态结构,协作图、顺序图、活动图和状态图描述系统的动态行为。在这个序图、活动图和状态图描述系统的动态行为。在这个阶段只为问题域的类建模,而不定义软件系统的解决阶段只为问题域的类建模,而不定义软件系统的解
20、决方案细节方案细节(例如,处理用户接口、数据库、通信和并行例如,处理用户接口、数据库、通信和并行性等问题的类性等问题的类)。设计:把分析阶段的结果扩展成技术解决方案,设计:把分析阶段的结果扩展成技术解决方案,加入新的类来定义软件系统的技术方案细节。设计阶加入新的类来定义软件系统的技术方案细节。设计阶段用和分析阶段类似的方式使用段用和分析阶段类似的方式使用UMLUML。构造构造(编码编码):这个阶段的任务是把来自设计阶:这个阶段的任务是把来自设计阶段的类转换成某种面向对象程序设计语言的代码。段的类转换成某种面向对象程序设计语言的代码。测试:对系统的测试通常分为单元测试、集成测测试:对系统的测试通
21、常分为单元测试、集成测试、系统测试和验收测试等几个不同的步骤。试、系统测试和验收测试等几个不同的步骤。UML模模型可作为测试阶段的依据,不同测试小组使用不同的型可作为测试阶段的依据,不同测试小组使用不同的UML图作为他们工作的依据:单元测试使用类图和类图作为他们工作的依据:单元测试使用类图和类规格说明;集成测试使用构件图和协作图;系统测试规格说明;集成测试使用构件图和协作图;系统测试使用用例图来验证系统的行为;验收测试由用户进行,使用用例图来验证系统的行为;验收测试由用户进行,用与系统测试类似的方法,验证系统是否满足在分析用与系统测试类似的方法,验证系统是否满足在分析阶段确定的所有需求。阶段确
22、定的所有需求。总之,统一建模语言总之,统一建模语言UML适用于以面向对象方法适用于以面向对象方法来描述任何类型的系统,而且适用于系统开发的全过来描述任何类型的系统,而且适用于系统开发的全过程,从需求规格描述直到系统建成后的测试和维护阶程,从需求规格描述直到系统建成后的测试和维护阶段。段。任何建模语言都以静态建模机制为基础,任何建模语言都以静态建模机制为基础,UML也也不例外。不例外。UML的静态建模机制包括用例图、类图、对的静态建模机制包括用例图、类图、对象图和包等。象图和包等。15.2.1用例图用例图 1.用例模型用例模型 用例模型描述的是外部执行者用例模型描述的是外部执行者(actor)所
23、理解的系所理解的系统功能。用例模型用于需求分析阶段,它的建立是系统功能。用例模型用于需求分析阶段,它的建立是系统开发者和用户反复讨论的结果,描述了开发者和用统开发者和用户反复讨论的结果,描述了开发者和用户对需求规格达成的共识。首先,它描述了待开发系户对需求规格达成的共识。首先,它描述了待开发系统的功能需求;其次,它把系统看作黑盒子,从外部统的功能需求;其次,它把系统看作黑盒子,从外部执行者的角度来理解系统;第三,它驱动了需求分析执行者的角度来理解系统;第三,它驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用于验
24、证和检测所开发的统所有功能的实现,而且被用于验证和检测所开发的系统,从而影响到开发工作的各个阶段和系统,从而影响到开发工作的各个阶段和UML的各个的各个模型。模型。在在UML中,一个用例模型由若干个用例图来描述,中,一个用例模型由若干个用例图来描述,用例图的主要元素是用例和执行者。用例图的主要元素是用例和执行者。2.用例用例 一个用例实质上是用户与计算机系统之间的一次一个用例实质上是用户与计算机系统之间的一次典型的交互作用,它代表的是系统的一个完整的功能。典型的交互作用,它代表的是系统的一个完整的功能。在在UML中把用例定义成系统执行的一系列动作,动作中把用例定义成系统执行的一系列动作,动作的
25、结果能被外部执行者察觉到。的结果能被外部执行者察觉到。在在UML用例图中,用例表示为一个椭圆。图用例图中,用例表示为一个椭圆。图15.1是自动售货机系统的用例图,其中是自动售货机系统的用例图,其中“售货售货”、“供货供货”和和“取货款取货款”都是典型的用例。概括地说,用例有以都是典型的用例。概括地说,用例有以下特点。下特点。用例代表某些用户可见的功能,实现一个具体的用例代表某些用户可见的功能,实现一个具体的用户目标。用户目标。用例由执行者激活,并提供确切的值给执行者。用例由执行者激活,并提供确切的值给执行者。用例可大可小,但它必须是对一个具体的用户目用例可大可小,但它必须是对一个具体的用户目标
26、实现的完整描述。标实现的完整描述。图15.1 自动售货机系统用例图 3.3.执行者执行者 执行者是与系统交互的人或物,它代表外部实体,执行者是与系统交互的人或物,它代表外部实体,例如,用户、硬件设备或与本系统交互的另一个软件例如,用户、硬件设备或与本系统交互的另一个软件系统。使用用例并与系统交互的任何人或物都是执行系统。使用用例并与系统交互的任何人或物都是执行者。者。实践表明,执行者对确定用例是非常有用的。面实践表明,执行者对确定用例是非常有用的。面对一个大型、复杂的系统,要列出用例清单往往很困对一个大型、复杂的系统,要列出用例清单往往很困难,这时可以先列出执行者清单,再针对每个执行者难,这时
27、可以先列出执行者清单,再针对每个执行者列出它的用例。这样做可以使问题变得容易很多。列出它的用例。这样做可以使问题变得容易很多。4.4.用例之间的关系用例之间的关系 用例之间可以有扩展、使用和组合三种关系。扩用例之间可以有扩展、使用和组合三种关系。扩展和使用是继承关系展和使用是继承关系(即泛化关系即泛化关系)的两种不同形式。的两种不同形式。组合则是把相关的用例打成包组合则是把相关的用例打成包(参见参见15.2.215.2.2节节),当作,当作一个整体看待。一个整体看待。(1)(1)扩展关系扩展关系 向一个用例中加入一些新的动作后构成了另一个向一个用例中加入一些新的动作后构成了另一个用例,这两个用
28、例之间的关系就是扩展关系用例,这两个用例之间的关系就是扩展关系,后者通,后者通过继承前者的一些行为得来,通常把后者称为扩展用过继承前者的一些行为得来,通常把后者称为扩展用例。例。(2)(2)使用关系使用关系 当一个用例使用另一个用例时,这两个用例之间当一个用例使用另一个用例时,这两个用例之间就构成了使用关系。就构成了使用关系。图15.2 含扩展和使用关系的用例图 5.5.建立用例模型建立用例模型 几乎在任何情况下都需要使用用例,通过用例可几乎在任何情况下都需要使用用例,通过用例可以获取用户需求,规划和控制项目。获取用例是需求以获取用户需求,规划和控制项目。获取用例是需求分析阶段的主要工作之一,
29、而且是首先要做的工作。分析阶段的主要工作之一,而且是首先要做的工作。大部分用例将在项目的需求分析阶段产生,并且随着大部分用例将在项目的需求分析阶段产生,并且随着开发工作的深入还会发现更多用例,这些新发现的用开发工作的深入还会发现更多用例,这些新发现的用例都应及时补充进已有的用例集中。用例集中的每个例都应及时补充进已有的用例集中。用例集中的每个用例都是对系统的一个潜在的需求。用例都是对系统的一个潜在的需求。(1)(1)发现执行者发现执行者 为获取用例首先要找出系统的执行者,可以通过为获取用例首先要找出系统的执行者,可以通过请系统的用户回答一些问题的办法来发现执请系统的用户回答一些问题的办法来发现
30、执行者。行者。(2)(2)获取用例获取用例 事实上,从识别执行者起获取用例的过程就已经事实上,从识别执行者起获取用例的过程就已经开始了。一旦识别出了执行者,就可以对每开始了。一旦识别出了执行者,就可以对每个执行者个执行者提出问题以获取用例。提出问题以获取用例。15.2.2 15.2.2 类图和对象图类图和对象图 1.1.类图类图 类图描述类和类与类之间的静态关系,它是从静类图描述类和类与类之间的静态关系,它是从静态角度表示系统的,因此类图属于一种静态模型。类态角度表示系统的,因此类图属于一种静态模型。类图是构建其他图的基础,没有类图就没有状态图、协图是构建其他图的基础,没有类图就没有状态图、协
31、作图等其他图,也就无法表示系统其他方面的特性。作图等其他图,也就无法表示系统其他方面的特性。(1)(1)定义类定义类 (2)(2)类的属性类的属性 UML描述属性的语法格式为:描述属性的语法格式为:可见性属性名:类型名可见性属性名:类型名=初值性质串初值性质串 其中,属性名和类型名必须有,其他部分根据需其中,属性名和类型名必须有,其他部分根据需要可有可无。要可有可无。图15.3 类的图形符号 属性的可见性属性的可见性(即可访问性即可访问性)通常分为三种:公有通常分为三种:公有的的(public)(public)、私有的、私有的(private)(private)和保护的和保护的(protect
32、ed)(protected),分别用加号分别用加号(+)(+)、减号、减号(-)(-)和井号和井号(#)(#)表示。如果在属性表示。如果在属性名前面没有标注任何符号,则表示该属性的可见性尚名前面没有标注任何符号,则表示该属性的可见性尚未定义。注意,这里没有缺省的可见性。未定义。注意,这里没有缺省的可见性。属性名和类型名之间用冒号属性名和类型名之间用冒号(:)分隔。类型名表分隔。类型名表示该属性的数据类型,它可以是基本数据类型,如整示该属性的数据类型,它可以是基本数据类型,如整数、实数、布尔型等,也可以是用户自定义的类型,数、实数、布尔型等,也可以是用户自定义的类型,一般说来,可用的类型由所涉及
33、的程序设计语言决定。一般说来,可用的类型由所涉及的程序设计语言决定。属性的缺省值用初值表示,类型名和初值之间用属性的缺省值用初值表示,类型名和初值之间用等号隔开。等号隔开。最后是用花括号括起来的性质串,列出该属性所最后是用花括号括起来的性质串,列出该属性所有可能的取值。枚举类型的属性经常使用性质串,串有可能的取值。枚举类型的属性经常使用性质串,串中每个枚举值之间用逗号分隔。当然,也可以用性质中每个枚举值之间用逗号分隔。当然,也可以用性质串说明该属性的其他信息,比如,约束说明只读串说明该属性的其他信息,比如,约束说明只读表明该属性是只读属性。表明该属性是只读属性。例如,例如,“发货单发货单”类的
34、属性类的属性“管理员管理员”,在,在UML类图中像下面那样描述:类图中像下面那样描述:-管理员:管理员:String=String=“未定未定”(3)类的操作类的操作 UML描述操作的语法格式为:描述操作的语法格式为:可见性可见性 操作名操作名(参数表参数表):返回值类型性质串:返回值类型性质串 其中,可见性和操作名是不可缺少的。其中,可见性和操作名是不可缺少的。操作的可见性通常分为公有操作的可见性通常分为公有(用加号表示用加号表示)和私有和私有(用减号表示用减号表示)两种,其含义与属性可见性的含义相同。两种,其含义与属性可见性的含义相同。参数表由若干个参数参数表由若干个参数(用逗号隔开用逗号
35、隔开)构成。参数的构成。参数的语法格式为:语法格式为:参数名:参数类型名参数名:参数类型名=缺省值缺省值 2.2.关系关系 如前所述,类图由类和它们之间的关系组成。定如前所述,类图由类和它们之间的关系组成。定义了类之后,就可以定义类之间的各种关系了。类与义了类之后,就可以定义类之间的各种关系了。类与类之间通常有关联、泛化类之间通常有关联、泛化(继承继承)、依赖和细化等四种、依赖和细化等四种关系。关系。(1)(1)关联关系关联关系 普通关联普通关联 普通关联是最常见的关联关系,只要在类与类之普通关联是最常见的关联关系,只要在类与类之间存在连接关系就可以用普通关联表示。普通关联的间存在连接关系就可
36、以用普通关联表示。普通关联的图示符号是连接两个类之间的直线,如图图示符号是连接两个类之间的直线,如图15.415.4所示。所示。如果关联是单向的,则称为导航关联,其符号是如果关联是单向的,则称为导航关联,其符号是用实线箭头连接两个类。用实线箭头连接两个类。在类图中还可以表示关联中的数量关系,即参与在类图中还可以表示关联中的数量关系,即参与关联的对象的个数。在关联的对象的个数。在UML中用重数中用重数(类似于第类似于第6章中章中的阶的阶)说明数量或数量范围,例如,说明数量或数量范围,例如,01表示表示0到到1个对象个对象 0*或或*表示表示0到多个对象到多个对象 115表示表示1到到15个对象个
37、对象 3表示表示3个对象个对象 如果图中未明确标出关联的重数,则缺省重数是如果图中未明确标出关联的重数,则缺省重数是1。图15.4 普通关联之例图155导航关联之例 关联的角色关联的角色 在任何关联中都会涉及到参与此关联的对象所扮在任何关联中都会涉及到参与此关联的对象所扮演的角色演的角色(即起的作用即起的作用),在某些情况下显式,在某些情况下显式标明角色标明角色名有助于别人理解类图。名有助于别人理解类图。如果没有显式标出角色名,则意味着用类名作为如果没有显式标出角色名,则意味着用类名作为角色名。角色名。限定关联限定关联 关联类关联类 为了说明关联的性质可能需要一些附加信息。可为了说明关联的性质
38、可能需要一些附加信息。可以引入一个关联类来记录这些信息。关联中以引入一个关联类来记录这些信息。关联中的每个连的每个连接与关联类的一个对象相联系。关联类通过一条虚线接与关联类的一个对象相联系。关联类通过一条虚线与关联连接。与关联连接。图15.6 关联的角色图15.7 关联类示例 聚集聚集 聚集也称为聚合,是关联的特例。聚集表示类与聚集也称为聚合,是关联的特例。聚集表示类与类之间的关系是整体与部分的关系。类之间的关系是整体与部分的关系。如果在聚集关系中处于部分方的对象可同时参与如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为多个处于整体方对象的构成,则该聚集称为共享
39、聚集。共享聚集。如果部分类完全隶属于整体类,部分与整体共存,如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失整体不存在了部分也会随之消失(或失去或失去存在阶值了存在阶值了),则该聚集称为复合聚集则该聚集称为复合聚集(简称为组成简称为组成)。图15.8 共享聚集示例图15.9 复合聚集示例 (2)泛化关系泛化关系 UML中的泛化关系就是通常所说的继承关系,它中的泛化关系就是通常所说的继承关系,它是通用元素和具体元素之间的一种分类关系。具体元是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些其素完全拥有通用元素的信息,并且还可以附加一
40、些其他信息。他信息。UML对定义泛化关系有下述三条要求。对定义泛化关系有下述三条要求。具体元素应与通用元素完全一致,通用元素具有具体元素应与通用元素完全一致,通用元素具有的属性、操作和关联,具体元素也都隐含地具有。的属性、操作和关联,具体元素也都隐含地具有。具体元素还应包含通用元素所没有的额外信息。具体元素还应包含通用元素所没有的额外信息。允许使用通用元素实例的地方,也应能够使用具允许使用通用元素实例的地方,也应能够使用具体元素的实例。体元素的实例。在在UML中,用一端为空心三角形的连线表示泛化中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。关系,三角形的顶角紧挨着通用元
41、素。注意,泛化针对类型而不针对实例,一个类可以注意,泛化针对类型而不针对实例,一个类可以继承另一个类,但一个对象不能继承另一个对象。继承另一个类,但一个对象不能继承另一个对象。泛化可进一步划分成普通泛化和受限泛化。泛化可进一步划分成普通泛化和受限泛化。普通泛化普通泛化 普通泛化的概念与第普通泛化的概念与第6章中讲过的继承概念基本相章中讲过的继承概念基本相同,此处不再过多解释。同,此处不再过多解释。受限泛化受限泛化 可以给泛化关系附加约束条件,以进一步说明该可以给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称泛化关系的使用方法或扩充方法,这样的泛化关系称为受限
42、泛化。预定义的约束有为受限泛化。预定义的约束有4种:多重、不相交、完种:多重、不相交、完全和不完全。这些约束都是语义约束。全和不完全。这些约束都是语义约束。图15.10 抽象类示例图15.11 复杂类图示例图15.12 多重继承示例 (3)依赖和细化依赖和细化 依赖关系依赖关系 依赖关系描述两个模型元素依赖关系描述两个模型元素(类、用例等类、用例等)之间的之间的语义连接关系:其中一个模型元素是独立的,另一个语义连接关系:其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元果独立
43、的模型元素改变了,将影响依赖于它的模型元素。素。图15.13 友元依赖关系示例 细化关系细化关系 当对同一事物在不同抽象层次上描述时,这些描当对同一事物在不同抽象层次上描述时,这些描述之间具有细化关系。细化是述之间具有细化关系。细化是UML中的术语,表示对中的术语,表示对事物更详细一层的描述。假设两个元素事物更详细一层的描述。假设两个元素A和和B描述同一描述同一个事物,它们的区别是抽象层次不同,如果个事物,它们的区别是抽象层次不同,如果B是在是在A的的基础上的更详细的描述,则称基础上的更详细的描述,则称B细化了细化了A,或称,或称A细化细化成了成了B。细化的图示符号为由元素。细化的图示符号为由
44、元素B指向元素指向元素A的、一的、一端为空心三角的虚线端为空心三角的虚线(不是实线不是实线),如图,如图15.14所示。细所示。细化主要用于模型之间的合作,表示各开发阶段不同抽化主要用于模型之间的合作,表示各开发阶段不同抽象层次的模型的相关性,常用于跟踪模型的演变。象层次的模型的相关性,常用于跟踪模型的演变。图15.14 细化关系的图示 3.对象图对象图 对象是类的实例,对象之间的连接是类之间关联对象是类的实例,对象之间的连接是类之间关联的实例,因此,对象图可以看作是类图的实例,能帮的实例,因此,对象图可以看作是类图的实例,能帮助人理解一个比较复杂的类图。助人理解一个比较复杂的类图。在在UML
45、中,对象图与类图具有几乎完全相同的表中,对象图与类图具有几乎完全相同的表示形式,主要差别是对象的名字下面要加一条下划线。示形式,主要差别是对象的名字下面要加一条下划线。对象名有下列三种表示格式:对象名有下列三种表示格式:第一种格式形如:第一种格式形如:对象名:类名对象名:类名 即对象名在前,类名在后,中间用冒号连接。即对象名在前,类名在后,中间用冒号连接。第二种格式形如:第二种格式形如:类名:类名 这种格式用于尚未给对象命名的情况,注意,类这种格式用于尚未给对象命名的情况,注意,类名前的冒号不能省略。名前的冒号不能省略。第三种格式形如:第三种格式形如:对象名对象名 这种格式不带类名这种格式不带
46、类名(即省略类名即省略类名)。图15.15 对象图示例 4.4.包包 包包(package)(package)是一种组合机制。把各种各样的模型是一种组合机制。把各种各样的模型元素通过内在的语义关系连在一起,形成一个高内聚、元素通过内在的语义关系连在一起,形成一个高内聚、低耦合的整体就叫做包。包通常用于对模型的组织管低耦合的整体就叫做包。包通常用于对模型的组织管理,因此有时又把包称为子系统。理,因此有时又把包称为子系统。(1)(1)包的内容包的内容 构成包的模型元素称为包的内容,包的内容可以构成包的模型元素称为包的内容,包的内容可以是一个类图也可以是另一个包图。包与包之是一个类图也可以是另一个包
47、图。包与包之间不能共间不能共用一个相同的模型元素。用一个相同的模型元素。(2)(2)包的依赖和继承包的依赖和继承 包与包之间允许建立依赖、泛化和细化等关系。包与包之间允许建立依赖、泛化和细化等关系。图15.16 包图示例 系统中的对象在执行期间的不同时间点如何通信系统中的对象在执行期间的不同时间点如何通信以及通信的结果如何,就是系统的动态行为,也就是以及通信的结果如何,就是系统的动态行为,也就是说,对象通过通信相互协作的方式以及系统中的对象说,对象通过通信相互协作的方式以及系统中的对象在系统生命期中改变状态的方式,是系统的动态行为。在系统生命期中改变状态的方式,是系统的动态行为。15.3.1消
48、息消息 在在UML的所有动态图的所有动态图(状态图、顺序图、协作图和状态图、顺序图、协作图和活动图活动图)中,消息都表示为连接发送者和接收者的一根中,消息都表示为连接发送者和接收者的一根箭头线,箭头的形状表示消息的类型,如图箭头线,箭头的形状表示消息的类型,如图15.17所示。所示。图15.17 消息的类型 UML定义了三种消息。定义了三种消息。简单消息:表示简单的控制流,它只是表示控简单消息:表示简单的控制流,它只是表示控制从一个对象传给另一个对象,而没有描述通信的任制从一个对象传给另一个对象,而没有描述通信的任何细节。何细节。同步消息:表示嵌套的控制流,操作的调用是同步消息:表示嵌套的控制
49、流,操作的调用是一种典型的同步消息。调用者发出消息后必须等待消一种典型的同步消息。调用者发出消息后必须等待消息返回,只有当处理消息的操作执行完毕后,调用者息返回,只有当处理消息的操作执行完毕后,调用者才可以继续执行自己的操作。才可以继续执行自己的操作。异步消息:表示异步控制流,发送者发出消息后异步消息:表示异步控制流,发送者发出消息后不用等待消息处理完就可以继续执行自己的操作。异不用等待消息处理完就可以继续执行自己的操作。异步消息主要用于描述实时系统中的并发行为。步消息主要用于描述实时系统中的并发行为。可以把一个简单消息和一个同步消息合并成一个消息可以把一个简单消息和一个同步消息合并成一个消息
50、(见图见图15.17),这样的消息意味着操作调用一旦完成就,这样的消息意味着操作调用一旦完成就立即返回。立即返回。15.3.2 状态图状态图 状态图描述一个特定对象的所有可能的状态以及状态图描述一个特定对象的所有可能的状态以及引起状态转换的事件。大多数面向对象技术都用状态引起状态转换的事件。大多数面向对象技术都用状态图表示单个对象在其生命期中的行为。一个状态图包图表示单个对象在其生命期中的行为。一个状态图包括一系列状态、事件以及状态之间的转移。括一系列状态、事件以及状态之间的转移。1.状态状态 所有对象都具有状态,状态是对象执行了一系列所有对象都具有状态,状态是对象执行了一系列活动的结果。当某