UML类图详解(1)
- 摘要:这是关于统一建模语言、即UML 里采用的基本图的文章。在这篇文章中,我将会讨论结构图,这是已经在 UML 2 中提出的一种新图种类。由于本系列文章的目的是使人们了解记号元素及它们的含意,该文主要关注类图。你很快就会知道这样做的理由。随后的文章将会覆盖结构范畴中包含的其它图。
51CTO推荐 专题:UML统一建模语言
这是关于统一建模语言、即UML 里采用的基本图的文章。在这篇文章中,我将会讨论结构图,这是已经在 UML 2 中提出的一种新图种类。由于本系列文章的目的是使人们了解记号元素及它们的含意,该文主要关注类图。你很快就会知道这样做的理由。随后的文章将会覆盖结构范畴中包含的其它图。
我也想提醒读者,这一系列文章是关于 UML 记号元素的,所以这些文章并不意味着为建模的最好方式提供指导方针,或是该如何决定哪些内容应该首先被建模。相反的,该文及本系列文章的目的主要是帮助大家对于记号元素 -- 语法和含义有一个基本的理解。借由这些知识,你应该可以阅读图,并使用正确的记号元素创建你自己的图。
这篇文章假定你对面向对象的设计已经有了基本的理解。你们当中如果有人需要一些面向对象概念的帮助,那么可以访问http://java.sun.com/docs/books/tutorial/java/concepts/,来获得Sun公司关于面向对象编程的简短指导。阅读 “什么是类?”和 什么是继承?” 章节,将提供给你足够的理解,并对该文的阅读会有所帮助。另外,David Taylor的书《 Object-Oriented Technologies: A Manager's Guide》提供了面向对象设计的优秀,高水平的说明,而无需对计算机编程有高深的理解。
UML 2 中的阴和阳
在 UML 2 中有二种基本的图范畴:结构图和行为图。每个 UML 图都属于这二个图范畴。结构图的目的是显示建模系统的静态结构。它们包括类,组件和(或)对象图。另一方面,行为图显示系统中的对象的动态行为,包括如对象的方法,协作和活动之类的内容。行为图的实例是活动图,用例图和序列图。
大体上的结构图
如同我所说的,结构图显示建模系统的静态结构。关注系统的元件,无需考虑时间。在系统内,静态结构通过显示类型和它们的实例进行传播。除了显示系统类型和它们的实例,结构图至少也显示了这些元素间的一些关系,可能的话,甚至也显示它们的内部结构。
贯穿整个软件生命周期,结构图对于各种团队成员都是有用的。一般而言,这些图支持设计验证,和个体与团队间的设计交流。举例来说,业务分析师可以使用类或对象图,来为当前的资产和资源建模,例如分类账,产品或地理层次。架构师可以使用组件和部署图,来测试/确认他们的设计是否充分。开发者可以使用类图,来设计并为系统的代码(或即将成为代码的)类写文档。
特殊的类图UML 2 把结构图看成一个分类;这里并不存在称为“结构图”的图。然而,类图提供结构图类型的一个主要实例,并为我们提供一组记号元素的初始集,供所有其它结构图使用。由于类图是如此基本,本文的剩余部分将会把重点集中在类图记号集。在本文的结尾,你将对于如何画UML 2类图有所了解,而且对于理解在后面文章中将涉及的其他结构图有一个稳固的基础。
基础
如先前所提到的,类图的目的是显示建模系统的类型。在大多数的 UML 模型中这些类型包括:
- 类
- 接口
- 数据类型
- 组件
UML 为这些类型起了一个特别的名字:“分类器”。通常地,你可以把分类器当做类,但在技术上,分类器是更为普遍的术语,它还是引用上面的其它三种类型为好。
类名
类的 UML 表示是一个长方形,垂直地分为三个区,如图 1 所示。顶部区域显示类的名字。中间的区域列出类的属性。底部的区域列出类的操作。当在一个类图上画一个类元素时,你必须要有顶端的区域,下面的二个区域是可选择的(当图描述仅仅用于显示分类器间关系的高层细节时,下面的两个区域是不必要的)。图 1 显示一个航线班机如何作为 UML 类建模。正如我们所能见到的,名字是 Flight,我们可以在中间区域看到Flight类的3个属性:flightNumber,departureTime 和 flightDuration。在底部区域中我们可以看到Flight类有两个操作:delayFlight 和 getArrivalTime。
图 1: Flight类的类图
类属性列表
类的属性节(中部区域)在分隔线上列出每一个类的属性。属性节是可选择的,要是一用它,就包含类的列表显示的每个属性。该线用如下格式:
name : attribute type |
flightNumber : Integer |
继续我们的Flight类的例子,我们可以使用属性类型信息来描述类的属性,如表 1 所示。
表 1:具有关联类型的Flight类的属性名字
|
在业务类图中,属性类型通常与单位相符,这对于图的可能读者是有意义的(例如,分钟,美元,等等)。然而,用于生成代码的类图,要求类的属性类型必须限制在由程序语言提供的类型之中,或包含于在系统中实现的、模型的类型之中。
在类图上显示具有默认值的特定属性,有时是有用的(例如,在银行账户应用程序中,一个新的银行账户会以零为初始值)。UML 规范允许在属性列表节中,通过使用如下的记号作为默认值的标识:
name : attribute type = default value |
举例来说:
balance : Dollars = 0 |
显示属性默认值是可选择的;图 2 显示一个银行账户类具有一个名为 balance的类型,它的默认值为0。
图 2:显示默认为0美元的balance属性值的银行账户类图。