顶部区域呈现类的名字,类图的目的是突显建模系统的门类

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提姆(Tim)e。

类的 UML 表示是一个长方形,垂直地分为四个区,如图 1
所示。顶部区域突显类的名字。中间的区域列出类的性能。底部的区域列出类的操作。当在一个类图上画一个类元素时,你不可以不要有下边的区域,上面的二个区域是可挑选的(当图描述仅仅用于浮现分类器间涉及的高层细节时,上面的多个区域是不必要的)。图
1 展现一个航道班机怎样作为 UML 类建模。正如我们所能见到的,名字是
Flight,大家得以在中等区域来看Flight类的3个特性:flightNumber,departure提姆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
罗斯(Rose)和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
描绘的涉及说美赞臣个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
描绘的关联说飞鹤个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
中,大家可以认为,就算雇员类与它自身有关,关系真正是关于雇员之间扮演CEO及组织成员的角色。

图片 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”文本是可选的,要是类没有显得,那么它应有被假诺。

 

相关文章