在底层区域中我们得以看出Flight类有五个操作,类图的目标是显得建模系统的档次

http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/

 

基础

基础

如先前所关联的,类图的目标是显得建模系统的项目。在大多数的 UML
模型中这几个系列包括:

如先前所关联的,类图的目标是显得建模系统的体系。在大部的 UML
模型中这么些品种蕴涵:

  • 接口

  • 数据类型

  • 组件

  • 接口

  • 数据类型

  • 组件

UML
为那几个品种起了一个专程的名字:“分类器”。平日地,你可以把分类器当做类,但在技术上,分类器是进一步宽广的术语,它依然引用下边的别样三种档次为好。

UML
为那一个项目起了一个专门的名字:“分类器”。平时地,你可以把分类器当做类,但在技术上,分类器是更为广大的术语,它依然引用下边的任何三种档次为好。

类名

类名

类的 UML 表示是一个长方形,垂直地分为七个区,如图 1
所示。顶部区域突显类的名字。中间的区域列出类的特性。底部的区域列出类的操作。当在一个类图上画一个类元素时,你必须求有下边的区域,上边的二个区域是可拔取的(当图描述仅仅用于体现分类器间事关的高层细节时,上面的三个区域是不须要的)。图
1 体现一个航道班机怎么着作为 UML
类建模。正如我辈所能见到的,名字是 Flight,我们可以在中等区域看到Flight类的3个属性:flightNumber,departure提姆e

flightDuration。在底部区域中大家可以见到Flight类有四个操作:delayFlight
和 getArrival提姆e。

类的 UML 表示是一个长方形,垂直地分为多少个区,如图 1
所示。顶部区域突显类的名字。中间的区域列出类的特性。底部的区域列出类的操作。当在一个类图上画一个类元素时,你不可以不要有上边的区域,上边的二个区域是可挑选的(当图描述仅仅用于显示分类器间涉及的高层细节时,上边的多个区域是不必要的)。图
1 来得一个航程班机怎样作为 UML 类建模。正如我们所能见到的,名字是
Flight,大家得以在中游区域看到Flight类的3个特性:flightNumber,departure提姆(Tim)e

flightDuration。在底层区域中大家得以看看Flight类有七个操作:delayFlight
和 getArrival提姆(Tim)e。

图片 1

图片 2

图 1: Flight类的类图

图 1: Flight类的类图

类属性列表

类属性列表

类的属性节(中部区域)在分隔线上列出每一个类的特性。属性节是可挑选的,如若一用它,就隐含类的列表展现的每个属性。该线用如下格式:

类的属性节(中部区域)在分隔线上列出每一个类的属性。属性节是可选拔的,如果一用它,就包蕴类的列表突显的各种属性。该线用如下格式:

name : attribute type
flightNumber : Integer
name : attribute type
flightNumber : Integer

持续大家的Flight类的事例,大家可以动用性质类型音信来叙述类的性质,如表 1
所示。

延续我们的Flight类的例子,我们可以利用性质类型信息来描述类的性能,如表 1
所示。

表 1:具有关联类型的Flight类的特性名字

表 1:具有关联类型的Flight类的性能名字

属性名称 属性类型
flightNumber Integer
departureTime Date
flightDuration Minutes
属性名称 属性类型
flightNumber Integer
departureTime Date
flightDuration Minutes

在作业类图中,属性类型一般与单位符合,那对于图的恐怕读者是有含义的(例如,分钟,加元,等等)。但是,用于转移代码的类图,须要类的特性类型必须界定在由程序语言提供的门类之中,或含有于在系统中落到实处的、模型的品种之中。

在工作类图中,属性类型一般与单位符合,那对于图的可能读者是有含义的(例如,分钟,韩元,等等)。不过,用于转移代码的类图,须要类的属性类型必须界定在由程序语言提供的品种之中,或带有于在系统中贯彻的、模型的花色之中。

在类图上展现所有默许值的特定属性,有时是一蹴而就的(例如,在银行账户应用程序中,一个新的银行账户会以零为起始值)。UML
规范允许在属性列表节中,通过动用如下的标志作为默许值的标识:

在类图上体现所有默许值的一定属性,有时是立竿见影的(例如,在银行账户应用程序中,一个新的银行账户会以零为早先值)。UML
规范允许在属性列表节中,通过动用如下的标志作为默许值的标识:

name : attribute type = default value
name : attribute type = default value

比喻来说:

举例来说来说:

balance : Dollars = 0
balance : Dollars = 0

显示属性默许值是可选拔的;图 2
突显一个银行账户类具有一个名为 balance的类型,它的默许值为0。

显示属性默许值是可挑选的;图 2 突显一个银行账户类具有一个名为
balance的类型,它的默许值为0。

图片 3

图片 4

图 2:展现默许为0韩元的balance属性值的银行账户类图。

图 2:突显默许为0英镑的balance属性值的银行账户类图。

类操作列表

类操作列表

类操作记录在类图长方形的第多个(最低的)区域中,它也是可采纳的。和性能一样,类的操作以列表格式突显,每个操作在它自己线上。操作使用下列记号表现:

类操作记录在类图长方形的第五个(最低的)区域中,它也是可挑选的。和特性一样,类的操作以列表格式显示,每个操作在它和谐线上。操作使用下列记号表现:

    name(parameter list) : type of value returned
  name(parameter list) : type of value returned

上边的表 2 中Flight类操作的照射。

上面的表 2 中Flight类操作的映照。

表 2:从图 2 辉映的Flight类的操作

表 2:从图 2 炫耀的Flight类的操作

操作名称 返回参数 值类型
delayFlight
Name Type
numberOfMinutes Minutes
N/A
getArrivalTime N/A Date
操作名称 返回参数 值类型
delayFlight
Name Type
numberOfMinutes Minutes
N/A
getArrivalTime N/A Date

图3显得,delayFlight 操作有一个Minutes类型的输入参数 —
numberOfMinutes。但是,delayFlight
操作没有重临值。 1 当一个操作有参数时,参数被放在操作的括号内;每个参数都施用那样的格式:“参数名:参数类型”。

图3来得,delayFlight 操作有一个Minutes类型的输入参数 —
numberOfMinutes。然则,delayFlight
操作没有再次来到值。1当一个操作有参数时,参数被放在操作的括号内;每个参数都利用那样的格式:“参数名:参数类型”。

图片 5

图片 6

图 3:Flight类操作参数,包含可挑选的“in”标识。

图 3:Flight类操作参数,包蕴可挑选的“in”标识。

当文档化操作参数时,你或许采纳一个可挑选的指示器,以彰显参数到操作的输入参数、或输出参数。那么些可接纳的提醒器以“in”或“out”出现,如图3中的操作区域所示。一般的话,除非将使用一种早期的先后编程语言,如Fortran
,那个提醒器可能会具备辅助,否则它们是不须求的。可是,在
C++和Java中,所有的参数是“in”参数,而且依照UML规范,既然“in”是参数的默许类型,一大半人将会遗漏输入/输出提示器。

当文档化操作参数时,你也许应用一个可拔取的提醒器,以显示参数到操作的输入参数、或输出参数。那几个可选择的提醒器以“in”或“out”出现,如图3中的操作区域所示。一般的话,除非将动用一种早期的主次编程语言,如Fortran
,那一个提示器可能会有着帮忙,否则它们是不要求的。可是,在
C++和Java中,所有的参数是“in”参数,而且根据UML规范,既然“in”是参数的默许类型,一大半人将会遗漏输入/输出提示器。

继承

继承

在面向对象的安排中一个要命关键的概念,继承,指的是一个类(子类)继承除此以外的一个类(超类)的相同功效,并增添它和谐的新成效(一个非技术性的比喻,想象自己继续了自身姨妈的貌似的音乐力量,但是在自我的家里,我是唯一一个玩电吉他的人)的力量。为了在一个类图上建模继承,从子类(要三番五次行为的类)拉出一条闭合的,单键头(或三角形)的实线指向超类。考虑银行账户的档次:图
4 显示 CheckingAccount 和 SavingsAccount 类如何从 BankAccount
类继承而来。

在面向对象的规划中一个极度重大的定义,继承,指的是一个类(子类)继承其余的一个类(超类)的均等作用,并追加它自己的新职能(一个非技术性的比方,想象我两次三番了自身姑姑的一般的音乐力量,不过在本人的家里,我是绝无仅有一个玩电吉他的人)的能力。为了在一个类图上建模继承,从子类(要继承行为的类)拉出一条闭合的,单键头(或三角形)的实线指向超类。考虑银行账户的种类:图
4 展现 CheckingAccount 和 SavingsAccount 类如何从 BankAccount
类继承而来。

图片 7

图片 8

图 4: 继承通过指向超类的一条闭合的,单箭头的实线表示。

图 4: 继承通过指向超类的一条闭合的,单箭头的实线表示。

在图 4 中,继承关系由种种超类的单身的线画出,那是在IBM Rational
罗丝和IBM Rational
XDE中利用的主意。不过,有一种名叫 树标记的准备格局能够画出继承关系。当存在三个或越多子类时,如图
4 中所示,除了一而再线象树枝一样混在协同外,你可以利用树形记号。图 5
是重绘的与图 4 一样的继承,不过本次运用了树形记号。

在图 4 中,继承关系由各种超类的单身的线画出,那是在IBM Rational
罗丝和IBM Rational XDE中应用的艺术。但是,有一种叫做
树标记的准备格局可以画出继承关系。当存在五个或更加多子类时,如图 4
中所示,除了继续线象树枝一样混在联合外,你可以应用树形记号。图 5
是重绘的与图 4 一样的延续,可是这一次使用了树形记号。

图片 9

图片 10

图 5: 一个施用树形记号的持续实例

图 5: 一个行使树形记号的接轨实例

抽象类及操作 
精心的读者会注意到,在图 4 和 图5
中的图中,类名BankAccount和withdrawal操作使用斜体。那表示,BankAccount
类是一个抽象类,而withdrawal方法是空洞的操作。换句话说,BankAccount
类使用withdrawal规定抽象操作,并且CheckingAccount 和 SavingsAccount
五个子类都各自地履行它们分别版本的操作。

抽象类及操作
周详的读者会专注到,在图 4 和 图5
中的图中,类名BankAccount和withdrawal操作使用斜体。那表示,BankAccount
类是一个抽象类,而withdrawal方法是架空的操作。换句话说,BankAccount
类使用withdrawal规定抽象操作,并且CheckingAccount 和 SavingsAccount
五个子类都分别地举行它们分别版本的操作。

然则,超类(父类)不自然如若抽象类。标准类作为超类是例行的。

而是,超类(父类)不自然要是抽象类。标准类作为超类是正规的。

关联 
当您系统建模时,特定的对象间将会相互关系,而且那些关系本身需求被明晰地建模。有五种关系。在这一局地中,我将会切磋它们中的八个– 双向的涉嫌和单向的涉及,而且自己将会在Beyond the
basics
一对探究剩下的三种关系类型。请留意,关于何时该应用每种类型涉及的详实座谈,不属于本文的限定。相反的,我将会把关键集中在每种关系的用途,并表达如何在类图上画出涉及。

关联
当你系统建模时,特定的目的间将会相互关系,而且那几个涉及本身要求被清楚地建模。有五种关系。在这一有的中,我将会谈论它们中的八个– 双向的关系和单向的涉嫌,而且我将会在Beyond the
basics
局地琢磨剩下的二种关系类型。请小心,关于几时该使用每种类型涉及的详尽商量,不属于本文的限量。相反的,我将会把主要集中在每种关系的用处,并证实什么在类图上画出涉及。

双向(标准)的关联 
涉嫌是八个类间的连通。关联总是被假定是双向的;这意味着,多少个类互相驾驭它们间的关联,除非您限定一些任何品类的涉及。回想一下Flight
的例子,图 6 显示了在Flight类和Plane类之间的一个规范项目标关系。

双向(标准)的关联
事关是三个类间的衔接。关联总是被假定是双向的;这代表,多少个类相互领悟它们间的关系,除非你限定一些其余连串的关联。回看一下Flight
的例证,图 6 突显了在Flight类和Plane类之间的一个业内项目标涉嫌。

图片 11

图片 12

图 6:在一个Flight类和Plane类之间的双向关联的实例

图 6:在一个Flight类和Plane类之间的双向关联的实例

一个双向关联用多少个类间的实线表示。在线的任一端,你放置一个角色名和多重值。图
6
显示Flight与一个一定的Plane相关联,而且Flight类知道那些涉及。因为角色名以Plane类表示,所以Plane承担关联中的“assignedPlane”角色。紧接于Plane类前面的多重值描述0…1表示,当一个Flight实体存在时,可以有一个或尚未Plane与之提到(也就是,Plane可能还没有被分配)。图
6
也突显Plane知道它与Flight类的关联。在这些关系中,Flight承担“assignedFlights”角色;图
6
的图告诉大家,Plane实体可以不与flight关联(例如,它是一架全新的飞机)或与没有上限的flight(例如,一架已经服役5年的飞机)关联。

一个双向关联用八个类间的实线表示。在线的任一端,你放置一个角色名和多重值。图
6
呈现Flight与一个特定的Plane相关联,而且Flight类知道这几个关系。因为角色名以Plane类表示,所以Plane承担关联中的“assignedPlane”角色。紧接于Plane类前面的多重值描述0…1意味着,当一个Flight实体存在时,可以有一个或从不Plane与之提到(也就是,Plane可能还一直不被分配)。图
6
也突显Plane知道它与Flight类的涉及。在那一个关系中,Flight承担“assignedFlights”角色;图
6
的图告诉大家,Plane实体可以不与flight关联(例如,它是一架全新的飞行器)或与没有上限的flight(例如,一架已经服役5年的飞行器)关联。

出于对那几个在事关底部可能出现的多重值描述感到思疑,上边的表3列出了一些多重值及它们含义的事例。

是因为对那多少个在提到底部可能出现的多重值描述感到思疑,下边的表3列出了一些多重值及它们含义的例证。

表 3: 多重值和它们的意味

表 3: 多重值和它们的象征

想必的多重值描述

兴许的多重值描述

表示

表示

含义

含义

0..1

0..1

0个或1个

0个或1个

1

1

只能1个

只能1个

0..*

0..*

0个或七个

0个或三个

*

*

0个或几个

0个或七个

1..*

1..*

1个或本人个

1个或自己个

3

3

只能3个

只能3个

0..5

0..5

0到5个

0到5个

5..15

5..15

5到15个

5到15个

单向关系 
在一个单向关系中,多少个类是不非亲非故系的,可是唯有一个类知道那种关系的存在。图 7
显示单向关系的透支财务报告的一个实例。

单向关系
在一个单向关系中,四个类是有关的,然而唯有一个类知道那种关联的留存。图 7
呈现单向关系的透支财务报告的一个实例。

图片 13

图片 14

图 7: 单向关系一个实例:OverdrawnAccountsReport 类 BankAccount 类,而
BankAccount 类则对关系一窍不通。

图 7: 单向关系一个实例:OverdrawnAccountsReport 类 BankAccount 类,而
BankAccount 类则对事关一窍不通。

一个一派的涉嫌,表示为一条带有指向已知类的开放箭头(不停歇的箭头或三角形,用于标志继承)的实线。如同标准提到,单向关系包涵一个角色名和一个多重值描述,不过与规范的双向关联不相同的时,单向关系只含有已知类的角色名和多重值描述。在图
7 中的例子中,OverdrawnAccountsReport 知道 BankAccount 类,而且知道
BankAccount
类扮演“overdrawnAccounts”的角色。然而,和正式提到分化,BankAccount
类并不知道它与 OverdrawnAccountsReport
相关联。 2

一个一方面的涉嫌,表示为一条带有指向已知类的开放箭头(不停歇的箭头或三角形,用于标志继承)的实线。就像标准提到,单向关系包括一个角色名和一个多重值描述,不过与标准的双向关联分歧的时,单向关系只含有已知类的角色名和多重值描述。在图
7 中的例子中,OverdrawnAccountsReport 知道 BankAccount 类,而且知道
BankAccount
类扮演“overdrawnAccounts”的角色。可是,和业内提到分歧,BankAccount
类并不知道它与 OverdrawnAccountsReport
相关联。2

软件包 
不可避免,假如您正在为一个大的系统或大的作业领域建模,在你的模子少将会有为数不少不一的分类器。管理所有的类将是一件令人生畏的职分;所以,UML
提供一个称作 软件包的社团元素。软件包使建模者可以社团模型分类器到名字空间中,那有些象文件系统中的文件夹。把一个系统分为多个软件包使系统成为不难明白,更加是在每个软件包都表现系统的一个特定部分时。 3

软件包
不可防止,如若您正在为一个大的连串或大的事情领域建模,在你的模型中校会有无数例外的分类器。管理所有的类将是一件令人生畏的义务;所以,UML
提供一个称为
软件包的公司元素。软件包使建模者可以社团模型分类器到名字空间中,那有些象文件系统中的文件夹。把一个连串分为多少个软件包使系统成为不难领悟,更加是在每个软件包都表现系统的一个一定部分时。3

在图中设有三种办法表示软件包。并没有规则须求运用哪类标志,除了用你个人的判定:哪个种类更有利阅读你画的类图。二种方法都是由一个较小的长方形(用于固定)嵌套在一个大的长方形中伊始的,如图
8 所示。可是建模者必须控制包的积极分子怎样表示,如下:

在图中设有二种艺术表示软件包。并没有规则要求利用哪一种标志,除了用你个人的论断:哪一类更有益阅读你画的类图。二种办法都是由一个较小的长方形(用于固定)嵌套在一个大的长方形中初阶的,如图
8 所示。不过建模者必须控制包的成员如何表示,如下:

  • 假诺建模者决定在大长方形中显得软件包的分子,则有所的那么些成员 4 亟待被停放在长方形里面。别的,所有软件包的名字需求放在软件包的较小长方形之内(如图
    8 的来得)。

  • 如果建模者决定在大的长方形之外突显软件包成员,则拥有将会在图上呈现的分子都亟需被停放长方形之外。为了突显属于软件包的分类器属于,从各个分类器画一条线到中间有加号的圆圆,那几个圆周粘附在软件包之上(图9)。

  • 假若建模者决定在大长方形中浮现软件包的成员,则拥有的那个成员4急需被放置在长方形里面。其余,所有软件包的名字要求放在软件包的较小长方形之内(如图
    8 的显得)。

  • 假若建模者决定在大的长方形之外展现软件包成员,则持有将会在图上突显的积极分子都亟待被平放长方形之外。为了突显属于软件包的分类器属于,从每个分类器画一条线到中间有加号的圆圆,这几个圆周粘附在软件包之上(图9)。

图片 15

图片 16

图 8:在软件包的长方形内突显软件包成员的软件包元素例子

图 8:在软件包的长方形内浮现软件包成员的软件包元素例子

图片 17

图片 18

图 9:一个通过连接线表现软件包成员的软件包例子

图 9:一个透过连接线表现软件包成员的软件包例子

刺探基础主要性

精晓基础主要性

在 UML 2
中,明白类图的基础更为首要。那是因为类图为所有的此外协会图提供基本的构建块。如组件或对象图(仅仅是举了些例子)。

在 UML 2
中,驾驭类图的底蕴更为紧要。那是因为类图为拥有的此外协会图提供基本的构建块。如组件或对象图(仅仅是举了些例子)。



回页首

回页首

跨越基础

超过基础

到此截止,我早就介绍了类图的根底,可是请继续往下读!在下边的有的中,我将会率领您到您会利用的类图的更要紧的上边。这个包含UML
2 专业中的接口,其余的三种关系类型,可知性和其它补给。

到此截至,我曾经介绍了类图的底蕴,不过请继续往下读!在上面的有些中,我将会带领你到你会利用的类图的更要紧的地点。那么些包涵UML
2 标准中的接口,其余的二种关系类型,可知性和其它补给。

接口 
在本文的面前,我提议您以类来设想分类器。事实上,分类器是一个更是相似的概念,它包含数据类型和接口。

接口
在本文的前面,我提议您以类来考虑分类器。事实上,分类器是一个进一步相似的定义,它包含数据类型和接口。

至于什么时候、以及怎样火速地在系统结构图中行使数据类型和接口的完全研究,不在本文的座谈范围以内。既然那样,我怎么要在此处提及数据类型和接口呢?你也许想在结构图上模拟那些分类器类型,在这么些时候,使用正确的号子来代表,或者至少知道这个分类器类型是重大的。不科学地绘制那一个分类器,很有可能将使您的协会图读者感觉混乱,以后的种类将不可能适应需求。

有关几时、以及哪些高效地在系统结构图中应用数据类型和接口的完整商量,不在本文的探究范围以内。既然那样,我怎么要在此处提及数据类型和接口呢?你也许想在结构图上模仿这几个分类器类型,在那么些时候,使用科学的号子来表示,或者至少知道那个分类器类型是关键的。不得法地绘制这几个分类器,很有可能将使您的构造图读者感到混乱,未来的系统将无法适应须求。

一个类和一个接口分歧:一个类可以有它造型的忠实实例,但是一个接口必须至少有一个类来完毕它。在
UML 2
中,一个接口被认为是类建模元素的特殊化。由此,接口就象类那样绘制,不过长方形的顶部区域也有文件“interface”,如图
10
所示。 5

一个类和一个接口不一致:一个类可以有它造型的真正实例,但是一个接口必须至少有一个类来落到实处它。在
UML 2
中,一个接口被认为是类建模元素的特殊化。因而,接口就象类那样绘制,但是长方形的顶部区域也有文件“interface”,如图
10
所示。5

图片 19

图片 20

图 10:Professor类和Student类落成Person接口的类图实例

图 10:Professor类和Student类达成Person接口的类图实例

在图 10
中显示的图中,Professor和Student类都完毕了Person的接口,但并不从它一连。大家精晓那点是由于下边四个原因:1)
Person对象作为接口被定义 —
它在对象的名字区域中有“interface”文本,而且大家来看由于Professor和Student对象按照画类对象的条条框框(在它们的名字区域中一直不额外的分类器文本)标示,所以它们是 目标。
2) 我们驾驭继承在此间没有被展现,因为与带箭头的线是点线而不是实线。如图
10
所示,一条带有闭合的单向箭头的 线意味着完毕(或进行);正如大家在图
4 中所见到的,一条带有闭合单向箭头的线意味着继续。

在图 10
中显得的图中,Professor和Student类都达成了Person的接口,但并不从它三番一回。我们驾驭这或多或少是出于下边八个原因:1)
Person对象作为接口被定义 —
它在目标的名字区域中有“interface”文本,而且大家见到由于Professor和Student对象依据画类对象的平整(在它们的名字区域中绝非额外的分类器文本)标示,所以它们是
目的。 2)
大家了然继承在那边没有被出示,因为与带箭头的线是点线而不是实线。如图 10
所示,一条带有闭合的单向箭头的 线意味着已毕(或举办);正如大家在图
4 中所见到的,一条带有闭合单向箭头的线意味着继续。

越多的关联 
在上头,我谈谈了双向关联和单向关系。现在,我将会介绍剩下的三连串型的涉嫌。

更加多的关联
在地点,我谈谈了双向关联和单向关系。现在,我将会介绍剩下的三连串型的关系。

关联类 
在涉及建模中,存在部分状态下,你必要包蕴此外类,因为它含有了关于关联的有价值的新闻。对于那种景况,你会拔取 关联类 来绑定你的主导关系。关联类和一般类一样表示。区其他是,主类和关联类之间用一条相交的点线连接。图
11 显示一个航空工业实例的涉及类。

关联类
在关乎建模中,存在部分情状下,你须求包蕴其它类,因为它包含了关于关联的有价值的新闻。对于那种景色,你会选取
关联类
来绑定你的基本关系。关联类和一般类一样表示。区其余是,主类和关联类之间用一条相交的点线连接。图
11 突显一个航空工业实例的涉嫌类。

图片 21

图片 22

图 11:扩张关联类 MileageCredit

图 11:扩充关联类 MileageCredit

在图 11 中显示的类图中,在Flight类和 FrequentFlyer
类之间的涉及,发生了名叫
MileageCredit的涉及类。那意味着当Flight类的一个实例关联到 FrequentFlyer
类的一个实例时,将会暴发 MileageCredit 类的一个实例。

在图 11 中显示的类图中,在Flight类和 FrequentFlyer
类之间的涉及,发生了号称
MileageCredit的关联类。这象征当Flight类的一个实例关联到 FrequentFlyer
类的一个实例时,将会生出 MileageCredit 类的一个实例。

聚合 
聚拢是一种尤其类型的关系,用于描述“总体到一些”的涉嫌。在着力的集合关系中, 部分类 的生命周期独立于 整体类 的生命周期。

聚合
聚拢是一种更加类型的关系,用于描述“总体到一些”的涉嫌。在焦点的聚众关系中,
部分类 的生命周期独立于 整体类 的生命周期。

比喻来说,大家得以想象, 是一个一体化实体,而 车轮 轮胎是整辆车的一片段。轮胎可以在安放到车时的前多少个礼拜被打造,并放置于仓库中。在这么些实例中,Wheel类实例清楚地单独地Car类实例而存在。可是,有些情形下, 部分 类的生命周期并  独立于 整体 类的生命周期

那称为合成聚合。举例来说,考虑集团与部门的涉嫌。 商厦和机构 都建模成类,在公司存在往日,部门不可能存在。那里Department类的实例器重于Company类的实例而留存。

让大家更进一步追究基本聚合和组合聚合。

着力聚合 
有汇聚关系的关系指出,某个类是其余某个类的一有些。在一个凑合关系中,子类实例可以比父类存在更长的时光。为了突显一个碰面关系,你画一条从父类到有的类的实线,并在父类的涉嫌末端画一个未填充棱形。图
12 呈现车和轮胎间的聚众关系的例子。

图片 23

图 12: 一个集合关联的例子

结合聚合 
结缘聚合关系是相会关系的另一种样式,不过子类实例的生命周期看重于父类实例的生命周期。在图13中,呈现了Company类和Department类之间的结合关系,注意组合关系如聚合关系一致绘制,可是这一次菱形是被填充的。

图片 24

图 13: 一个整合关系的例证

在图 13
中的关系建模中,一个Company类实例至少总有一个Department类实例。因为关乎是组成关系,当Company实例被移除/销毁时,Department实例也将自动地被移除/销毁。组合聚合的另一个重中之重功能是有些类只可以与父类的实例相关(举例来说,我们例子中的Company类)。

反射关联 
前几日大家已经钻探了有着的关联类型。如同您可能注意到的,大家的具有例子已经呈现了多少个分歧类之间的涉及。可是,类也足以行使反射关联与它本身相关联。开端,那也许没有意义,可是切记,类是画饼充饥的。图
14 突显一个Employee类怎样通过manager /
manages角色与它本身有关。当一个类关联到它自己时,那并不表示类的实例与它自身有关,而是类的一个实例与类的另一个实例相关。

图片 25

图 14:一个反光关联关系的实例

图 14
描绘的关系说美素佳儿(Friso)(Friso)个Employee实例可能是别的一个Employee实例的首席执行官。不过,因为“manages”的涉及角色有
0..*的多重性描述;一个雇员可能不受任何其他雇员管理。

可见性 
在面向对象的筹划中,存在属性及操作可知性的标志。UML
识别四体系型的可知性:public,protected,private及package。

UML
规范并不必要性能及操作可知性必须出示在类图上,不过它要求为每个属性及操作定义可知性。为了在类图上的突显可知性,放置可知性标志于属性或操作的名字从前。尽管UML 指定四种可知性类型,可是实际上的编程语言可能扩充额外的可知性,或不帮衬UML 定义的可知性。表4显示了 UML 帮助的可知性类型的不等标志。

表 4:UML 协助的可知性类型的注明

标志 可见性类型
+ Public
# Protected
Private
~ Package

今昔,让大家看一个类,以声明属性及操作的可知性类型。在图 15
中,所有的习性及操作都是public,除了 updateBalance 操作。updateBalance
操作是protected。

图片 26

图 15:一个 BankAccount 类表明它的性质及操作的可知性


回页首

UML
2 补充

既然如此大家已经覆盖了基础和高等焦点,咱们将覆盖一些由UML 1.
x充实的类图的新标志。

实例 
当一个系统结构建模时,彰显例子类实例有时候是卓有成效的。为了那种布局建模,UML
2
提供 实例规范 元素,它显示在系统中选择例子(或具体)实例的值得注意的信息。

实例的号子和类一样,不过代表顶端区域中仅局地类名,它的名字是通过拼接的:

Instance Name : Class Name

比喻来说:

Donald : Person

因为显示实例的目的是浮现值得注意的或有关的新闻,没须求在你的模型中涵盖全部实体性质及操作。相反地,仅仅显示感兴趣的特性及其值是截然适用的。如图16所描述。

图片 27

图 16:Plane类的一个实例例子(只体现感兴趣的属性值)

不过,仅仅显示有些实例而并未它们的涉及不太实用;因而,UML 2
也同目的在于实体层的关联/关联建模。绘制关联与一般的类关系的平整平等,除了在建模关联时有一个增大的渴求。附加的范围是,关联关系必须与类图的关联相平等,而且关系的角色名字也必须与类图相平等。它的一个事例展现于图
17 中。在这些例子中,实例是图 6 中类图的例子实例。

图片 28

图 17:图 6 中用实例代替类的例证

图 17
有Flight类的二个实例,因为类图提出了在Plane类和Flight类之间的涉嫌是 0或多。因而,大家的例证给出了七个与NX0337
Plane实例相关的Flight实例。

角色 
建模类的实例有时比期望的进一步详细。有时,你恐怕但是想要在一个较多的相似层次做类关系的模型。在那种情景下,你应该利用 角色 记号。角色记号类似于实例记号。为了建立类的角色模型,你画一个方格,并在中间放置类的角色名及类名,作为实体记号,但是在那意况你不可能加下划线。图
18 显示一个由图 14 中图描述的雇员类扮演的角色实例。在图 18
中,大家能够认为,固然雇员类与它自己有关,关系真正是关于雇员之间扮演老总及团队成员的角色。

图片 29

图 18:一个类图显示图14中扮演不一致角色的类

留意,你不可能在纯粹类图中做类角色的建模,即便图
18显得你能够这么做。为了利用角色记号,你将会需求选择下边切磋的内部结构记号。

个中的布局 
UML 2
结构图的更有效的职能之一是新的内部结构记号。它同意你来得一个类或别的的一个分类器怎么样在内部整合。那在
UML 1. x
中是不容许的,因为记号限制你不得不突显一个类所负有的成团关系。现在,在 UML
2 中,内部的构造记号让您更驾驭地展现类的顺序部分如何有限支撑关系。

让大家看一个实例。在图 18
中大家有一个类图以表现一个Plane类怎么样由八个引擎和四个控制软件对象组成。从这些图中省略的东西是体现关于飞机部件如何被装配的片段音讯。从图
18
的图,你不可能表明,是各样控制软件对象说了算四个引擎,如故一个控制软件对象说了算八个引擎,而另一个说了算一个发动机。

图片 30

图 19: 只突显对象之间关系的类图

绘制类的内在结构将会革新那种情状。开头时,你通过用二个区域画一个方格。最顶端的区域包蕴类名字,而较低的区域包蕴类的内部结构,突显在它们父类中担负分歧角色的片段类,角色中的每个部分类也提到到其余类。图
19 来得了Plane类的内部结构;注意内部结构怎么样澄清混乱性。

图片 31

图 20:Plane类的内部结构例子。

在图 20 中Plane有七个ControlSoftware 对象,而且每个控制二个引擎。在图左侧上的
ControlSoftware(control1)控制引擎 1 和 2 。在图左侧的
ControlSoftware(control2)控制引擎 3 和 4 。 

举例来说来说,我们得以想象, 是一个一体化实体,而 车轮
轮胎是整辆车的一局地。轮胎可以在布置到车时的前多少个星期被制作,并放置于仓库中。在那么些实例中,Wheel类实例清楚地独自地Car类实例而存在。但是,有些意况下,
部分 类的生命周期并 独立于 整体 类的生命周期 —
那称为合成聚合。举例来说,考虑集团与单位的涉嫌。 供销社和机关
都建模成类,在同盟社存在在此之前,部门不可能存在。那里Department类的实例依赖于Company类的实例而存在。

让大家更进一步追究基本聚合和烧结聚合。

焦点聚合
有成团关系的关联提出,某个类是此外某个类的一局地。在一个成团关系中,子类实例可以比父类存在更长的年月。为了显示一个集合关系,你画一条从父类到有些类的实线,并在父类的关系末端画一个未填充棱形。图
12 呈现车和轮胎间的集合关系的事例。

图片 32

图 12: 一个聚集关联的事例

结合聚合
结缘聚合关系是会聚关系的另一种样式,可是子类实例的生命周期信赖于父类实例的生命周期。在图13中,彰显了Company类和Department类之间的咬合关系,注意组合关系如聚合关系一致绘制,可是本次菱形是被填充的。

图片 33

图 13: 一个结缘关系的事例

在图 13
中的关系建模中,一个Company类实例至少总有一个Department类实例。因为涉及是结合关系,当Company实例被移除/销毁时,Department实例也将自动地被移除/销毁。组合聚合的另一个重中之重职能是局地类只好与父类的实例相关(举例来说,大家例子中的Company类)。

反射关联
现在大家已经钻探了所有的关联类型。就像您可能注意到的,我们的所有例子已经呈现了四个差异类之间的涉嫌。可是,类也得以运用反射关联与它本身相关联。起始,那说不定没有意思,可是切记,类是抽象的。图
14 展现一个Employee类怎么样通过manager /
manages角色与它自身有关。当一个类关联到它本身时,那并不表示类的实例与它自己有关,而是类的一个实例与类的另一个实例相关。

图片 34

图 14:一个反光关联关系的实例

图 14
描绘的涉及表明一(Wissu)(Meadjohnson)个Employee实例可能是别的一个Employee实例的经营。不过,因为“manages”的关系角色有
0..*的多重性描述;一个雇员可能不受任何其他雇员管理。

可见性
在面向对象的宏图中,存在属性及操作可知性的号子。UML
识别四连串型的可知性:public,protected,private及package。

UML
规范并不必要性能及操作可知性必须出示在类图上,可是它要求为各种属性及操作定义可知性。为了在类图上的浮现可知性,放置可知性标志于属性或操作的名字以前。即便UML 指定四种可知性类型,然则实际的编程语言可能增添额外的可知性,或不支持UML 定义的可知性。表4展现了 UML 帮忙的可知性类型的不一致标志。

表 4:UML 协理的可知性类型的评释

标志 可见性类型
+ Public
# Protected
Private
~ Package

方今,让大家看一个类,以表达属性及操作的可知性类型。在图 15
中,所有的性能及操作都是public,除了 updateBalance 操作。updateBalance
操作是protected。

图片 35

图 15:一个 BankAccount 类表明它的属性及操作的可见性


回页首

UML 2 补充

既是我们早就覆盖了根基和高档大旨,大家将掩盖一些由UML 1.
x伸张的类图的新标志。

实例
当一个系统结构建模时,突显例子类实例有时候是立见成效的。为了那种组织建模,UML
2 提供 实例规范
元素,它显得在系统中应用例子(或具体)实例的值得注意的音信。

实例的标志和类一样,但是代表顶端区域中仅部分类名,它的名字是透过拼接的:

Instance Name : Class Name

比方来说:

Donald : Person

因为体现实例的目标是显得值得注意的或相关的音讯,没必要在您的模子中隐含全体实体性质及操作。相反地,仅仅展现感兴趣的性质及其值是完全适用的。如图16所讲述。

图片 36

图 16:Plane类的一个实例例子(只显示感兴趣的属性值)

唯独,仅仅突显一些实例而没有它们的关系不太实用;因而,UML 2
也允许在实体层的涉嫌/关联建模。绘制关联与一般的类关系的条条框框一样,除了在建模关联时有一个附加的渴求。附加的界定是,关联关系必须与类图的关系相平等,而且事关的角色名字也务必与类图相平等。它的一个事例呈现于图
17 中。在那个例子中,实例是图 6 中类图的例证实例。

图片 37

图 17:图 6 中用实例代替类的事例

图 17
有Flight类的二个实例,因为类图指出了在Plane类和Flight类之间的关联是
0或多。由此,大家的例证给出了多少个与NX0337 Plane实例相关的Flight实例。

角色
建模类的实例有时比期望的越来越详细。有时,你也许只是想要在一个较多的形似层次做类关系的模子。在那种境况下,你应该运用
角色
记号。角色记号类似于实例记号。为了建立类的角色模型,你画一个方格,并在里头放置类的角色名及类名,作为实体记号,不过在那状态你不可能加下划线。图
18 彰显一个由图 14 中图描述的雇员类扮演的角色实例。在图 18
中,我们得以认为,即便雇员类与它自己有关,关系真正是有关雇员之间扮演主管及团队成员的角色。

图片 38

图 18:一个类图显示图14中饰演差别角色的类

专注,你无法在纯粹类图中做类角色的建模,即使图
18显得你可以这么做。为了利用角色记号,你将会必要选择下边商量的内部结构记号。

其中的布局
UML 2
结构图的更管用的听从之一是新的内部结构记号。它同意你来得一个类或其它的一个分类器怎么样在其中整合。那在
UML 1. x
中是无法的,因为记号限制你只好展现一个类所负有的聚集关系。现在,在 UML
2 中,内部的构造记号让你更清楚地突显类的逐条部分怎么着有限支撑关系。

让我们看一个实例。在图 18
中我们有一个类图以表现一个Plane类如何由七个引擎和五个控制软件对象组成。从这么些图中省略的事物是显得关于飞机部件怎么样被装配的有些信息。从图
18
的图,你无法表达,是各类控制软件对象说了算三个引擎,依旧一个控制软件对象说了算多个引擎,而另一个决定一个发动机。

图片 39

图 19: 只显示对象之间关系的类图

绘制类的内在结构将会创新那种情景。开端时,你通过用二个区域画一个方格。最顶端的区域包涵类名字,而较低的区域包罗类的内部结构,突显在它们父类中承担不一样角色的部分类,角色中的每个部分类也关系到别的类。图
19 来得了Plane类的内部结构;注意内部结构如何澄清混乱性。

图片 40

图 20:Plane类的内部结构例子。

在图 20 中Plane有四个 ControlSoftware
对象,而且每个控制二个引擎。在图左侧上的
ControlSoftware(control1)控制引擎 1 和 2 。在图右侧的
ControlSoftware(control2)控制引擎 3 和 4 。


回页首

结论

起码存在七个了然类图的要紧理由。第二个是它显得系统分类器的静态结构;首个理由是图为UML描述的其它协会图提供了着力记号。开发者将会觉得类图是为他们专程建立的;可是其余的团伙成员将发现它们也是行得通的。业务分析师可以用类图,为系统的事体远景建模。正如我辈将会在本连串关于
UML 基础的篇章中看到的,其他的图 —
包含活动图,种类图和状态图——参考类图中的类建模和文档化。

至于“UML 基础”的本种类的末端的部件图。


回页首

脚注

1
delayFlight没有再次回到值,因为自身作出了设计决定,不要再次来到值。有某些可以争辨的是,延迟操作应该回到新的抵达时刻,而且,即使是那种气象,操作属性将显得为
delayFlight(numberOfMinutes : Minutes) : Date。

2恐怕看起来很想获得, BankAccount 类不知晓
OverdrawnAccountsReport
类。这些建模使报表类可以领略它们报告的业务类,可是工作类不明白它们正在被报告。那解开三个目的的耦合,并为此使系统变得更能适应变化。

3
软件包对于团队你的模子类是极大的,不过切记主要的一点是,你的类图应该是有关建模系统的不难交换的信息。在你的软件包有成百上千类的景况下,最好使用多少个宗旨类图,而不是仅仅发生一个大的类图。

4
要明了首要一点,当自身说“所有的那些成员”时,我只是意味着在现阶段图中的类将显示出来。显示一个有内容的软件包的图,不需求出示它的所有内容。它可以遵守一些章法,突显包括元素的子集,那几个规则就是不用所有的软件包分类器都是不可或缺的。

5 当画一个类图时,在 UML
规范中,全体要做的只是把类放入长方形的顶部区域,而你同理处理接口;但是,UML
规范认为,在这些区域放置“class”文本是可选的,倘诺类没有浮现,那么它应有被假若。