第3章 运用面向对象思想

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章 运用面向对象思想

现在到了将UML 和你前一章节学到的面向对象概念结合起来的时候了。在本章中,通过对UML 的深入学习能让你巩固所学到的面向对象概念。在本章中,将学习下列内容: ● 类的可视化表示

● 属性

● 操作

● 封装

● 职责和约束

● 类的发现

● 聚集

3.1 类的可视化表示

正如前一章中所指出的,在UML 中类的图标是一个矩形。按照UML 的约定,类名的首字母大写。放在类矩形中的偏上部。如果类名是由两个单词组成,那么将这两个单词合并,第二个单词首字母大写(如图3.1中的WashingMachine 类所示)。

另一个UML 组件是包,它的名字对类名有影响。如第一章“UML 简介”所述,包是UML 组织图形元素的单位。你现在可能会想起,UML 中包用一个一边突起的矩形来表示,它的名字是一个文字串(如图3.2所示)。

如果WashingMachine (洗衣机)类是Househould Appliances (家用电器)包的 一部分,那么这个类的名字为:Household appliances::WashingMachine 。包名 在左,类名在右,中间用双冒号隔开。这种类型的类名叫:路径名(pathname )。如图3.3所示。

图3.1 UML 类图标。 图3.2 UML 中的包

3.2 属 性

属性是类的一个特性。它描述了类的对象(也就是类的实例)所具有的一系列特性值。一个类可以具有一个到多个属性。按照UML 的约定,单字属性名小 写。如果属性名包含了多个字,这些字要合并,并且除了第一个字外其余字首字母要大写。属性名列表放在类名之下,并且和类名之间用分隔线隔开,如图3.4所示。

类的属性在该类的每个对象中都有具体值。图3.5是一个例子。注意:对象名首字母小写,后面跟一个冒号,冒号后面是该对象所属的类名,并且整个名字要带下划线。

UML 还允许指明属性的附加信息。在类的图标里,你可以指定每个属性值的类型。可能的类型包括字符串(string )、浮点数(floating-point )、整数(integer )和布尔(bool )型 图3.3 带路径名的类

图3.4 类和类的属性

图3.5 类的属性在每个该类的对象中都有具体值。

(以及其它的枚举类型)等。要指明属性值的类型,则在属性值后面加上类型名,中间用冒号隔开。还可以为属性指定一个缺省值(默认值)。图3.6说明了属性的各种表示方式。

3.3 操 作

操作(operatin )是类能够做的事情,或者你(或者另一个类)能对类做的事情。和属性名的表示类似,单字操作名小写。如果操作名包含了多个字,这些 字要合并,

并且除了第一个字外其余字首字母要大写。操作名列表放在属性名列表之下,两者之间用分隔线隔开,如图3.7所示。

和属性一样,也可以为操作指定附加信息。在操作后面的括号中可以说明操作所需要的参数和参数的类型。有一种操作叫函数(function ),它在完成操作 后要返回一个返回值。可以指明函数的返回值及返回值的类型。

图3.6 属性可以带类型和默认值。

图3.7 类的操作放在属性列表之下,并用一条分隔线与属性隔开。

上述全部的操作信息被称为操作的型构(signature )。图3.8说明了如何表达操作的型构。

3.4 属性、操作和可视化表达

到目前为止,我们只单独讨论类,并且说明如何表达类的属性和操作。实际上,你可以同时在图中表示多个类。当同时在类图中表示出多个类时,通常没必要指明这些类的所有属性和操作,这样做会使图形表示比较混乱。相反,可以只给出类名,而将属性或者操作区(或者两者全部)空着。图3.9说明了这种表示形式。

有时,只显示类的一部分属性和操作很有用。为了说明你只表示出部分操作和属性,可以在属性或操作列表的后面加上“…”来表示后面省略了一些操作或 属性。这个符号叫省略符(ellipsis ),这种省略了一个或多个属性或者操作的表示法叫做类的省略表示法(eliding a class )。图3.10说明了类的省略表示法。

如果属性或者操作数目太多,可以用构造型来组织属性或操作列表,以方便理解。构造型是UML 提供的扩展机制:它允许你创建新的模型元素以解决具体问题。第一章中已经提到过,构造型用双尖角括号(guillemets )括住的名字来表示。对属性列表,可以使用一个构造型作为部分属性的标题,如图3.11所示。

图3.8 操作的型构

图3.9 在实践中,不一定要把类的属性和操作都表示出来。

3.4 职责和约束

类图标中还可以指明另一种类的信息。在操作列表框下面还可以加上一个框,用来书写类的职责。类的职责(responsibility )描述了类必须能够做什么——

也就是类的属性和操作能完成什么任务。例如,一个洗衣机的职责是将脏衣服作为输入,输出洗干净的衣服(Take dirty clothes as input and produce clean clothes as output )。

在类的图标中,类的职责描述书写在操作列表框下面的矩形框中(参见图3.12)。

这样处理的思路是尽量消除描述类时的二义性。说明类的职责是消除二义性的一种非形式化的方法。

更形式化的方式是使用约束(constraint ),它是一个用大括号括起来的书写格式自由的文字串。大括号中的文字串说明了该类所要满足的一个或者多个约束 规则。例如,假设你要求WashingMachine 类的容量只能是16、18或者20磅中的三者选一 图3.10 省略符号说明还有没列出来的属性或操作。 图3.11 可以使用构造型来组织属性和操作列表。

(也就是说对WashingMachine 类的capacity 属性施加约束),你可以在类图标的近旁加注一个约束“{capacity=16 or 18 or 20}”,如图3.13所示。

3.5 注 释

除了上面介绍过的属性、操作、职责和约束之外,还可以在类和其它任何模型元素之上

图3.12 在类图标中,操作名列表的下面可以注名类的职责

图3.13 用大括号括起来的规则表达式限制 了洗衣机的容量值只能三者选一。

相关文档
最新文档