在底部区域中大家可以见到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
和 getArrivalTime。

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

flightDuration。在尾部区域中我们得以见见Flight类有五个操作:delayFlight
和 getArrival提姆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
描绘的关系表达一(Wissu)个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
描绘的关联说惠氏(Karicare)个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”文本是可选的,固然类没有显示,那么它应当被若是。