UML(统一建模语言):是面向对象的可视化建模的一种语言。是数据库设计过程中,在E-R图(实体-联系图)的设计后的进一步建模。
UML中有3种构造块:事物、关系和图,事物是对模型中最具有代表性的成分的抽象;关系是把事物结合在一起;图聚集了相关的的事物。
和序列图相似,显示对象间的动态合作关系。可以看成是类图和顺序图的交集,协作图建模对象或者角色,以及它们彼此之间是如何通信的。如果强调时间和顺序,则使用序列图;如果强调上下级关系,则选择协作图;这两种图合称为交互图。
协作图是强调接收和发送消息的对象的结构组织,有路径和顺序号。如下图(摘自网络):
-------------------------------------------------------------------------------------------------------------
一:这九种模型图各有侧重,
1:用例图侧重描述用户需求,
2:类图侧重描述系统具体实现;
二:描述的方面都不相同,
1:类图描述的是系统的结构,
2:序列图描述的是系统的行为;
三:抽象的层次也不同,
1:构件图描述系统的模块结构,抽象层次较高,
2:类图是描述具体模块的结构,抽象层次一般,
3:对象图描述了具体的模块实现,抽象层次较低。
在有的文献书籍中,将这九种模型图分为三大类:
结构分类、动态行为和模型管理:
1:结构分类包括用例图、类图、对象图、构件图和部署图,
2:动态行为包括状态图、活动图、顺序图和协作图,
3:模型管理则包含类图。
2.1 类图
2.2 对象图
2.3 包图
2.4 活动图
2.5 序列图
2.6 用例图
本章介绍六类UML图的主要用途,以及常见的概念及图示,以便对这六类图有一个初步的认识。
2.1 类图
如果投票选最重要的UML图,我一定会把票投给类图( class diagram)。类图是一款结构图(structure diagram),如图2-1所示,我们可以用它来表达系统内部重要的组成结构。一个稳定且具弹性的内部结构可以同时支撑系统对外提供的各式服务,以及系统内部复杂的运作,所以我认为类图特别重要。
接下来的各小节会谈到类图中最常见的概念及图示。
2.1.1 类
一群对象(object)享有相同的结构、行为、约束和语义时,称它们是同类(class)的对象。换句话说,定义一个类就相当于描述了一群对象。在类中, 使用属性(attribute)表达对象的结构, 使用操作(operation)表达对象的行为。
如图2-2所示,定义员工(worker)类之后,便可以依据此类的描述产生一群对象。这些:Worker对象不仅可以共用类所定义的属性,拥有自己的属性值,还可以共用类所定义的操作,或者共用约束。
图2-1 类图
图2-2 类与对象
类采用三格的矩形图示,顶格放置类名称,中格放置属性名称,底格放置操作名称。不过,也可以将类的属性格或操作格隐藏起来,节省空间,如图2-3所示。
大多数的UML工具都有隐藏功能。以StarUML为例,点选任何一个类图示都可以选择是否隐藏属性或操作,如图2-4所示。
图2-3 类图示
图2-4 隐藏属性或操作
2.1.2 可见性
对象具有封装(encapsulation)属性,可以把数据结构和行为细节封装起来,外界无法随意存取。对应UML的类概念,我们会看到类中有属性和操作,同时可以设定这些成员是否能被外界存取的可见性(visibility)。以图2-5为例,单笔申购(purchase)封装了一个外界无法存取的私有属性―金额(amount),以及一个外界可以调用的公开操作―计算(calculate)。
图2-5 私有属性与公开操作
目前,UML预设了四种可见性,分别为公开(public)、私有(private)、保护(protected)
和包(package)。公开和私有可见性最常见,也最容易懂,如图2-5所示,减号(-)为私有可见性,加号(+)为公开可见性。
私有可见性滴水不漏,就连子类也无法看见超类的私有成员,这样,其实不利于继承机制。所以,UML设置保护等级的可见性,特别开放子类可以看见超类的保护等级的属性及操作,以便提供更方便的继承机制。保护可见性的符号是井号(#),如图2-6所示。
图2-6 保护等级的属性
最后来谈包可见性。顾名思义,它是为了包而设置的,它的符号是否定号(~),如图2-7所示。同包的类可以看见其他类内部的包属性及操作。所以,从图中可以得知,账户可以看见顾客类的姓名和地址,但是分行(branch)却无法看见,因为分行不是S包的成员。
图2-7 包等级的属性
2.1.3 关联
关联(association)是对象之间最常见的关系,用来连接有结构关系的对象。请看图2-8的例子,关联的图示为实线,实线两端可以连接两个不同的类,如图中的个人(person)类和公司(company)类。
不过,关联的两端也可以连接相同的类,如图2-8中的个人类。虽然,关联两端连接相同的类,但它的链接(link)其实是连接两个不同的实例(instance),只不过这两个实例诞生自相同的类。
图2-8 关联
关联不一定是二元关联(binary association),也可以是多元关联(n-ary association)。多元关联的图示是连接大菱形的实线,如图2-9所示为三元关联(ternary association)。
图2-9 三元关联
有时候会看到带箭头实线,那是在标示导航性(navigation),意味着可以由来源端(source end)导航到箭头所在处的目标端(target end)。如图2-10所示,:Member对象可以链接到:Password对象,但是反向则不成立,也就是说,无法从:Password对象链接到:Member对象,因为两者之间是单向的关联。
图2-10 导航性
特别注意,关联端的标记在UML 2中有所变动,与UML 1版略有不同,如图2-11所示。在
UML 2中,关联的箭头端代表具有导航性。打个小叉就是不可导航;单纯直线代表还未指定可导航或不可导航。所以,回到图2-11的例子中,可以看到