新书速览|《UML 2.5基础、建模与设计实践》新书速览|《UML 2.5基础、建模与设计实践
类是对一组具有相同属性、操作、关系和语义的对象的抽象,主要包括名称(Name)部分、属性(Attribute)部分和操作(Operation)部分。在UML中,类图用一个矩形框表示,它包含3个区域,最上面是类名,中间是类的属性,最下面是类的方法,如图5.1所示。一个具体的类图如图5.2所示。
图5.1 类图 图5.2 类说明
1)名称
每个类都必须有一个能和其他类进行区分的名称,类的名称部分是不能省略的,其他组成部分可以省略。类的名称是一个字符串,要求是由字符、数字、下画线组成的唯一字符串。表示方法有两种:
(1)简单名:如图5.2中的Account,它只是一个单独的名称。
(2)全名:也称为路径名,就是在类名前面加上包的名称,例如图5.2中的Business::Account。[f1]
2)属性
属性描述了类在软件系统中代表的事物(即对象)所具备的特性。类可以有任意数目的属性,也可以没有属性。类如果有属性,则每一个属性都必须有一个名字,例如图5.2中的Account类中的banlance属性。另外,属性还可以有其他的描述信息,如可见性、数据类型、默认值等。
在UML中,类属性的语法为:
[可见性] 属性名 [:类型] [=初始值] [{属性字符串}]
说明如下:
- 可见性:类中属性的可见性主要包括公有(Public)、私有(Private)和受保护(Protected)。在UML中,用“+”表达公有类型,用“-”表达私有类型,用“#”表达受保护类型。UML的类中不存在默认的可见性,如果没有显示任何一种符号,就表示没有定义该属性的可见性。
- 属性名:每个属性都必须有一个名字用以区别于类中的其他属性,这是类的一个特性。属性名由描述所属类的特性的名词或名词短语组成。按照UML的约定,单字属性名小写。如果属性名包含多个单词,那么这些单词要合并,并且除了第一个单词之外其余单词的首字母要大写。例如,在图5.2中balance是属性名,是私有属性。
- 类型:说明属性的数据类型。在类的图标里,可以指定每个属性值的类型。可能的类型包括字符串(string)、浮点型(float)、整型(int)和布尔型(boolean)(以及其他的枚举类型)。指明类型时,需要在属性值后面加上类型名,中间用冒号隔开。还可以为属性指定一个默认值。
- 初始值:为了保护系统的完整性,防止漏掉取值或被非法的值破坏系统的完整性,可以设定属性的初始值。图5.2中的balance属性的数据类型是double,且初始值等于1。
- 属性字符串:属性字符串用来指定关于属性的其他信息,例如某个属性应该是永久的。任何希望添加在属性定义字符串里又没有合适地方可以加入的规则,都可以放在属性字符串里。
3)操作
操作是对类的对象所能做的事务的一个抽象。一个类可以有任意数量的操作或者根本没有操作。类如果有操作,则每一个操作也都有一个名字。其他可选的信息包括可见性、参数的名字、参数类型、参数默认值和操作的返回值的类型等。
在UML中,类操作的语法为:
[可见性] 操作名 [(参数表)] [:返回类型] [{属性字符串}]
说明如下:
- 可见性:类中操作的可见性主要包括公有(Public)、私有(Private)、受保护(Protected)和包内公有(Package)。在UML中,公有类型用“+”表示,私有类型用“-”表示,受保护类型用“#”表示,包内公有类型用“~”表示。
- 操作名:用来描述所属类的行为的动词或动词短语。
- 参数表:一些按顺序排列的属性定义了操作的输入。该项是可选的,即操作不是必须有参数。参数的定义方式为“名称:类型”。若存在多个参数,则各个参数用逗号隔开。参数可以具有默认值。
- 返回类型:是可选的,即操作不是必须有返回类型。绝大部分编程语言只支持一个返回值。具体的编程语言一般要加一个关键字void来表示无返回值。
- 属性字符串:在操作的定义中加入一些除了预订义元素之外的信息。
像前面给类的属性指定附加信息一样,也可以给操作指定附加信息。在操作名后面的括号中可以说明操作所需要的参数和参数的类型。有一种操作叫作函数(Function),它在完成操作后要返回一个返回值,可以指明函数的返回值及返回值的类型。
例如,图5.2中共有两个操作,分别是Deposite(Amount:double):int和ComputeInterest(),其中Amount:double是参数列表,int是操作返回值的类型。
4)职责
职责位于操作部分下面的区域,可以用来说明类要做什么或说明另一个类的信息。类的职责可以是一个短语或一个句子。在UML中,把职责列在类图底部的分隔栏中。如图5.3所示,借阅者类的职责是借阅者可以从图书管理系统中借阅图书和归还图书。
5)约束
说明类的职责是消除二义性的一种非形式化的方法,形式化的方法是使用约束。约束指定了该类所要满足的一个或多个规则。在UML中,约束是用{}的格式写在类的边上,指定个别属性的取值范围。
花括号中的文本指定了该类所要满足的一个或者多个规则。例如,假设想指定借阅者类的类别只能是教师、学生或者行政管理人员(也就是说给借阅者类的 “类别”属性加上约束),可以在借阅者类图标的旁边写一个约束“{类别=教师 or 学生or 行政管理人员}”,如图5.3所示。