UML–类详解。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。

图片 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
Rose和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
中,我们得以看,即使雇员类与它们本身有关,关系真正是有关雇员之间扮演经理以及团体成员的角色。

图片 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”文本是可选的,如果类似没有显示,那么它应当被如。

 

admin

网站地图xml地图