类图的目的是显示建模系统的类别。在底层区域受到我们好见见Flight类有少数个操作。

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: 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。

希冀 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当一个操作发生参数时,参数为在操作的括号内;每个参数都采用这样的格式:“参数名:参数类型”。

图 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
类继承而来。

希冀 4: 继承通过对超类的如出一辙长条闭合的,单箭头的实线表示。

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

于图 4 中,继承关系由每个超类的独门的线画出,这是于IBM Rational
Rose和IBM Rational
XDE中动用的艺术。然而,有同样种叫做 树标记的备选方式可画出继承关系。当在个别只或又多子类时,如图
4 中所出示,除了继续线象树枝一样混在并他,你可利用树形记号。图 5
是重绘的及图 4 一样的连续,但是这次运用了树形记号。

每当图 4 中,继承关系由每个超类的单身的丝画有,这是在IBM Rational
Rose和IBM Rational XDE中采取的主意。然而,有平等栽名叫
树标记的备方式可以画出继承关系。当有个别单或再次多子类时,如图 4
中所著,除了继续线象树枝一样混在共同他,你可以应用树形记号。图 5
是重绘的与图 4 一样的接续,但是这次使用了树形记号。

希冀 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类之间的一个正式项目的关系。

希冀 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
显示就为关系的透支财务报告的一个实例。

祈求 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)。

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

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

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

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

打听基础要

打探基础要

以 UML 2
中,了解类图的根底更为重要。这是以类图为保有的别组织图供基本的构建块。如组件或对象图(仅仅是推了把例子)。

于 UML 2
中,了解类图的根基更为重要。这是盖类图为具有的另外组织图供基本的构建块。如组件或对象图(仅仅是选举了几例子)。



回页首

回页首

超基础

跳基础

暨之结束,我已介绍了类图的底蕴,但是要继续向生读!在底下的有些被,我拿会晤引导你及您晤面使用的类图的还关键之端。这些包括UML
2 正规中之接口,其它的老三栽涉类型,可见性和其余补给。

至这结束,我已经介绍了类图的根基,但是要继续于下读!在脚的片被,我拿会指引您及您晤面使的类图的重新重要之方面。这些概括UML
2 正式中之接口,其它的老三种植关系类型,可见性和外补偿。

接口 
当本文的面前,我提议您因近乎来设想分类器。事实上,分类器是一个越相似的概念,它包括数据类型和接口。

接口
每当本文的面前,我建议您坐看似来考虑分类器。事实上,分类器是一个越来越相似的定义,它概括数据类型和接口。

至于何时、以及如何快速地于系统结构图中利用数据类型和接口的圆讨论,不在本文的讨论范围里边。既然这样,我干吗而以此间提及数据类型和接口也?你可能想以结构图上效仿这些分类器类型,在这个时节,使用科学的记号来表示,或者至少知道这些分类器类型是重中之重的。不科学地绘制这些分类器,很有或用设您的构造图读者觉得混乱,以后的网将不克适应需求。

关于何时、以及哪迅速地以系统结构图备受使数据类型和接口的整体讨论,不以本文的座谈范围以内。既然这样,我何以要在此处提及数据类型和接口也?你恐怕想在结构图上套这些分类器类型,在这时刻,使用正确的符号来代表,或者至少知道这些分类器类型是重点之。不正确地绘制这些分类器,很有或拿使您的布局图读者感觉混乱,以后的系将非可知适应需求。

一个看似及一个接口不同:一个像样可发它造型的真正实例,然而一个接口必须至少发生一个接近来实现其。在
UML 2
中,一个接口被当是接近建筑模元素的特殊化。因此,接口就象类那样绘制,但是长方形的顶部区域啊闹文件“interface”,如图
10
所著。 5

一个看似及一个接口不同:一个像样可以产生它造型的真实例,然而一个接口必须至少发生一个类似来兑现其。在
UML 2
中,一个接口被认为是看似建筑模元素的特殊化。因此,接口就象类那样绘制,但是长方形的顶部区域也发生文件“interface”,如图
10
所出示。5

图 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 显示一个航空工业实例的关系类。

图 11:增加关联类 MileageCredit

图 11:增加关联类 MileageCredit

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

于图 11 中显得的类图中,在Flight类和 FrequentFlyer
类之间的关系,产生了号称
MileageCredit的涉类。这意味当Flight类的一个实例关联到 FrequentFlyer
类的一个实例时,将会见产生 MileageCredit 类的一个实例。

聚合 
汇聚是相同种特别类型的涉嫌,用于描述“总体到部分”的关联。在着力的集聚关系着, 部分类 的生命周期独立为 整体类 的生命周期。

聚合
会合是平等种植专门类型的关联,用于描述“总体到有”的涉。在基本的成团关系蒙,
部分类 的生命周期独立为 整体类 的生命周期。

举例来说来说,我们得想像, 是一个整实体,而 车轮 轮胎是整治辆车的同等组成部分。轮胎可在安置到车时的先头几只星期天为做,并放置于仓库中。在是实例中,Wheel类实例清楚地单独地Car类实例而有。然而,有些情况下, 部分 类的生命周期并  独立于 整体 类的生命周期

当时名合成聚合。举例来说,考虑企业和机关的干。 公司与机构 都建模成类,在合作社是前,部门未可知有。这里Department类的实例依赖让Company类的实例而留存。

为我们还进一步探索基本凑和做聚合。

骨干凑 
发生集关系之关联指出,某个类是另外有类的一模一样片。在一个聚众关系遇,子类实例可以于父类存在重新增长的时。为了表现一个凑合关系,你作画一长条由父类到有类似的实线,并在父类的涉嫌末端画一个休填充棱形。图
12 显示车和轮胎里的成团关系的例证。

图 12: 一个凑关联的例子

组成聚合 
结聚合关系是集聚关系之另一样种样式,但是子类实例的生命周期依赖让父类实例的生命周期。在祈求13着,显示了Company类和Department类之间的整合关系,注意组合关系而聚合关系一样绘制,不过这次菱形是为填的。

图 13: 一个整合关系的例证

当图 13
中的关联建模中,一个Company类实例至少总起一个Department类实例。因为涉及是成关系,当Company实例被移除/销毁时,Department实例也以活动地于移除/销毁。组合聚合的其他一个重中之重力量是一些近似只能和父类的实例相关(举例来说,我们例子中的Company类)。

映关联 
今昔咱们曾经讨论了拥有的关系类型。就使您可能注意到的,我们的有着例子已经显得了有限独无同类中的关联。然而,类为足以以反射关联和它自身相关联。起先,这或无意思,但是切记,类是虚幻的。图
14 显示一个Employee类如何通过manager /
manages角色与它自己有关。当一个近似涉到她本身时,这并无代表类的实例与她自身有关,而是切近的一个实例与类似的其余一个实例相关。

图 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。

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


回页首

UML
2 补充

既是我们已经盖了基础与高级主题,我们将挂有由于UML 1.
x多的类图的初标志。

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

实例的符号和类一样,但是代表顶端区域受到单单部分类名,它的名是经过拼接的:

Instance Name : Class Name

举例来说:

Donald : Person

以展示实例的目的是展示值得留意的抑系的音信,没必要当您的模子中包含全体实体性与操作。相反地,仅仅显示感兴趣的性与其值是全然适用的。如图16所描述。

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

只是,仅仅呈现有实例而尚未其的涉及不太实用;因此,UML 2
吗同意在实体层的关系/关联建模。绘制关联和一般的类涉之条条框框平等,除了在建模关联时有一个外加的渴求。附加的限制是,关联关系要跟类图的涉互动平等,而且涉嫌的角色名啊须同类图相平等。它的一个例证显示为图
17 中。在这个例子中,实例是祈求 6 中类图的例子实例。

图 17:图 6 中之所以实例代替类的例子

图 17
有Flight类的老二单实例,因为类图指出了于Plane类和Flight类之间的涉及是 0或多。因此,我们的例证让来了一定量只及NX0337
Plane实例相关的Flight实例。

角色 
建造模类的实例有时比要的逾详细。有时,你恐怕才想如果在一个比较多之形似层次做类关系的范。在这种情景下,你应该使 角色 记号。角色记号类似于实例记号。为了建类似的角色模型,你描一个方格,并于其间放置类的角色名及类名,作为实体记号,但是以即时状态你无能够加下划线。图
18 显示一个出于图 14 中图描述的雇员类扮演的角色实例。在图 18
中,我们得当,即使雇员类以及它自己有关,关系实在是有关雇员之间扮演经理和组织成员的角色。

图 18:一个类图显示图14负饰演不同角色的类

小心,你莫克于纯类图中做类角色的建模,即使图
18显你可以这样做。为了用角色记号,你用会得以下讨论的内部结构记号。

其中的构造 
UML 2
结构图的复管用之意义有是新的内部结构记号。它同意你显得一个近似还是另外的一个分类器如何在里头做。这当
UML 1. x
中是匪容许的,因为记号限制而不得不显示一个看似所负有的集结关系。现在,在 UML
2 中,内部的构造记号让您再知地亮类的相继组成部分如何保持关系。

深受咱们看一个实例。在图 18
中我们有一个类图以见一个Plane类如何由四单引擎和有限只控制软件对象成。从这个图中省略的事物是亮关于飞机部件如何为配的部分信。从图
18
的希冀,你无法说明,是每个控制软件对象说了算两单引擎,还是一个控制软件对象说了算三独引擎,而另一个说了算一个引擎。

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

画画制类的内在结构以会晤改善这种状态。开始经常,你通过用二只区域画一个方格。最上的区域包含类名字,而比逊色的区域包含类的内部结构,显示在其父类中顶住不同角色的部分类,角色被的每个片类为提到及外类。图
19 来得了Plane类的内部结构;注意内部结构如何澄清混乱性。

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

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

举例来说,我们可以想像, 是一个整体实体,而 车轮
轮胎是整治部车之等同有些。轮胎可当安排及车时的前头几单周末为制作,并停于仓库被。在这实例中,Wheel类实例清楚地单独地Car类实例而存在。然而,有些情况下,
部分 类的生命周期并 独立于 整体 类的生命周期 —
这称之为合成聚合。举例来说,考虑企业以及单位的涉及。 信用社和部门
都建模成类,在小卖部有前,部门非可知存。这里Department类的实例依赖让Company类的实例而在。

于咱们再次进一步追究基本凑和构成聚合。

主干凑
发出集聚关系之涉指出,某个类是另外有类的平等组成部分。在一个凑关系受到,子类实例可以比较父类存在双重增长的时空。为了见一个成团关系,你写一漫长由父类到一些好像的实线,并当父类的关联末端画一个请勿填充棱形。图
12 显示车和轮胎里的联谊关系的例子。

图 12: 一个聚关联的事例

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

图 13: 一个重组关系之例子

以图 13
中的关系建模中,一个Company类实例至少总起一个Department类实例。因为涉嫌是整合关系,当Company实例被移除/销毁时,Department实例也拿自动地受移除/销毁。组合聚合的其余一个要意义是有些近乎只能和父类的实例相关(举例来说,我们例子中的Company类)。

映关联
今日我们早已讨论了具有的干类型。就假设您也许注意到之,我们的备例子已经亮了区区单不同类之间的涉。然而,类为堪下反射关联和它们本身相关联。起先,这也许没有意思,但是切记,类是抽象的。图
14 显示一个Employee类如何通过manager /
manages角色与她本身有关。当一个接近涉到其自己时,这并无意味类的实例与它自己有关,而是切近的一个实例与类似的别一个实例相关。

图 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。

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


回页首

UML 2 补充

既我们就罩了根基与高级主题,我们以掩盖有由UML 1.
x充实的类图的新标志。

实例
当一个系统结构建模时,显示例子类实例有时候是立竿见影的。为了这种结构建模,UML
2 供 实例规范
元素,它显示在系统受应用例子(或具体)实例的值得注意的信息。

实例的记和相近一样,但是代表顶端区域受到只有的类名,它的讳是透过拼接的:

Instance Name : Class Name

举例来说来说:

Donald : Person

因为展示实例的目的是亮值得注意的还是系的信息,没必要在您的范中隐含全体实体性质和操作。相反地,仅仅显示感兴趣之特性和其值是一点一滴适用的。如图16所讲述。

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

可,仅仅呈现有实例而尚未其的关系不极端实用;因此,UML 2
吗允许在实体层的涉嫌/关联建模。绘制关联和一般的近乎涉之平整一样,除了在建模关联时有一个附加的渴求。附加的界定是,关联关系要跟类图的涉及相互平等,而且关系的角色名也亟须与类图相平等。它的一个事例显示为图
17 中。在此例子中,实例是祈求 6 中类图的例子实例。

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

图 17
有Flight类的第二单实例,因为类图指出了于Plane类和Flight类之间的涉是
0或多。因此,我们的例证让出了有限独和NX0337 Plane实例相关的Flight实例。

角色
盖模类的实例有时比要之愈来愈详细。有时,你或只是想使当一个于多之一般层次做类关系的模型。在这种情形下,你该运用
角色
记号。角色记号类似于实例记号。为了建立类似的角色模型,你作画一个方格,并当中放置类的角色名及类名,作为实体记号,但是在即时景象而免可知加下划线。图
18 显示一个是因为图 14 中图描述的雇员类扮演的角色实例。在图 18
中,我们可当,即使雇员类和它自己有关,关系着实是关于雇员之间扮演经理和团队成员的角色。

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

注意,你切莫克当纯类图中做类角色的建模,即使图
18来得你可以这样做。为了使角色记号,你拿会待运用下讨论的内部结构记号。

里的构造
UML 2
结构图的重复使得之效益有是新的内部结构记号。它同意你显得一个类还是另外的一个分类器如何以中做。这当
UML 1. x
中是免容许的,因为记号限制而不得不显示一个接近所拥有的成团关系。现在,在 UML
2 中,内部的构造记号让你重新清楚地出示类的逐条组成部分如何保持关系。

吃咱看一个实例。在图 18
中我们来一个类图以展现一个Plane类如何由四单引擎以及片只控制软件对象成。从这图中省略的东西是亮关于飞机部件如何吃配的局部音。从图
18
的图,你无法说明,是每个控制软件对象说了算两单引擎,还是一个控制软件对象说了算三独引擎,而其他一个决定一个引擎。

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

写制类的内在结构以见面改进这种状态。开始时,你通过用二独区域画一个方格。最顶端的区域包含类名字,而比较逊色的区域包含类的内部结构,显示在它父类中肩负不同角色的片段类,角色中的每个有类为干及其他类。图
19 亮了Plane类的内部结构;注意内部结构如何澄清混乱性。

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

 

相关文章