顶部区域突显类的名字,在底部区域中大家得以观望Flight类有八个操作365体育网投

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

 

基础

基础

如先前所波及的,类图的目标是展现建模系统的种类。在大部的 UML
模型中这么些项目包含:

如先前所涉嫌的,类图的目标是体现建模系统的品种。在多数的 UML
模型中这么些项目包涵:

  • 接口

  • 数据类型

  • 组件

  • 接口

  • 数据类型

  • 组件

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

UML
为那个项目起了一个特意的名字:“分类器”。常常地,你可以把分类器当做类,但在技术上,分类器是尤其宽广的术语,它照旧引用上边的其他三种类型为好。

类名

类名

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

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

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

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

365体育网投 1

365体育网投 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。

365体育网投 3

365体育网投 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当一个操作有参数时,参数被放在操作的括号内;每个参数都施用那样的格式:“参数名:参数类型”。

365体育网投 5

365体育网投 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
类继承而来。

365体育网投 7

365体育网投 8

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

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

在图 4 中,继承关系由每个超类的独自的线画出,这是在IBM Rational
罗丝和IBM Rational
XDE中运用的法门。但是,有一种名叫 树标记的备选情势可以画出继承关系。当存在五个或越来越多子类时,如图
4 中所示,除了继续线象树枝一样混在一齐外,你可以行使树形记号。图 5
是重绘的与图 4 一样的继承,不过本次运用了树形记号。

在图 4 中,继承关系由每个超类的独立的线画出,那是在IBM Rational
罗丝和IBM Rational XDE中行使的方法。然则,有一种叫做
树标记的预备情势能够画出继承关系。当存在八个或更多子类时,如图 4
中所示,除了继续线象树枝一样混在协同外,你可以行使树形记号。图 5
是重绘的与图 4 一样的一而再,然而本次运用了树形记号。

365体育网投 9

365体育网投 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类之间的一个专业项目标涉嫌。

365体育网投 11

365体育网投 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
突显单向关系的透支财务报告的一个实例。

365体育网投 13

365体育网投 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)。

365体育网投 15

365体育网投 16

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

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

365体育网投 17

365体育网投 18

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

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

打探基础紧要性

询问基础紧要性

在 UML 2
中,精通类图的基础更为主要。那是因为类图为持有的任何社团图提供基本的构建块。如组件或对象图(仅仅是举了些例子)。

在 UML 2
中,了解类图的底蕴更为紧要。那是因为类图为具备的任何社团图提供基本的构建块。如组件或对象图(仅仅是举了些例子)。



回页首

回页首

超越基础

超过基础

到此截至,我曾经介绍了类图的根底,不过请继续往下读!在上面的一些中,我将会引导您到您会采纳的类图的更珍惜的上边。这一个概括UML
2 专业中的接口,其余的三种关系类型,可知性和其余补给。

到此截至,我曾经介绍了类图的基本功,不过请继续往下读!在上面的有些中,我将会指导您到您会选取的类图的更保养的地点。那几个概括UML
2 正式中的接口,别的的两种关系类型,可知性和其余补给。

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

接口
在本文的前头,我提出你以类来设想分类器。事实上,分类器是一个一发相似的概念,它概括数据类型和接口。

至于哪一天、以及哪些快捷地在系统结构图中使用数据类型和接口的完好探究,不在本文的钻探范围之内。既然那样,我何以要在此间提及数据类型和接口呢?你恐怕想在结构图上模仿这一个分类器类型,在那么些时候,使用正确的符号来代表,或者至少知道那个分类器类型是根本的。不正确地绘制那些分类器,很有可能将使您的布局图读者觉得混乱,未来的系统将不可以适应必要。

有关曾几何时、以及如何快速地在系统结构图中应用数据类型和接口的总体研讨,不在本文的议论范围以内。既然那样,我怎么要在那里提及数据类型和接口呢?你恐怕想在结构图上模拟那一个分类器类型,在这些时候,使用科学的号子来代表,或者至少知道那一个分类器类型是根本的。不得法地绘制这个分类器,很有可能将使您的结构图读者感到混乱,将来的系统将不可能适应须要。

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

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

365体育网投 19

365体育网投 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 展现一个航空工业实例的涉嫌类。

365体育网投 21

365体育网投 22

图 11:伸张关联类 MileageCredit

图 11:扩展关联类 MileageCredit

在图 11 中突显的类图中,在Flight类和 FrequentFlyer
类之间的涉嫌,发生了名叫
MileageCredit的涉嫌类。那代表当Flight类的一个实例关联到 FrequentFlyer
类的一个实例时,将会时有暴发 MileageCredit 类的一个实例。

在图 11 中显得的类图中,在Flight类和 FrequentFlyer
类之间的关系,爆发了名为
MileageCredit的关系类。这意味当Flight类的一个实例关联到 FrequentFlyer
类的一个实例时,将会爆发 MileageCredit 类的一个实例。

聚合 
汇聚是一种尤其类型的涉及,用于描述“总体到有些”的关联。在主导的联谊关系中, 部分类 的生命周期独立于 整体类 的生命周期。

聚合
汇集是一种专门类型的涉及,用于描述“总体到部分”的涉及。在着力的会聚关系中,
部分类 的生命周期独立于 整体类 的生命周期。

举例来说,大家可以设想, 是一个整机实体,而 车轮 轮胎是整辆车的一部分。轮胎可以在安放到车时的前多少个礼拜被打造,并放置于仓库中。在这几个实例中,Wheel类实例清楚地单独地Car类实例而留存。不过,有些情状下, 部分 类的生命周期并  独立于 整体 类的生命周期

那称为合成聚合。举例来说,考虑集团与单位的关系。 店家和机关 都建模成类,在合营社存在从前,部门不能存在。那里Department类的实例看重于Company类的实例而存在。

让我们更进一步追究基本聚合和烧结聚合。

主题聚合 
有成团关系的关联提议,某个类是其余某个类的一部分。在一个凑合关系中,子类实例可以比父类存在更长的日子。为了突显一个碰面关系,你画一条从父类到有些类的实线,并在父类的关系末端画一个未填充棱形。图
12 突显车和轮胎间的集结关系的事例。

365体育网投 23

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

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

365体育网投 24

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

在图 13
中的关系建模中,一个Company类实例至少总有一个Department类实例。因为涉及是结合关系,当Company实例被移除/销毁时,Department实例也将机关地被移除/销毁。组合聚合的另一个至关首要作用是有的类只可以与父类的实例相关(举例来说,大家例子中的Company类)。

反射关联 
今昔咱们早就探讨了拥有的涉及类型。就像是你或许注意到的,我们的保有例子已经显得了多个不相同类之间的关系。但是,类也可以采纳反射关联与它自己相关联。开端,那恐怕没有意义,可是切记,类是空虚的。图
14 突显一个Employee类怎么着通过manager /
manages角色与它自己有关。当一个类关联到它自身时,那并不意味着类的实例与它本身有关,而是类的一个实例与类的另一个实例相关。

365体育网投 25

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

图 14
描绘的涉嫌说喜宝(Beingmate)个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。

365体育网投 26

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


回页首

UML
2 补充

既然如此我们曾经覆盖了根基和高档主旨,大家将掩盖一些由UML 1.
x增添的类图的新标志。

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

实例的标志和类一样,不过代表顶端区域中仅有的类名,它的名字是通过拼接的:

Instance Name : Class Name

举例来说:

Donald : Person

因为显示实例的目标是显示值得注意的或相关的新闻,没必要在您的模子中涵盖全部实体性质及操作。相反地,仅仅突显感兴趣的性能及其值是完全适用的。如图16所描述。

365体育网投 27

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

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

365体育网投 28

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

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

角色 
建模类的实例有时比期望的一发详细。有时,你可能独自想要在一个较多的貌似层次做类关系的模子。在那种状态下,你应当使用 角色 记号。角色记号类似于实例记号。为了创立类的角色模型,你画一个方格,并在中间放置类的角色名及类名,作为实体记号,不过在那情形你无法加下划线。图
18 呈现一个由图 14 中图描述的雇员类扮演的角色实例。在图 18
中,我们得以认为,即使雇员类与它自身有关,关系实在是关于雇员之间扮演老总及团队成员的角色。

365体育网投 29

图 18:一个类图呈现图14中饰演分裂角色的类

在意,你不可以在纯粹类图中做类角色的建模,尽管图
18体现你可以这么做。为了利用角色记号,你将会需要采用上边钻探的内部结构记号。

其中的布局 
UML 2
结构图的更实用的效益之一是新的内部结构记号。它同意你来得一个类或别的的一个分类器如何在其中整合。那在
UML 1. x
中是无法的,因为记号限制你只好显示一个类所持有的集合关系。现在,在 UML
2 中,内部的构造记号让你更清楚地显示类的相继部分如何有限支撑关系。

让我们看一个实例。在图 18
中大家有一个类图以表现一个Plane类如何由三个引擎和三个控制软件对象组成。从这么些图中省略的事物是显得关于飞机部件如何被装配的一部分新闻。从图
18
的图,你不可以表达,是各类控制软件对象说了算四个引擎,如故一个控制软件对象说了算多少个引擎,而另一个说了算一个发动机。

365体育网投 30

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

绘制类的内在结构将会立异那种意况。初始时,你通过用二个区域画一个方格。最顶端的区域包罗类名字,而较低的区域包括类的内部结构,突显在它们父类中担当分化角色的片段类,角色中的每个部分类也提到到此外类。图
19 展现了Plane类的内部结构;注意内部结构怎么着澄清混乱性。

365体育网投 31

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

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

举例来说,大家可以设想, 是一个完整实体,而 车轮
轮胎是整辆车的一片段。轮胎可以在安置到车时的前几个礼拜被打造,并放置于仓库中。在这些实例中,Wheel类实例清楚地单独地Car类实例而留存。然则,有些情形下,
部分 类的生命周期并 独立于 整体 类的生命周期 —
那叫做合成聚合。举例来说,考虑公司与机构的关联。 供销社和部门
都建模成类,在合营社存在在此以前,部门无法存在。那里Department类的实例依赖于Company类的实例而留存。

让我们更进一步探索基本聚合和烧结聚合。

着力聚合
有成团关系的涉嫌提议,某个类是其余某个类的一局地。在一个聚众关系中,子类实例可以比父类存在更长的流年。为了突显一个集合关系,你画一条从父类到一些类的实线,并在父类的涉嫌末端画一个未填充棱形。图
12 呈现车和轮胎间的集合关系的事例。

365体育网投 32

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

重组聚合
构成聚合关系是会聚关系的另一种形式,可是子类实例的生命周期体贴于父类实例的生命周期。在图13中,突显了Company类和Department类之间的组合关系,注意组合关系如聚合关系一样绘制,可是这一次菱形是被填充的。

365体育网投 33

图 13: 一个组成关系的事例

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

反射关联
前几天大家早已探究了有着的关系类型。就好像您恐怕注意到的,咱们的有所例子已经体现了四个不相同类之间的关联。可是,类也可以应用反射关联与它自身相关联。初始,那恐怕没有意思,不过切记,类是空虚的。图
14 突显一个Employee类怎样通过manager /
manages角色与它自己有关。当一个类关联到它自身时,那并不代表类的实例与它本身有关,而是类的一个实例与类的另一个实例相关。

365体育网投 34

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

图 14
描绘的关系说爱他美(Aptamil)个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。

365体育网投 35

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


回页首

UML 2 补充

既然大家早已覆盖了基础和高级大旨,大家将覆盖一些由UML 1.
x日增的类图的新标志。

实例
当一个系统结构建模时,突显例子类实例有时候是行得通的。为了那种结构建模,UML
2 提供 实例规范
元素,它显得在系统中选择例子(或具体)实例的值得注意的音讯。

实例的符号和类一样,可是代表顶端区域中仅部分类名,它的名字是通过拼接的:

Instance Name : Class Name

举例来说:

Donald : Person

因为展现实例的目的是突显值得注意的或相关的新闻,没须要在您的模子中涵盖全部实体性质及操作。相反地,仅仅展现感兴趣的习性及其值是全然适用的。如图16所讲述。

365体育网投 36

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

可是,仅仅显示一些实例而从不它们的涉嫌不太实用;因而,UML 2
也允许在实体层的涉及/关联建模。绘制关联与一般的类关系的平整一样,除了在建模关联时有一个叠加的渴求。附加的限制是,关联关系必须与类图的涉及相平等,而且涉及的角色名字也非得与类图相平等。它的一个例证展现于图
17 中。在那些事例中,实例是图 6 中类图的事例实例。

365体育网投 37

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

图 17
有Flight类的二个实例,因为类图提议了在Plane类和Flight类之间的关系是
0或多。由此,我们的例子给出了多个与NX0337 Plane实例相关的Flight实例。

角色
建模类的实例有时比期望的愈来愈详细。有时,你可能仅仅想要在一个较多的一般层次做类关系的模子。在这种状态下,你应有使用
角色
记号。角色记号类似于实例记号。为了树立类的角色模型,你画一个方格,并在里面放置类的角色名及类名,作为实体记号,可是在本场合你不能加下划线。图
18 显示一个由图 14 中图描述的雇员类扮演的角色实例。在图 18
中,大家得以认为,即使雇员类与它自身有关,关系实在是关于雇员之间扮演首席营业官及团伙成员的角色。

365体育网投 38

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

只顾,你无法在纯粹类图中做类角色的建模,即便图
18来得你可以如此做。为了利用角色记号,你将会要求使用下边商讨的内部结构记号。

其间的构造
UML 2
结构图的更管用的功用之一是新的内部结构记号。它同意你出示一个类或此外的一个分类器怎么样在中间整合。那在
UML 1. x
中是不容许的,因为记号限制你不得不突显一个类所兼有的聚合关系。现在,在 UML
2 中,内部的布局记号让您更明了地浮现类的依次部分怎样保持关系。

让大家看一个实例。在图 18
中大家有一个类图以呈现一个Plane类怎么样由两个引擎和八个控制软件对象组成。从那一个图中省略的东西是浮现关于飞机部件如何被装配的有的音信。从图
18
的图,你不可以表明,是每个控制软件对象说了算三个引擎,仍然一个控制软件对象说了算两个引擎,而另一个控制一个引擎。

365体育网投 39

图 19: 只展现对象之间关系的类图

绘制类的内在结构将会创新那种气象。开端时,你通过用二个区域画一个方格。最上边的区域包涵类名字,而较低的区域包涵类的内部结构,突显在它们父类中承受不一致角色的有的类,角色中的每个部分类也关乎到任何类。图
19 浮现了Plane类的内部结构;注意内部结构如何澄清混乱性。

365体育网投 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”文本是可选的,若是类没有展现,那么它应该被假诺。

 

相关文章