UML中类的建模全解析
立即解锁
发布时间: 2025-08-16 02:43:47 阅读量: 2 订阅数: 11 

UML用户指南:从入门到精通
### UML 中类的建模全解析
#### 1. 类在系统建模中的基础概念
在系统建模里,类是面向对象系统极为关键的构建模块。类是对具有相同属性、操作、关系和语义的一组对象的描述。例如在 UML 里,一个类通常用矩形来图形化表示。
类名在其所在的包内必须是唯一的。类名可以是由字母、数字和特定标点符号组成的文本,实际应用中,类名一般是从系统词汇表中选取的简短名词或名词短语,并且每个单词的首字母通常大写,像“Customer”或“TemperatureSensor”。
类名有简单名和路径名之分。简单名就是类自身的名称,而路径名是类名加上其所在包的名称。比如在 Java 里,`java.util.ArrayList` 就是路径名,`ArrayList` 则是简单名。
#### 2. 类的属性
属性与聚合语义相关,它是类的一个命名属性,描述了该属性实例可能持有的值的范围。一个类可以有任意数量的属性,也可以没有属性。
属性代表了所建模事物的某种特性,并且该类的所有对象都共享这些特性。例如,每面墙都有高度、宽度和厚度;在对客户进行建模时,每个客户可能有姓名、地址、电话号码和出生日期等属性。
在图形表示上,属性列在类名下方的一个区域内。属性名和类名一样可以是文本,实际中通常是代表其所属类某种特性的简短名词或名词短语,除第一个字母外,每个单词的首字母大写,如“name”或“loadBearing”。还可以进一步指定属性的其他特性,如将其标记为只读或由类的所有对象共享,也可以说明其类和可能的默认初始值。
#### 3. 类的操作
操作是可以从类的任何对象请求以影响其行为的服务的实现。换句话说,操作是可以对对象执行的某种行为的抽象,并且该类的所有对象都共享这些操作。
一个类可以有任意数量的操作,也可以没有操作。例如在 Java 的 `awt` 包中的 `Rectangle` 类,其所有对象都可以进行移动、调整大小或查询属性等操作。调用操作时,通常(但不总是)会改变对象的数据或状态。
操作名和类名一样可以是文本,实际中通常是代表其所属类某种行为的简短动词或动词短语,除第一个字母外,每个单词的首字母大写,如“move”或“isEmpty”。还可以指定操作的其他特性,如将其标记为多态或常量,或者指定其可见性,也可以通过说明其签名(包括所有参数的名称、类型和默认值,以及函数的返回类型)来进一步指定操作。
#### 4. 类的属性和操作的组织
在绘制类图时,无需一次性展示类的所有属性和操作。实际上,多数情况下也无法做到,因为属性和操作数量过多难以在一个图中呈现,而且通常也没必要,因为特定视图可能只关注其中一部分。
可以选择省略类的部分或全部属性和操作,空的区域并不意味着没有属性或操作,只是未选择展示。可以在每个列表末尾用省略号(“...”)明确表示还有更多属性或操作未展示。
为了更好地组织长列表的属性和操作,可以使用构造型为每个组添加描述性类别。
#### 5. 类的职责
职责是类的一种契约或义务。创建类时,意味着该类的所有对象都具有相同类型的状态和行为。从更抽象的层面看,对应的属性和操作就是类履行职责的具体体现。
例如,`Wall` 类负责了解墙的高度、宽度和厚度;在信用卡应用中,`FraudAgent` 类负责处理订单并判断其合法性、可疑性或欺诈性;`TemperatureSensor` 类负责测量温度并在温度达到特定点时发出警报。
在建模类时,一个好的起点是明确词汇表中事物的职责。像 CRC 卡片和基于用例的分析等技术在这方面非常有帮助。一个类可以有任意数量的职责,但实际上,每个结构良好的类至少有一个职责,最多只有几个。随着模型的细化,需要将这些职责转化为一组能最好地履行类职责的属性和操作。
职责可以用自由格式的文本表示,实际中通常写成短语、句子或(最多)简短的段落。在图形上,职责可以绘制在类图标底部的单独区域内。
#### 6. 类的其他特性
除了属性、操作和职责这些常见特性外,有时还需要可视化或指定其他特性,如单个属性和操作的可见性、操作的特定语言特性(如是否为多态或常量),甚至类的对象可能产生或处理的异常。这些在 UML 中都可以表达,但属于高级概念。
在构建模型时,几乎创建的每个抽象都是某种类型的类。有时需要将类的实现与其规范分离,在 UML 中可以使用接口来实现。
当构建更复杂的模型时,会经常遇到一些常见类型的类,如代表并发进程和线程的类,或代表物理事物(如 applet、Java Beans、COM + 对象、文件、网页和硬件)的类。UML 为此提供了活动类(代表进程和线程)、组件(代表物理软件组件)和节点(代表硬件设备)。
类很少单独存在,构建模型时通常会关注相互交互的类组。在 UML 中,这些类组形成协作关系,通常
0
0
复制全文


