澳门新萄京59533comUML–类详解。UML基础(转)

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

 

基础

基础

要先所涉嫌的,类图的目的是展示建模系统的品种。在大部之 UML
模型中这些品种包括:

一旦先所涉的,类图的目的是显示建模系统的档次。在大部分之 UML
模型中这些品种包括:

  • 接口

  • 数据类型

  • 组件

  • 接口

  • 数据类型

  • 组件

UML
为这些类别从了一个特意的名:“分类器”。通常地,你可把分类器当做类,但在技术上,分类器是更进一步广泛的术语,它要引用上面的另外三种植类型为好。

UML
为这些类别从了一个特意的名:“分类器”。通常地,你可管分类器当做类,但在技术上,分类器是尤为广大的术语,它还是引用上面的另外三种植档次也好。

类名

类名

好像的 UML 表示是一个加上方形,垂直地分成三单区,如图 1
所示。顶部区域显示类的名字。中间的区域列出类的习性。底部的区域列出类的操作。当在一个类图上写一个类元素时,你必要产生头的区域,下面的老二单区域是不过选取的(当图描述仅仅用于展示分类器间涉及之高层细节时,下面的少只区域是休必要的)。图
1 亮一个航路班机如何当 UML
类建模。正使我辈所能收看的,名字是 Flight,我们可当当中区域看到Flight类的3个属性:flightNumber,departureTime

flightDuration。在底部区域被我们得以看来Flight类有一定量只操作:delayFlight
和 getArrivalTime。

仿佛的 UML 表示是一个添加方形,垂直地分成三单区,如图 1
所示。顶部区域显示类的讳。中间的区域列出类的属性。底部的区域列出类的操作。当在一个类图上描绘一个类元素时,你不能不要来上的区域,下面的老二个区域是不过选的(当图描述仅仅用于展示分类器间涉及之高层细节时,下面的点滴独区域是免必要之)。图
1 显一个航程班机如何当 UML 类建模。正而我辈所能收看的,名字是
Flight,我们可以在中等区域看到Flight类的3只属性:flightNumber,departureTime

flightDuration。在脚区域受到我们好观看Flight类有个别个操作:delayFlight
和 getArrivalTime。

澳门新萄京59533com 1

澳门新萄京59533com 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。

澳门新萄京59533com 3

澳门新萄京59533com 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当一个操作发生参数时,参数为在操作的括号内;每个参数都使这样的格式:“参数名为:参数类型”。

澳门新萄京59533com 5

澳门新萄京59533com 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
类继承而来。

澳门新萄京59533com 7

澳门新萄京59533com 8

祈求 4: 继承通过对超类的一律长闭合的,单箭头的实线表示。

图 4: 继承通过对超类的同等修闭合的,单箭头的实线表示。

当图 4 中,继承关系由每个超类的独门的丝画生,这是当IBM Rational
Rose和IBM Rational
XDE中应用的法子。然而,有雷同栽叫做 树标记的备选方式可画出继承关系。当在个别单或重复多子类时,如图
4 中所著,除了继续线象树枝一样混在齐他,你得运用树形记号。图 5
是重绘的以及图 4 一样的延续,但是这次用了树形记号。

在图 4 中,继承关系由每个超类的单身的线画有,这是在IBM Rational
Rose和IBM Rational XDE中使的主意。然而,有同栽叫做
树标记的预备方式可画出继承关系。当在个别独或重复多子类时,如图 4
中所显示,除了延续线象树枝一样混在同步他,你得下树形记号。图 5
是重绘的和图 4 一样的连续,但是这次用了树形记号。

澳门新萄京59533com 9

澳门新萄京59533com 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类之间的一个正式项目的关联。

澳门新萄京59533com 11

澳门新萄京59533com 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
显示仅为关系的透支财务报告的一个实例。

澳门新萄京59533com 13

澳门新萄京59533com 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)。

澳门新萄京59533com 15

澳门新萄京59533com 16

祈求 8:在软件包的长方形内展示软件包成员的软件包元素例子

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

澳门新萄京59533com 17

澳门新萄京59533com 18

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

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

询问基础要

询问基础要

在 UML 2
中,了解类图的底子更为重要。这是为类图为具的另组织图供基本的构建块。如组件或对象图(仅仅是推了数例子)。

当 UML 2
中,了解类图的底子更为重要。这是坐类图为具有的别样组织图供基本的构建块。如组件或对象图(仅仅是选了数例子)。



回页首

回页首

越基础

越基础

暨是结束,我早已介绍了类图的底蕴,但是要继续朝着生念!在下面的组成部分受到,我以会见指引您及您晤面以的类图的重要之面。这些概括UML
2 专业中的接口,其它的老三栽涉类型,可见性和其他补给。

顶者结束,我曾介绍了类图的底蕴,但是要继续朝生读!在底下的有的被,我拿会带而到你见面采取的类图的还要的方。这些连UML
2 标准着之接口,其它的老三种植关系类型,可见性和任何补偿。

接口 
每当本文的前,我提议你为接近来考虑分类器。事实上,分类器是一个更是相似的概念,它包括数据类型和接口。

接口
每当本文的眼前,我建议乃以类来考虑分类器。事实上,分类器是一个尤其相似的概念,它概括数据类型和接口。

至于何时、以及怎样快速地在系统结构图被应用数据类型和接口的完全讨论,不在本文的座谈范围之内。既然这样,我何以要在此处提及数据类型和接口也?你也许想以结构图上模拟这些分类器类型,在这时节,使用科学的标记来表示,或者至少知道这些分类器类型是关键之。不得法地绘制这些分类器,很有或将使您的布局图读者感到混乱,以后的系将非克适应需求。

关于何时、以及哪些迅速地以系统结构图备受使用数据类型和接口的整体讨论,不以本文的讨论范围以内。既然这样,我胡而以此提及数据类型和接口也?你恐怕想当结构图上效仿这些分类器类型,在这时刻,使用是的号来代表,或者至少知道这些分类器类型是非同小可的。不科学地绘制这些分类器,很有或拿如你的组织图读者感觉混乱,以后的网以不可知适应需求。

一个近似和一个接口不同:一个近乎可生出她相的真正实例,然而一个接口必须至少有一个类似来促成其。在
UML 2
中,一个接口被当是相近建筑模元素的特殊化。因此,接口就象类那样绘制,但是长方形的顶部区域为产生文件“interface”,如图
10
所显示。 5

一个类和一个接口不同:一个好像可来她相的实事求是实例,然而一个接口必须至少有一个像样来兑现其。在
UML 2
中,一个接口被当是看似建筑模元素的特殊化。因此,接口就象类那样绘制,但是长方形的顶部区域为发出文件“interface”,如图
10
所显示。5

澳门新萄京59533com 19

澳门新萄京59533com 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 显示一个航空工业实例的干类。

澳门新萄京59533com 21

澳门新萄京59533com 22

图 11:增加关联类 MileageCredit

图 11:增加关联类 MileageCredit

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

在图 11 中显得的类图中,在Flight类和 FrequentFlyer
类之间的涉嫌,产生了名叫
MileageCredit的涉及类。这意味当Flight类的一个实例关联到 FrequentFlyer
类的一个实例时,将会生 MileageCredit 类的一个实例。

聚合 
聚是同种特别类型的涉,用于描述“总体到片”的干。在中心的集纳关系遇, 部分类 的生命周期独立为 整体类 的生命周期。

聚合
集结是千篇一律栽专门类型的涉嫌,用于描述“总体到有些”的关联。在着力的集关系面临,
部分类 的生命周期独立为 整体类 的生命周期。

举例来说,我们可设想, 是一个完整实体,而 车轮 轮胎是整治部车之如出一辙有的。轮胎可以交待及车时的前几乎单礼拜给打造,并停于仓库被。在这个实例中,Wheel类实例清楚地单独地Car类实例而存在。然而,有些情况下, 部分 类的生命周期并  独立于 整体 类的生命周期

这叫做合成聚合。举例来说,考虑公司跟部门的涉。 信用社及机关 都建模成类,在商店是前,部门非可知存。这里Department类的实例依赖让Company类的实例而留存。

让我们再进一步探究基本凑和组合聚合。

主导凑 
产生成团关系之关联指出,某个类是另外有类的同样有的。在一个会师关系中,子类实例可以比较父类存在更丰富之时日。为了展现一个聚集关系,你打一长由父类到片近似的实线,并在父类的涉嫌末端画一个非填充棱形。图
12 显示车和轮胎里面的汇关系之例子。

澳门新萄京59533com 23

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

重组聚合 
组合聚合关系是汇聚关系的其余一样种形式,但是子类实例的生命周期依赖让父类实例的生命周期。在祈求13饱受,显示了Company类和Department类之间的做关系,注意组合关系要聚合关系一样绘制,不过这次菱形是受填的。

澳门新萄京59533com 24

图 13: 一个组合关系之事例

每当图 13
中之关联建模中,一个Company类实例至少总起一个Department类实例。因为涉及是做关系,当Company实例被移除/销毁时,Department实例也用自行地叫移除/销毁。组合聚合的其他一个关键作用是有类似只能与父类的实例相关(举例来说,我们例子中之Company类)。

映关联 
现在我们都讨论了颇具的涉类型。就假设你也许注意到之,我们的所有例子已经展示了有限独无同类中的关联。然而,类为足以以反射关联和它们自己相关联。起先,这也许没有意义,但是切记,类是空虚的。图
14 显示一个Employee类如何通过manager /
manages角色与她自身有关。当一个好像涉到其本身时,这并无意味着类的实例与她自身有关,而是类似的一个实例与类似的别样一个实例相关。

澳门新萄京59533com 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。

澳门新萄京59533com 26

图 15:一个 BankAccount 类说明它的性能与操作的可见性


回页首

UML
2 补充

既我们曾经罩了根基与高级主题,我们以掩盖有由于UML 1.
x多的类图的初标志。

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

实例的记和好像一样,但是代表顶端区域被单单有的类名,它的讳是经拼接的:

Instance Name : Class Name

比喻来说:

Donald : Person

因为展示实例的目的是显得值得留意的还是系的消息,没必要当你的范中含有全体实体性质和操作。相反地,仅仅显示感兴趣之性与其值是截然适用的。如图16所讲述。

澳门新萄京59533com 27

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

但是,仅仅呈现有些实例而没有她的关联匪太实用;因此,UML 2
啊允许在实体层的涉嫌/关联建模。绘制关联和一般的近乎涉之条条框框一样,除了在建模关联时有一个叠加的渴求。附加的克是,关联关系必须同类图的关联相互平等,而且关乎的角色名呢得和类图相平等。它的一个例子显示为图
17 中。在是事例中,实例是图 6 中类图的例子实例。

澳门新萄京59533com 28

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

图 17
有Flight类的次只实例,因为类图指出了以Plane类和Flight类之间的关联是 0或多。因此,我们的例子让来了点儿个及NX0337
Plane实例相关的Flight实例。

角色 
修建模类的实例有时比较期望的越来越详细。有时,你也许只是想要于一个较多的貌似层次做类关系之范。在这种景象下,你当使用 角色 记号。角色记号类似于实例记号。为了成立类似的角色模型,你作画一个方格,并以里头放置类的角色名及类名,作为实体记号,但是在当时场面而莫可知加下划线。图
18 显示一个出于图 14 中图描述的雇员类扮演的角色实例。在图 18
中,我们可以认为,即使雇员类与它自身有关,关系真正是有关雇员之间扮演经理以及团伙成员的角色。

澳门新萄京59533com 29

图 18:一个类图显示图14吃串不同角色的类似

只顾,你切莫可知于纯类图中做类角色的建模,即使图
18显得你得这么做。为了以角色记号,你用会待采用下讨论的内部结构记号。

里的构造 
UML 2
结构图的更有效的效力之一是初的内部结构记号。它同意而出示一个像样还是另外的一个分类器如何当中间整合。这在
UML 1. x
中是勿可能的,因为记号限制而不得不显示一个好像所负有的聚合关系。现在,在 UML
2 中,内部的构造记号让您再度知地出示类的逐一部分如何保障关系。

叫咱看一个实例。在图 18
中我们发出一个类图以展现一个Plane类如何由四单引擎和有限只控制软件对象成。从夫图中省略的事物是亮关于飞机部件如何让配的局部信息。从图
18
的觊觎,你无法说明,是每个控制软件对象说了算两只引擎,还是一个控制软件对象说了算三独引擎,而另一个操纵一个引擎。

澳门新萄京59533com 30

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

画画制类的内在结构以会改进这种状态。开始时,你通过用二单区域画一个方格。最顶端的区域包含类名字,而于逊色之区域包含类的内部结构,显示在它父类中承担不同角色的有的类,角色中的每个有类为论及及任何类。图
19 亮了Plane类的内部结构;注意内部结构如何澄清混乱性。

澳门新萄京59533com 31

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

每当图 20 中Plane有点儿只
ControlSoftware 对象,而且每个控制次独引擎。在图左上之
ControlSoftware(control1)控制引擎 1 和 2 。在觊觎右边的
ControlSoftware(control2)控制引擎 3 和 4 。 

比方来说,我们得设想, 是一个完好无损实体,而 车轮
轮胎是整部车之等同片段。轮胎可当安排及车时的前头几个周末为制作,并放置于仓库中。在这实例中,Wheel类实例清楚地独自地Car类实例而留存。然而,有些情况下,
部分 类的生命周期并 独立于 整体 类的生命周期 —
这叫合成聚合。举例来说,考虑企业及机构的涉。 信用社以及单位
都建模成类,在店堂存在前,部门非克存。这里Department类的实例依赖让Company类的实例而存在。

被我们重进一步探讨基本凑和构成聚合。

主干凑
有成团关系之涉及指出,某个类是另外有类的等同有些。在一个聚关系被,子类实例可以较父类存在重新丰富之时。为了呈现一个凑关系,你打一漫漫由父类到一些好像的实线,并当父类的涉及末端画一个请勿填充棱形。图
12 显示车和轮胎里面的汇关系之事例。

澳门新萄京59533com 32

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

成聚合
结缘聚合关系是聚众关系的任何一样种植形式,但是子类实例的生命周期依赖让父类实例的生命周期。在图13蒙受,显示了Company类和Department类之间的结关系,注意组合关系使聚合关系一致绘制,不过这次菱形是深受填的。

澳门新萄京59533com 33

图 13: 一个成关系的例子

每当图 13
中的关系建模中,一个Company类实例至少总有一个Department类实例。因为关乎是成关系,当Company实例被移除/销毁时,Department实例也拿自行地给移除/销毁。组合聚合的另外一个重中之重功能是部分近似只能和父类的实例相关(举例来说,我们例子中的Company类)。

照关联
如今我们曾经讨论了富有的涉嫌类型。就如你或许注意到的,我们的具备例子已经亮了区区单不同类之间的涉。然而,类为得使反射关联和她自身相关联。起先,这可能无意思,但是切记,类是空洞的。图
14 显示一个Employee类如何通过manager /
manages角色与它们本身有关。当一个类似涉到它自身时,这并无代表类的实例与她自身有关,而是切近的一个实例与类似的其余一个实例相关。

澳门新萄京59533com 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。

澳门新萄京59533com 35

图 15:一个 BankAccount 类说明她的习性与操作的可见性


回页首

UML 2 补充

既然如此我们已经盖了基础与高档主题,我们用蒙有出于UML 1.
x长的类图的新标志。

实例
当一个系统结构建模时,显示例子类实例有时候是中的。为了这种组织建模,UML
2 供 实例规范
元素,它显示在系遭到采取例子(或具体)实例的值得注意的音信。

实例的记号和类似一样,但是代表顶端区域被单独有的类名,它的名是通过拼接的:

Instance Name : Class Name

比方来说:

Donald : Person

为展示实例的目的是亮值得注意的要有关的音,没必要当公的模子中带有全体实体性质和操作。相反地,仅仅显示感兴趣之特性和其值是了适用的。如图16所描述。

澳门新萄京59533com 36

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

而是,仅仅呈现一些实例而没有其的涉及不太实用;因此,UML 2
乎同意以实体层的关联/关联建模。绘制关联和一般的类似涉之规则平等,除了在建模关联时有一个叠加的求。附加的限制是,关联关系必须和类图的涉及相互平等,而且关系的角色名吧须与类图相平等。它的一个例证显示为图
17 中。在是事例中,实例是图 6 中类图的例证实例。

澳门新萄京59533com 37

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

图 17
有Flight类的次只实例,因为类图指出了当Plane类和Flight类之间的涉嫌是
0或多。因此,我们的例子让来了少数独及NX0337 Plane实例相关的Flight实例。

角色
兴修模类的实例有时比较要之尤其详细。有时,你可能仅想使以一个于多之一般层次做类关系的模型。在这种情况下,你应当利用
角色
记号。角色记号类似于实例记号。为了树立类似的角色模型,你描一个方格,并在中间放置类的角色名及类名,作为实体记号,但是于当下情况你不能够加下划线。图
18 显示一个由于图 14 中图描述的雇员类扮演的角色实例。在图 18
中,我们得以认为,即使雇员类与她自身有关,关系真正是关于雇员之间扮演经理和团伙成员的角色。

澳门新萄京59533com 38

图 18:一个类图显示图14受到串不同角色的近乎

注意,你不能够当纯类图中做类角色的建模,即使图
18亮你可如此做。为了使角色记号,你以会见待用下讨论的内部结构记号。

其中的组织
UML 2
结构图的再度有效之效益之一是初的内部结构记号。它同意你显得一个类还是另外的一个分类器如何在里边做。这在
UML 1. x
中是勿可能的,因为记号限制而只能显示一个近似所所有的联谊关系。现在,在 UML
2 中,内部的组织记号让您又明白地出示类的逐一部分如何保持关系。

于咱们看一个实例。在图 18
中我们发出一个类图以展现一个Plane类如何由四个引擎以及个别单控制软件对象成。从之图中省略的物是显得关于飞机部件如何给配的局部音。从图
18
的希冀,你无法说明,是每个控制软件对象说了算两单引擎,还是一个控制软件对象说了算三只引擎,而其他一个操一个发动机。

澳门新萄京59533com 39

图 19: 只显示对象之间涉及的类图

绘画制类的内在结构以见面改善这种状态。开始时,你通过用二独区域画一个方格。最上端的区域包含类名字,而比逊色的区域包含类的内部结构,显示在她父类中荷不同角色的一些类,角色被之每个片类为关乎及另外类。图
19 展示了Plane类的内部结构;注意内部结构如何澄清混乱性。

澳门新萄京59533com 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”文本是可选的,如果类似没有显示,那么它应该叫设。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注