一、概念
- 面向对象系统组织结构的核心。
- 对一组具有相同属性、操作、关系和语义的对象的抽象。可以是实物也可以是概念性事物
类图中可以包含注释和约束,可以包含包或子系统。
类图 = 类 + 关系 + 约束
二、类图包含的元素
1.类(Class)
<1> 名称
- 简单名:一个字符串表示,如,“学生”
- 路径名:一个路径表示,如,“学校::学生”
<2> 属性
类属性的语法为:[可见性] 属性名[多重性][:类型 ] [= 缺省值] [{属性字符串}]
属性不是必须的,描述了类在软件系统中代表的事物(即对象)所具备的特性。
可见性的三种标记:
+
或public
公共,可被外部对象访问;#
或protect
保护,可被本类和子类的对象访问;-
或private
私有,不可被外部对象访问。
属性名注意事项:
- 每个属性都必须有一个名字以区别于类中的其他属性。(同一个类中不能重复,必须保证唯一性)
- 属性名由描述所属类的特性的名词或名词短语组成。
- 单字属性名小写,如果属性名包含了多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。(驼峰式命名,但是第一个字母小写)
多重性:用多值表达式表达,低界..高界。低界和高界可以是一个整型数,或者是“*”。缺省表示“1..1”,表示该属性只有一个值。
例如:“姓名[0..1]:String”说明属性“姓名”可以为空或一个姓名值,数据类型为“字符串”。
属性字符串 :
- 指定关于属性的其他信息。
- 任何希望添加在属性定义字符串值但又没有合适地方可以加入的规则,都可以放在属性字符串里。
补充说明:
- 属性可以作为一个类属性来定义,这样该属性被该类的所有对象共享,类图中,类属性(操作)带有下划线。
- 对于任何一个对象,其每个属性都具有一个确定的值。而且,一般来讲,属性总是单值的。
<3> 操作
在UML中,类操作的语法为: [可见性] 操作名[(参数表)][: 返回类型] [{属性字符串}]
操作注意事项:
- 操作名采用驼峰式命名规则,且第一个字母小写。
- 参数列表可以使多个,且用逗号分隔
<4> 职责
- 类或其他元素的契约或义务。
- 自由形式的文本。
- 非形式化的方法。
<5> 约束
- 指定了类所要满足的一个或多个规则。
- 在画类图的过程中,也可以为关联、属性等加上一些约束,以规定其含义。
- 约束规则的语法:将约束条件放在括号{ }中,用自然语言或其他常见的设计语言来描述,其描述要简洁准确。
- 在理想的情况下,在所使用的程序设计语言中,约束表示一个永真的逻辑陈述。
<6> 注释
注释可以包含图形也可以包含文本。
2.接口(Interface)
接口其实是一种特殊的抽象类。不含属性,操作没有方法。(与Java中的概念相同)
接口的表示方式:一个带名称的小圆圈
抽象类的表示方式:带有构造型<<interface>>的类
3.协作(Collaboration)
详见《UML图详解(交互图)——协作图》
4.依赖关系(Dependency)
5.泛化关系(Generalization)
6.关联关系(Association)
7.实现关系(Realization)
三、使用类图的几点建议
- 在项目初始阶段,不要使用所有的符号,应从简单的概念开始。
- 不同的开发阶段应用不同的观点画类图:分析阶段用概念层类图;设计阶段用说明层类图;实现阶段用实现层类图。
- 不要为每个事物都画一个模型,应把精力放在关键的领域,画几张较为关键的图,经常使用,不断更新。
- 使用类图的最大危险是过早地陷入实现的细节,应将重点放在概念层和说明层。