类图的目标是呈现建立模型系统的连串,随后的篇章将会覆盖结构范畴中带有的别的图

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

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

基础

那是关于统第一建工公司模语言、即UML
里使用的基本图的生机勃勃雨后玉兰片小说的风流倜傥有个别。在本人早前有关种类图的稿子 里,笔者把关键从
UML 1.4 版,转移到 OMG的利用UML 2.0版草案标准(又称为UML
2)。在此篇作品中,笔者将构和谈结构图,这是早就在 UML 第22中学提议的少年老成种新图类别。由于本类别小说的指标是招人人精晓暗号成分及它们的含意,该文首要关切类图。你快捷就能够分晓这样做的理由。随后的篇章将会覆盖布局范畴中含有的别的图。

如先前所涉及的,类图的指标是体现建立模型系统的项目。在多数的 UML
模型中这几个体系包含:

*我也想唤醒读者,这一星罗棋布文章是有关 UML

  • 接口

  • 数据类型

  • 组件

标识成分的,所以那些小说并不意味着为建立模型的最佳办法提供辅导宗旨,或是该怎么调整怎么着内容应当率先被建立模型。相反的,该文及本体系小说的指标根本是帮忙大家对此暗号成分

语法和含义有叁个着力的通晓。借由这几个知识,你应有可以翻阅图,并行使正确的标识成分创造你协和的图。*

那篇文章假定你对面向对象的规划已经有了着力的知晓。你们当中就算有人须求部分面向对象概念的赞助,那么能够访问http://java.sun.com/docs/books/tutorial/java/concepts/,来得到Sun公司关于面向对象编制程序的大致指点。阅读 “什么是类?” 什么是世袭?” 章节,将提须要你丰富的领悟,并对该文的读书会全体助于。其余,大卫Taylor的书《 Object-Oriented Technologies: A Manager’s
Guide》提供了面向对象设计的美好,高水准的求证,而不供给对Computer编制程序有高深的知情。

UML 2 中的阴和阳

UML
为那些项目起了三个刻意的名字:“分类器”。日常地,你能够把分类器充当类,但在工夫上,分类器是更为广大的术语,它依然引用上面的任何三种档案的次序为好。

仿效 UML 底工体系的别样小说和科目

 

图片 1

图片 2

图片 3

订阅 UML 相关小说和科指标 KugaSS
提要

图片 4

 

在 UML 2 中有三种基本的图范畴:布局图和行事图。各样 UML
图都归于那三个图范畴。构造图的目标是展现建立模型系统的静态构造。它们包括类,组件和(或)对象图。另一面,行为图显示系统中的对象的动态行为,包罗如目的的方法,合作和移动等等的剧情。行为图的实例是活动图,用例图和体系图。

 

回页首

大约上的布局图

犹如自个儿所说的,布局图展现建立模型系统的静态布局。关心系统的预制零构件,无需思索时间。在系统内,静态布局通过突显等级次序和它们的实例举行传播。除了出示系统项目和它们的实例,构造图最少也显示了这一个因素间的有的提到,只怕的话,以至也出示它们的内部布局。

贯穿整个软件生命周期,结构图对于各类协会成员都以卓有功能的。日常来讲,那么些图协助规划验证,和民用与公司间的规划交换。比方来讲,业务剖判师能够接纳类或对象图,来为当下的血本和能源建立模型,举例分类账,附加物或地理档期的顺序。布局师能够应用组件和配置图,来测量检验/确认他们的布置性是或不是充足。开荒者能够接收类图,来设计并为系统的代码(或将要成为代码的)类写文书档案。

非凡的类图

UML 2
把协会图看成五个分拣;这里并不设有称为“构造图”的图。然则,类图提供组织图类型的叁个生死攸关实例,并为大家提供意气风发组暗记成分的发轫集,供全体别的协会图使用。由于类图是这么宗旨,本文的剩余部分将会把主要聚焦在类图书号集。在本文的末段,你将对此怎么样画UML
2类图有所领悟,而且对于掌握在后边小说元帅涉及的别样协会图有一个抓好的底子。

 

回页首

基础

如先前所涉嫌的,类图的目标是展现建立模型系统的项目。在半数以上的 UML
模型中这一个体系富含:

  • 接口

  • 数据类型

  • 组件

UML
为那个项目起了三个特别的名字:“分类器”。平时地,你能够把分类器充作类,但在才能上,分类器是更进一层普遍的术语,它依旧引用下面的其余三种档案的次序为好。

类名

类的 UML 表示是三个正方形,垂直地分成四个区,如图 1
所示。顶端区域显示类的名字。中间的区域列出类的习性。尾巴部分的区域列出类的操作。当在三个类图上画两个类成分时,你必须要要有上面包车型客车区域,下边包车型大巴一个区域是可筛选的(当图描述仅仅用于显示分类器间关系的高层细节时,上面包车型地铁四个区域是无需的)。图
1 来得二个航空线班机怎么着作为 UML
类建立模型。正如大家所能看到的,名字是Flight,大家得以在上游区域见到Flight类的3天性子:flightNumber,departure提姆e

flightDuration。在底部区域中大家得以看看Flight类有三个操作:delayFlight
和 getArrivalTime。

图片 5

图 1: Flight类的类图

类属性列表

类的属性节(中部区域)在分隔线上列出每二个类的属性。属性节是可筛选的,借使后生可畏用它,就蕴含类的列表显示的各类属性。该线用如下格式:

name : attribute type
flightNumber : Integer

接轨大家的Flight类的事例,我们能够应用质量类型消息来说述类的性质,如表 1
所示。

表 1:具备关联类型的Flight类的质量名字

属性名称 属性类型
flightNumber Integer
departureTime Date
flightDuration Minutes

在业务类图中,属性类型日常与单位切合,那对于图的或是读者是有意义的(举例,分钟,美金,等等)。但是,用于转移代码的类图,必要类的属性类型必需界定在由程序语言提供的类型之中,或蕴含于在系统中落实的、模型的门类之中。

在类图上海展览中心示全体私下认可值的特定属性,不时是行得通的(比如,在银行账户应用程序中,二个新的银行账户会以零为伊始值)。UML
标准允许在属性列表节中,通过利用如下的暗记作为私下认可值的标记:

name : attribute type = default value

举例来讲:

balance : Dollars = 0

体现属性默许值是可选拔的;图 2
展现三个银行账户类具备一个名称叫 balance的品种,它的暗中认可值为0。

图片 6

图 2:展现默以为0新币的balance属性值的银行账户类图。

类操作列表

类操作记录在类图纺锤形的第多个(最低的)区域中,它也是可选择的。和属性同样,类的操作以列表格式呈现,各种操作在它自身线上。操作使用下列灯号展现:

   name(parameter list) : type of value returned

上面包车型大巴表 2 中Flight类操作的照射。

表 2:从图 2 辉映的Flight类的操作

操作名称 返回参数 值类型
delayFlight
Name Type
numberOfMinutes Minutes
N/A
getArrivalTime N/A Date

图3展示,delayFlight 操作有一个Minutes类型的输入参数 —
numberOfMinutes。然则,delayFlight
操作未有重临值。 1 当一个操作有参数时,参数被放在操作的括号内;各个参数都使用那样的格式:“参数名:参数类型”。

图片 7

图 3:Flight类操作参数,包含可筛选的“in”标记。

当文书档案化操作参数时,你可能应用一个可选拔的提醒器,以展现参数到操作的输入参数、或输出参数。这几个可选拔的提示器以“in”或“out”现身,如图3中的操作区域所示。平时的话,除非将使用生龙活虎种开始时代的次序编程语言,如Fortran
,那一个提示器大概会怀有利于,不然它们是不供给的。然则,在
C++和Java中,全数的参数是“in”参数,而且遵照UML标准,既然“in”是参数的暗中认可类型,大许多人将会疏漏输入/输出提示器。

继承

在面向对象的设计中八个不行关键的概念,继承,指的是二个类(子类)继承除此以外的三个类(超类)的平等作用,并追加它本身的新职能(一个非技能性的比如,想象本人继续了自己母亲的平时的音乐力量,可是在本身的家里,笔者是唯风度翩翩二个玩电吉他的人)的力量。为了在贰个类图上建立模型世袭,从子类(要持续行为的类)拉出一条闭合的,单键头(或三角形)的实线指向超类。思谋银行账户的体系:图
4 突显 CheckingAccount 和 SavingsAccount 类怎么样从 BankAccount
类世襲而来。

图片 8

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

在图 4 中,继承关系由每一个超类的独立的线画出,那是在IBM Rational
罗丝和IBM Rational
XDE中运用的方式。但是,有意气风发种名称叫树标记的预备情势能够画出世襲关系。当存在七个或更加的多子类时,如图
4 中所示,除了继续线象树枝同样混在同步外,你能够行使树形暗号。图 5
是重绘的与图 4 同样的后续,然而本次运用了树形暗记。

图片 9

图 5: 贰个应用树形暗号的一连实例

抽象类及操作 
紧凑的读者会专一到,在图 4 和 图5中的图中,类名BankAccount和withdrawal操作使用斜体。那象征,BankAccount
类是一个抽象类,而withdrawal方法是虚幻的操作。换句话说,BankAccount
类使用withdrawal规定抽象操作,并且CheckingAccount 和 SavingsAccount
七个子类都各自地实践它们各自版本的操作。

可是,超类(父类)不必然尽管抽象类。规范类作为超类是健康的。

关联 
当你系统建立模型时,特定的对象间将会相互关系,并且这么些涉嫌本身供给被清楚地建立模型。有多种关系。在此一片段中,小编将会研讨它们中的八个– 双向的关系和单向的关系,并且笔者将会在Beyond the
basics
后生可畏对研讨剩下的二种关系类型。请留心,关于啥时候该行使每类别型涉及的详实座谈,不归属本文的界定。相反的,作者将会把第生龙活虎聚焦在种种关系的用项,并表明怎样在类图上画出涉嫌。

双向(标准)的关联 
涉及是四个类间的接入。关联合国善后救济总署是被假定是双向的;那意味着,两个类相互精通它们间的交换,除非您限制一些任何品类的涉嫌。回看一下Flight
的例证,图 6 呈现了在Flight类和Plane类之间的一个正式项目标关联。

图片 10

图 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年的飞机)关联。

由于对这个在关乎后面部分也许出现的多种值描述认为大惑不解,下面包车型大巴表3列出了部分多种值及它们含义的例子。

表 3: 多种值和它们的象征

兴许的多种值描述

表示

含义

0..1

0个或1个

1

只能1个

0..*

0个或七个

*

0个或四个

1..*

1个或本身个

3

只能3个

0..5

0到5个

5..15

5到15个

单向关系 
在一个单向关系中,三个类是辅车相依的,可是独有一个类知道这种关联的留存。图 7
展现单向关系的透支财报的八个实例。

图片 11

图 7: 单向关系一个实例:OverdrawnAccountsReport 类 BankAccount 类,而
BankAccount 类则对事关一无所知。

贰个一方面的关系,表示为一条带有指向已知类的盛开箭头(不破产的箭头或三角形,用于标记世襲)的实线。就像是规范提到,单向关系富含多个剧中人物名和多少个多种值描述,可是与专门的职业的双向关联区别的时,单向关系只包涵已知类的角色名和多种值描述。在图
7 中的例子中,OverdrawnAccountsReport 知道 BankAccount 类,何况知道
BankAccount
类扮演“overdrawnAccounts”的角色。然则,和标准提到不一样,BankAccount
类并不知道它与 OverdrawnAccountsReport
相关联。 2

软件包 
不可防止,假诺你正在为八个大的体系或大的事务领域建立模型,在你的模型上校会有大多莫衷一是的分类器。管理全部的类将是生机勃勃件令人生畏的义务;所以,UML
提供叁个称呼 软件包的公司成分。软件包使建立模型者能够协会模型分类器到名字空间中,那有个别象文件系统中的文件夹。把一个种类分为八个软件包使系统成为轻松通晓,尤其是在种种软件包都表现系统的叁个一定部分时。 3

在图中设有二种办法表示软件包。并未准则须要接受哪一类标记,除了用你个人的论断:哪类更便利阅读你画的类图。二种方法都是由三个超小的纺锤形(用于固定)嵌套在二个大的圆锥形中初始的,如图
8 所示。不过建立模型者必得调控包的成员怎么样表示,如下:

  • 假诺建立模型者决定在大长方形中显示软件包的成员,则有着的那多少个成员 4 急需被放置在正方形里面。别的,全部软件包的名字供给放在软件包的相当小长方形之内(如图
    8 的呈现)。

  • 借使建立模型者决定在大的正方形之外呈现软件包成员,则持有将会在图上突显的积极分子都亟待被停放纺锤形之外。为了展现归于软件包的分类器归于,从每一种分类器画一条线到中间有加号的圆圆,那么些圆周黏合在软件包之上(图9)。

图片 12

图 8:在软件包的星型内展现软件包成员的软件包成分例子

图片 13

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

打探底蕴主要性

在 UML 2中,掌握类图的底蕴更为主要。那是因为类图为持有的别的协会图提供基本的营造块。如组件或对象图(仅仅是举了些例子)。

 

回页首

赶过功底

到此甘休,小编已经介绍了类图的根底,然而请继续往下读!在下边包车型大巴某个中,作者将会指导您到您会动用的类图的更关键的方面。这个归纳UML
2 行业内部中的接口,此外的三种关系类型,可知性和别的补给。

接口 
在本文的后面,笔者提议你以类来酌量分类器。事实上,分类器是二个进一层相通的定义,它回顾数据类型和接口。

至于哪天、以致怎样飞速地在系统构造图中运用数据类型和接口的全体斟酌,不在本文的研究范围以内。既然那样,小编何以要在那间聊到数据类型和接口呢?你恐怕想在结构图上效仿那一个分类器类型,在此个时候,使用科学的符号来代表,也许起码知道那几个分类器类型是重要的。不许确地绘制那一个分类器,很有望将使您的布局图读者感觉混乱,未来的种类将无法适应供给。

叁个类和贰个接口差异:三个类能够有它造型的真实实例,可是一个接口必须至稀少一个类来完毕它。在
UML 2中,二个接口被以为是类建模成分的特殊化。由此,接口就象类那样绘制,可是星型的顶上部分区域也许有文件“interface”,如图
10
所示。 5

图片 14

图 10:Professor类和Student类达成Person接口的类图实例

在图 10中展现的图中,Professor和Student类都完成了Person的接口,但并不从它接二连三。大家知晓那或多或少是出于上面八个原因:1卡塔尔(قطر‎Person对象作为接口被定义 —
它在指标的名字区域中有“interface”文本,并且大家看出由于Professor和Student对象遵照画类对象的法则(在它们的名字区域中没有额外的分类器文本)标示,所以它们是 目的。
2卡塔尔(قطر‎ 大家精晓世襲在这里间未有被彰显,因为与带箭头的线是点线并非实线。如图
10
所示,一条带有闭合的单向箭头的 线意味着达成(或举行);正如大家在图
4 中所看到的,一条带有闭合单向箭头的线意味着继续。

更多的涉及 
在上边,笔者谈谈了双向关联和单向关系。今后,小编将会介绍剩下的三种档次的关联。

关联类 
在提到建立模型中,存在部分动静下,你必要包含此外类,因为它包罗了有关关联的有价值的音讯。对于这种情景,你会动用 关联类 来绑定你的中坚关系。关联类和平日类同样表示。不一样的是,主类和关联类之间用一条相交的点线连接。图
11 显示一个航空工业实例的涉嫌类。

图片 15

图 11:扩展关联类 MileageCredit

在图 11 中显示的类图中,在Flight类和 FrequentFlyer
类之间的涉嫌,爆发了名称为MileageCredit的涉及类。那意味着当Flight类的叁个实例关联到 FrequentFlyer
类的三个实例时,将会发生 MileageCredit 类的三个实例。

聚合 
汇合是一种特别类型的关系,用于描述“总体到一些”的涉嫌。在大旨的会面关系中, 部分类 的生命周期独立于 整体类 的生命周期。

类名

譬世尊说来说,大家得以设想, 是多个完好实体,而 车轮 轮胎是整辆车的风流浪漫有个别。轮胎能够在交待到车时的前多少个礼拜被制作,并放置于酒馆中。在此个实例中,Wheel类实例清楚地单独地Car类实例而存在。但是,有个别景况下, 部分 类的生命周期并  独立于 整体 类的生命周期

那称为合成聚合。譬释尊讲,酌量公司与单位的涉嫌。 商场和机构 都建模成类,在店堂存在早前,部门不可能存在。这里Department类的实例正视于Company类的实例而存在。

让我们更进一层研究基本聚合和构成聚合。

骨干聚合 
有汇集关系的涉及提出,有些类是其余有些类的生龙活虎有的。在三个聚众关系中,子类实例能够比父类存在越来越长的时光。为了表现一个成团关系,你画一条从父类到部分类的实线,并在父类的关联末端画一个未填充棱形。图
12 展现车和轮胎间的聚众关系的事例。

图片 16

图 12: 三个集合关联的例证

构成聚合 
重新整合聚合关系是聚众关系的另后生可畏种情势,然而子类实例的生命周期正视于父类实例的生命周期。在图13中,突显了Company类和Department类之间的三结合关系,注意组合关系如聚合关系相近绘制,可是此番菱形是被填充的。

图片 17

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

在图 13中的关系建模中,三个Company类实例最少总有四个Department类实例。因为涉及是组成关系,当Company实例被移除/销毁时,Department实例也将电动地被移除/销毁。组合聚合的另二个器重职能是有的类只好与父类的实例相关(譬释尊讲,我们例子中的Company类)。

反射关联 
现行反革命我们早已钻探了颇负的涉及类型。就疑似您可能注意到的,大家的有着例子已经显得了七个不一样类之间的关系。可是,类也足以选择反射关联与它本人相关联。最早,那恐怕未有意思,可是切记,类是虚幻的。图
14 显示一个Employee类怎样通过manager /
manages剧中人物与它自己有关。当三个类关联到它自己时,那并不意味类的实例与它自己有关,而是类的二个实例与类的另一个实例相关。

图片 18

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

图 14
描绘的关系说澳优(Ausnutria Hyproca卡塔尔国(Karicare卡塔尔国个Employee实例只怕是此外叁个Employee实例的经营。但是,因为“manages”的涉及剧中人物有
0..*的多重性描述;三个雇员可能不受任何别的雇员管理。

可见性 
在面向对象的安排中,存在属性及操作可以知道性的号子。UML
识别各类别型的可以看到性:public,protected,private及package。

UML
规范并不要求质量及操作可以知道性必得出示在类图上,不过它要求为各类属性及操作定义可以见到性。为了在类图上的显得可以看到性,放置可以知道性标志于属性或操作的名字以前。固然UML 钦命三种可以知道性类型,然而其实的编制程序语言大概扩展额外的可以知道性,或不补助UML 定义的可以预知性。表4突显了 UML 援救的可以见到性类型的两样标记。

表 4:UML 扶植的可以预知性类型的注明

标志 可见性类型
+ Public
# Protected
Private
~ Package

前几日,让我们看贰个类,以表明属性及操作的可以知道性类型。在图 1第55中学,全部的特性及操作都以public,除了 updateBalance 操作。updateBalance
操作是protected。

图片 19

图 15:一个 BankAccount 类表达它的性情及操作的可以看到性

 

回页首

UML 2 补充

既然大家早就覆盖了基本功和高等大旨,大家将覆盖一些由UML 1.
x日增的类图的新标识。

实例 
当二个系统结创设立模型时,展现例子类实例一时候是一蹴而就的。为了这种协会建立模型,UML
2
提供 实例标准 成分,它彰显在系统中利用例子(或具体)实例的值得注意的新闻。

实例的号子和类雷同,可是代表最上端区域中仅部分类名,它的名字是通过拼接的:

Instance Name : Class Name

譬如来讲:

Donald : Person

因为呈现实例的目标是展现值得注意的或有关的新闻,没需求在你的模型中富含全部实体性质及操作。相反地,仅仅突显感兴趣的质量及其值是一心适用的。如图16所描述。

图片 20

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

可是,仅仅显示成些实例而从不它们的关系不太实用;因而,UML 2
也同意在实体层的涉及/关联建立模型。绘制关联与日常的类关系的规规矩矩平等,除了在建立模型关联时有四个叠合的必要。附加的约束是,关联关系必得与类图的涉嫌相平等,何况关乎的角色名字也非得与类图相平等。它的一个事例呈现于图
17 中。在此个事例中,实例是图 6 中类图的例证实例。

图片 21

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

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

角色 
建立模型类的实例临时比期待的愈来愈详细。一时,你恐怕风华正茂味想要在二个超多的貌似等级次序做类关系的模型。在这里种状态下,你应当接纳 角色 暗号。剧中人物暗号肖似于实例暗记。为了创立类的角色模型,你画三个方格,并在中间放置类的剧中人物名及类名,作为实体暗记,但是在此景色你不能够加下划线。图
18 突显三个由图 14 中图描述的雇员类扮演的剧中人物实例。在图 18中,大家能够以为,固然雇员类与它自身有关,关系着实是关于雇员之间扮演老板及团体成员的剧中人物。

图片 22

图 18:七个类图展现图14中饰演区别剧中人物的类

细心,你不可能在纯粹类图中做类剧中人物的建立模型,尽管图
18显得你能够这么做。为了利用角色暗记,你将会须要选择上边探讨的内部布局暗号。

其间的布局 
UML 2
构造图的更实用的功用之一是新的内部构造旗号。它同意你体现一个类或此外的四个分类器如何在里头整合。那在
UML 1. x
中是不或者的,因为暗记限定你只可以突显一个类所独具的汇集关系。现在,在 UML
2 中,内部的协会暗号令你更通晓地展现类的逐一部分怎么样保持关系。

让大家看三个实例。在图 1第88中学大家有贰个类图以表现三个Plane类如何由三个引擎和五个调整软件对象组成。从这几个图中省略的事物是展现关于飞机零件怎么样棉被服装配的片段新闻。从图
18
的图,你不能表明,是各样调节软件对象说了算七个引擎,还是叁个调控软件对象说了算四个引擎,而另二个说了算叁个引擎。

图片 23

图 19: 只展现对象时期涉及的类图

绘制类的内在结构将会修改这种状态。早先时,你通过用贰个区域画三个方格。最上边的区域蕴涵类名字,而相当低的区域包罗类的内部构造,展现在它们父类中负担不一致脚色的生龙活虎对类,剧中人物中的每一个部分类也论及到任何类。图
19 展现了Plane类的内部构造;注意内部布局怎样澄清混乱性。

图片 24

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

 

参照他事他说加以考查资料

有关我

图片 25

DonaldBell是IBM全世界服务的八个IT行家,在这里儿他和IBM的客商合作从事于规划和开垦基于软件应用方案的J2EE。

类的 UML 表示是多少个正方形,垂直地分为多个区,如图 1
所示。顶上部分区域展现类的名字。中间的区域列出类的品质。底部的区域列出类的操作。当在一个类图上画一个类成分时,你必须要要有上边的区域,上边包车型大巴一个区域是可筛选的(当图描述仅仅用于体现分类器间涉及的高层细节时,上面包车型客车五个区域是不供给的)。图
1 出示一个航道班机如何作为 UML
类建立模型。正如笔者辈所能见到的,名字是 Flight,大家能够在中间区域来看Flight类的3个属性:flightNumber,departureTime

flightDuration。在底层区域中我们能够看来Flight类有多个操作:delayFlight
和 getArrivalTime。

图片 26

图 1: Flight类的类图

类属性列表

类的属性节(中部区域)在分隔线上列出每八个类的品质。属性节是可接收的,尽管生龙活虎用它,就包含类的列表突显的各种属性。该线用如下格式:

name : attribute type
flightNumber : Integer

继续我们的Flight类的事例,大家得以应用品质类型新闻来说述类的性格,如表 1
所示。

表 1:具备关联类型的Flight类的性质名字

属性名称 属性类型
flightNumber Integer
departureTime Date
flightDuration Minutes

在业务类图中,属性类型寻常与单位切合,那对于图的或是读者是有意义的(比方,分钟,比索,等等)。然则,用于转移代码的类图,必要类的质量类型必需界定在由程序语言提供的品类之中,或包含于在系统中完结的、模型的门类之中。

在类图上显得全数暗许值的特定属性,临时是卓有功用的(例如,在银行账户应用程序中,多个新的银行账户会以零为初步值)。UML
标准允许在属性列表节中,通过应用如下的符号作为默许值的标记:

name : attribute type = default value

比喻来讲:

balance : Dollars = 0

展示属性暗中同意值是可筛选的;图 2
显示三个银行账户类拥有一个名称为 balance的品种,它的暗许值为0。

图片 27

图 2:突显默以为0台币的balance属性值的银行账户类图。

类操作列表

类操作记录在类图星型的第几个(最低的)区域中,它也是可筛选的。和属性相符,类的操作以列表格式呈现,各样操作在它协调线上。操作使用下列暗号展现:

    name(parameter list) : type of value returned

上面的表 2 中Flight类操作的照耀。

表 2:从图 2 炫丽的Flight类的操作

操作名称 返回参数 值类型
delayFlight
Name Type
numberOfMinutes Minutes
N/A
getArrivalTime N/A Date

图3体现,delayFlight 操作有贰个Minutes类型的输入参数 —
numberOfMinutes。然则,delayFlight
操作未有再次来到值。 1 当三个操作有参数时,参数被放在操作的括号内;种种参数都施用那样的格式:“参数名:参数类型”。

图片 28

图 3:Flight类操作参数,富含可选用的“in”标记。

当文书档案化操作参数时,你或者接纳一个可选取的提醒器,以体现参数到操作的输入参数、或输出参数。那几个可接受的提示器以“in”或“out”出现,如图3中的操作区域所示。日常的话,除非将接纳生机勃勃种开始时代的顺序编制程序语言,如Fortran
,那一个提示器恐怕会拥有助于,不然它们是不供给的。然则,在
C++和Java中,全体的参数是“in”参数,何况遵照UML标准,既然“in”是参数的默许类型,大非常多人将会脱漏输入/输出提示器。

继承

在面向对象的安顿性中二个非常主要的定义,继承,指的是叁个类(子类)继承除此以外的叁个类(超类)的等同功效,并扩展它自个儿的新成效(叁个非本事性的比喻,想象自身继续了自个儿老妈的相同的音乐力量,但是在自己的家里,笔者是唯风华正茂一个玩电吉他的人)的技巧。为了在一个类图上建立模型继承,从子类(要三回九转行为的类)拉出一条闭合的,单键头(或三角形)的实线指向超类。思索银行账户的花色:图
4 显示 CheckingAccount 和 SavingsAccount 类怎么着从 BankAccount
类世袭而来。

图片 29

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

在图 4 中,世袭关系由种种超类的单独的线画出,那是在IBM Rational
罗丝和IBM Rational
XDE中利用的不二秘技。可是,有意气风发种名称叫 树标记的备选方式可以画出世袭关系。当存在七个或越来越多子类时,如图
4 中所示,除了继续线象树枝相似混在协同外,你能够选择树形暗号。图 5
是重绘的与图 4 同样的接续,可是本次运用了树形灯号。

图片 30

图 5: 四个用到树形暗记的存续实例

抽象类及操作 
有心人的读者会注意到,在图 4 和 图5中的图中,类名BankAccount和withdrawal操作使用斜体。那意味,BankAccount
类是一个抽象类,而withdrawal方法是架空的操作。换句话说,BankAccount
类使用withdrawal规定抽象操作,并且CheckingAccount 和 SavingsAccount
三个子类都分别地推行它们分别版本的操作。

唯独,超类(父类)不必然要是抽象类。标准类作为超类是例行的。

关联 
当你系统建立模型时,特定的对象间将会相互关系,何况那个涉及本人需求被明晰地建立模型。有多种关系。在这里风流倜傥有个别中,作者将会商量它们中的三个– 双向的涉嫌和单向的涉嫌,何况笔者将会在Beyond the
basics
部分探究剩下的两种关系类型。请留神,关于哪天该使用每系列型涉及的事无巨细研商,不归于本文的节制。相反的,作者将会把重视集中在各个关系的用处,并表达什么在类图上画出涉及。

双向(标准)的关联 
涉嫌是八个类间的连接。关联合国善后救济总署是被假定是双向的;那表示,多少个类互相领会它们间的联络,除非你限制一些任何门类的涉嫌。回看一下Flight
的例子,图 6 呈现了在Flight类和Plane类之间的一个正经项指标关联。

图片 31

图 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年的飞机)关联。

是因为对那个在事关尾巴部分恐怕现身的多种值描述感觉困惑不解,上面包车型地铁表3列出了某些多种值及它们含义的事例。

表 3: 多种值和它们的表示

或是的多种值描述

表示

含义

0..1

0个或1个

1

只能1个

0..*

0个或多个

*

0个或多少个

1..*

1个或小编个

3

只能3个

0..5

0到5个

5..15

5到15个

单向关系 
在三个单向关系中,八个类是不非亲非故系的,不过独有一个类知道这种联系的存在。图 7
显示单向关系的透支财务报表的二个实例。

图片 32

图 7: 单向关系叁个实例:OverdrawnAccountsReport 类 BankAccount 类,而
BankAccount 类则对涉及不学无术。

三个一方面包车型地铁关联,表示为一条带有指向已知类的盛开箭头(不关门的箭头或三角形,用于标识世襲)的实线。就像是规范提到,单向关系包蕴二个剧中人物名和多个多种值描述,但是与规范的双向关联差别的时,单向关系只包涵已知类的角色名和多种值描述。在图
7 中的例子中,OverdrawnAccountsReport 知道 BankAccount 类,何况知道
BankAccount
类扮演“overdrawnAccounts”的剧中人物。可是,和标准提到区别,BankAccount
类并不知道它与 OverdrawnAccountsReport
相关联。 2

软件包 
不可幸免,倘令你正在为四个大的系列或大的业务领域建立模型,在你的模型军长会有广大不等的分类器。管理全体的类将是黄金时代件令人生畏的职分;所以,UML
提供三个名称为 软件包的团伙元素。软件包使建立模型者能够协会模型分类器到名字空间中,那有个别象文件系统中的文件夹。把二个系统一分配为七个软件包使系统成为轻松精晓,尤其是在各类软件包都表现系统的多个一定部分时。 3

在图中留存三种办法表示软件包。并从未法规供给使用哪类标识,除了用你个人的判断:哪个种类更有益阅读你画的类图。三种办法都以由两个超小的圆锥形(用于固定)嵌套在一个大的星型中开头的,如图
8 所示。不过建立模型者必需调控包的积极分子怎么着表示,如下:

  • 只要建立模型者决定在大圆柱形中显得软件包的分子,则装有的那多少个成员 4 须要被放置在长方形里面。其余,全数软件包的名字须要放在软件包的不大长方形之内(如图
    8 的展现)。

  • 万一建立模型者决定在大的星型之外展现软件包成员,则持有将会在图上呈现的成员都亟待被平放星型之外。为了显得归属软件包的分类器归属,从种种分类器画一条线到在那之中有加号的圆圆,那么些圆周粘连在软件包之上(图9)。

图片 33

图 8:在软件包的正方形内体现软件包成员的软件包成分例子

图片 34

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

打探幼功重要性

在 UML 第22中学,精通类图的底蕴更为重要。那是因为类图为持有的别的组织图提供基本的营造块。如组件或对象图(仅仅是举了些例子)。


回页首

超过底子

到此甘休,小编早就介绍了类图的根基,不过请继续往下读!在上面的某个中,作者将会指点您到您会利用的类图的更要紧的上面。那一个归纳UML
2 标准中的接口,别的的二种关系类型,可知性和其它补给。

接口 
在本文的近日,小编提议你以类来考虑分类器。事实上,分类器是二个进一层形似的定义,它包蕴数据类型和接口。

关于哪天、以致如何飞速地在系统布局图中运用数据类型和接口的豆蔻年华体化研究,不在本文的座谈范围之内。既然那样,作者干什么要在此边提及数据类型和接口呢?你也许想在结构图上效仿那些分类器类型,在这里个时候,使用正确的标记来代表,也许最少知道那个分类器类型是主要的。不得法地绘制那些分类器,很有望将使您的构造图读者以为混乱,现在的系统将不可能适应需要。

三个类和一个接口分裂:叁个类可以有它造型的真实实例,但是贰个接口必需至少有三个类来落实它。在
UML 第22中学,多个接口被以为是类建模成分的特殊化。因而,接口就象类那样绘制,不过星型的最上部区域也是有文件“interface”,如图
10
所示。 5

图片 35

图 10:Professor类和Student类完结Person接口的类图实例

在图 10中显得的图中,Professor和Student类都贯彻了Person的接口,但并不从它继续。大家知晓那或多或少是出于上面多个原因:1卡塔尔(قطر‎Person对象作为接口被定义 —
它在对象的名字区域中有“interface”文本,何况我们见到由于Professor和Student对象依据画类对象的平整(在它们的名字区域中并未有额外的分类器文本)标示,所以它们是 对象。
2卡塔尔(英语:State of Qatar) 我们领悟世襲在此边未有被出示,因为与带箭头的线是点线并非实线。如图
10
所示,一条带有闭合的单向箭头的 线意味着落成(或实行);正如大家在图
4 中所看到的,一条带有闭合单向箭头的线意味着继续。

更加多的涉嫌 
在上面,小编谈谈了双向关联和单向关系。以往,笔者将会介绍剩下的三连串型的涉及。

关联类 
在涉及建立模型中,存在部分气象下,你须求富含此外类,因为它饱含了关于关联的有价值的音讯。对于这种状态,你会使用 关联类 来绑定你的骨干关系。关联类和平时类相仿表示。差别的是,主类和关联类之间用一条相交的点线连接。图
11 显示叁个航空工业实例的涉嫌类。

图片 36

图 11:增添关联类 MileageCredit

在图 11 中突显的类图中,在Flight类和 FrequentFlyer
类之间的涉嫌,爆发了名字为MileageCredit的涉嫌类。那象征当Flight类的一个实例关联到 FrequentFlyer
类的三个实例时,将会生出 MileageCredit 类的三个实例。

聚合 
晤面是风流倜傥种专门类型的关系,用于描述“总体到有的”的涉嫌。在着力的集中关系中, 部分类 的生命周期独立于 整体类 的生命周期。

譬释迦牟尼佛讲,大家能够杜撰, 是二个豆蔻梢头体化实体,而 车轮 轮胎是整辆车的豆蔻年华局地。轮胎可以在布署到车时的前多少个礼拜被营造,并放置于货仓中。在此个实例中,Wheel类实例清楚地独自地Car类实例而留存。然则,有个别景况下, 部分 类的生命周期并  独立于 整体 类的生命周期

那称为合成聚合。譬释尊讲,盘算公司与单位的关系。 商店和单位 都建立模型成类,在小卖部存在早前,部门不可能存在。这里Department类的实例信任于Company类的实例而存在。

让大家更进一层研究基本聚合和组合聚合。

宗旨聚合 
有成团关系的关系建议,某些类是此外某些类的大器晚成部分。在一个汇集关系中,子类实例能够比父类存在越来越长的小运。为了表现两个会集关系,你画一条从父类到有的类的实线,并在父类的关系末端画一个未填充棱形。图
12 展现车和轮胎间的集结关系的例子。

图片 37

图 12: 二个汇聚关联的事例

组合聚合 
整合聚合关系是汇聚关系的另大器晚成种样式,可是子类实例的生命周期正视于父类实例的生命周期。在图第13中学,突显了Company类和Department类之间的结合关系,注意组合关系如聚合关系黄金时代致绘制,然而这一次菱形是被填充的。

图片 38

图 13: 三个结合关系的事例

在图 13中的关系建立模型中,八个Company类实例起码总有叁个Department类实例。因为关乎是整合关系,当Company实例被移除/销毁时,Department实例也将活动地被移除/销毁。组合聚合的另壹位命关天意义是风流倜傥对类只好与父类的实例相关(举例来讲,我们例子中的Company类)。

反射关联 
现在我们曾经商量了全部的关系类型。就像你可能注意到的,大家的兼具例子已经彰显了四个差别类之间的涉及。不过,类也得以行使反射关联与它自个儿相关联。初步,那大概毫无意义,但是切记,类是画个饼来解除饥饿的。图
14 展现七个Employee类怎么着通过manager /
manages剧中人物与它自个儿有关。当多个类关联到它本身时,那并不代表类的实例与它自身有关,而是类的一个实例与类的另四个实例相关。

图片 39

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

图片 40

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


回页首

UML
2 补充

既然如此大家早已覆盖了功底和高端大旨,大家将覆盖一些由UML 1.
x充实的类图的新标记。

实例 
当一个系统结创设立模型时,呈现例子类实例有时候是卓有功用的。为了这种结营造模,UML
2
提供 实例标准 成分,它呈现在系统中央银行使例子(或具体)实例的值得注意的音讯。

实例的符号和类同样,不过代表最上端区域中仅部分类名,它的名字是因而拼接的:

Instance Name : Class Name

比喻来讲:

Donald : Person

因为呈现实例的指标是展现值得注意的或相关的音讯,没必要在您的模子中蕴藏全部实体性质及操作。相反地,仅仅展现感兴趣的属性及其值是一丝一毫适用的。如图16所呈报。

图片 41

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

而是,仅仅呈现一些实例而从不它们的关系不太实用;由此,UML 2
也同目的在于实体层的涉嫌/关联建立模型。绘制关联与通常的类关系的规行矩步一样,除了在建模关联时有叁个附加的渴求。附加的约束是,关联关系必得与类图的涉嫌相平等,何况事关的剧中人物名字也非得与类图相平等。它的二个例子展现于图
17 中。在此个事例中,实例是图 6 中类图的例证实例。

图片 42

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

图 17
有Flight类的一个实例,因为类图提出了在Plane类和Flight类之间的关联是 0或多。因而,我们的例证给出了多个与NX0337
Plane实例相关的Flight实例。

角色 
建立模型类的实例不常比期望的愈发详细。有的时候,你也许后生可畏味想要在叁个很多的日常等级次序做类关系的模型。在此种情形下,你应当利用 角色 暗号。剧中人物暗号雷同于实例记号。为了创建类的剧中人物模型,你画二个方格,并在里面放置类的角色名及类名,作为实体暗记,不过在此景观你无法加下划线。图
18 展现二个由图 14 中图描述的雇员类扮演的剧中人物实例。在图 1第88中学,我们能够以为,即便雇员类与它本身有关,关系真的是有关雇员之间扮演老董及集体成员的剧中人物。

图片 43

图 18:二个类图显示图14中饰演分裂角色的类

留意,你不可能在纯粹类图中做类剧中人物的建立模型,就算图
18体现你能够这么做。为了利用剧中人物暗记,你将会须要选取上面切磋的内部布局灯号。

当中的构造 
UML 2
布局图的更有效的机能之一是新的内部构造记号。它同意你显得三个类或此外的三个分类器怎么样在中间整合。那在
UML 1. x
中是不恐怕的,因为暗记限定你只好展现贰个类所兼有的集纳关系。以往,在 UML
2 中,内部的构造记号让您更明了地显示类的风华正茂风流浪漫部分怎样保持关系。

让大家看八个实例。在图 18中大家有三个类图以表现一个Plane类怎样由八个引擎和多少个调节软件对象组成。从这一个图中省略的事物是显得关于飞机构件怎么着棉被服装配的局地音信。从图
18
的图,你一点都不大概表明,是各种调控软件对象说了算三个引擎,依然多少个调控软件对象说了算多个引擎,而另三个操纵二个内燃机。

图片 44

图 19: 只显示对象时期涉及的类图

绘制类的内在布局将会改进这种状态。起先时,你通过用二个区域画一个方格。最下面的区域包含类名字,而超低的区域包括类的内部构造,展现在它们父类中承担不一致角色的风流浪漫对类,角色中的每种部分类也论及到任何类。图
19 体现了Plane类的内部布局;注意内部结构怎么样澄清混乱性。

图片 45

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

在图 20 中Plane有多个ControlSoftware 对象,并且每一个调控二个引擎。在图左边上的
ControlSoftware(control1)调节引擎 1 和 2 。在图右侧的
ControlSoftware(control2)调节引擎 3 和 4 。