UML中,类图的使用最为广泛,一个类图包括三部分:
- properties
- attribute 指普通的变量 它有以下几个性质
- visibility “-”表示此变量为private,“+”表示为public,“#”表示protected,“~”表示package
- name 指变量的名称
- type 指变量的类型
- multiplicity 多样性
- default values 默认值
- {property-string} 比如{readOnly}表示此变量只读,而默认情况下为{unrestricted}表示可修改的
- visibility “-”表示此变量为private,“+”表示为public,“#”表示protected,“~”表示package
-
- 例如:
- name: String [1] = "Untitled" {readOnly}
- 例如:
- association(关联) 指的是一个对象在类中的引用,关联关系在图中的表示为一条带箭头的实线,它从source class指向target class,在线的两端有“0...1”、“1”、“*”这样的关系。
- attribute 指普通的变量 它有以下几个性质
- multiplicity
- 属性的多样性
- Optional 表示下界为0
- Mandatory 表示下界大于等于1
- Single-valued 表示上界为1
- Multivalued 表示上界大于等于1 在多值中如果有特殊含义,可以在属性的后面指明{Object},而且当多值中有重复的值可以{nonunique},不允许有重复的数据时用{unique}表示
- 关联的多样性
- 1 表示1v1的关联关系
- 0...1 表示0到1的关系
- * 表示0到n的关系
- 属性的多样性
- bidirectional association(双向关联) 用带双箭头的实线表示 在程序设计的时候最好让一端来控制整体的关联关系,如果可能的情况下,选择单值的一端。这就需要从属(slave end)的一端把原本封装的数据泄漏(leak)给主控端(master end)。
- operations 表示类中的方法 它的语法如:
visibility name (parameter-list) : return-type {property-string}
- visivility 与变量中的意思一致
- name 方法的名称
- parameter-list 指方法中的参数
- return-type 指方法的返回值
- porperty-string 指应用到此操作中的一些性质值,比如用{query}来表示本操作只会从类中取值,不会改变系统状态,而是用{modifier}表示会改变系统状态。
- 如下:
+ balanceOn (date: Date = default value) : Money
- generalization(泛化) 子类与父类之间的继承关系,子类可以overwrite父类的方法或参数;还可以实现多态(polymorphism)。表示“is a kind of”的关系
- notes and comments 可以对类做注释,之间用虚线表示,无箭头。
- dependency(依赖) 表示两个元素之间,如果一个发生改变,也会影响到另一个,之间用一条虚线加箭头表示。在类中,依赖的关系有如下几种:一个类向另一个发送消息;一个类把另一个当做本类数据的一部分;一个类当做另一个类方法中的参数。依赖关系应该被谨慎控制,不然我们对程序做的任何改动都会造成连锁反应。应该把表现与逻辑解耦。依赖的情况,可以用很多关键字表示。
- <<call>> 源端(调用方、元素)调用目标(target)的方法
- <<create>> 源端(调用方)创建目标对象
- <<derive>> 源端(调用方)由目标对象衍生出来(?? )
- <<instantiate>> 源端(调用方)是目标端的一个实例(如果源端是一个类,那么目标端就是一个元类(metaclass))
- <<permit>> 目标端允许源端访问它的私有(private)属性
- <<realize>> 源端是目标端的一个实现(implementation)
- <<refine>> 修饰表示不同语义等级之间的关系(?? )
- <<substitute>> 源端可以替代目标对象
- <<trace>>
- <<use>> 源端需要目标端的实现
- <<call>> 源端(调用方、元素)调用目标(target)的方法
要降低元素之间的依赖程度,要防止循环依赖。
- Constraint Rules 限制条件一般写在{}中,如:{限制名称:限制条件解释},在Design by Contract有三种情况:
- post-condition (事后条件) 限制操作后应该得到的结果
- pre-condition(事先条件) 限制操作之前应该有如何的操作
- invarian(不变条件) 限制操作中,类中某个条件不会变,如一个账户,在增加xx钱,再减少xx钱,余额是一定的。
- post-condition (事后条件) 限制操作后应该得到的结果
- 补充1:聚集(aggregation)和组合(composition),这个是需要从上下文的语义关系才能看出来的。聚集的意思是:当需要对“整体/部分”关系建模时,其中一个类描述了一个较大的事物(“整体”),它有较小的事物(“部分”)组成。把这种关系称为聚集,它描述了“has a”的关系,意思是整体对象拥有部分对象,用一条直线加上一个空菱形表示,空菱形指向整体一端,例如汽车对象和发动机、轮子对象的关系。组合使用一条直线加上一个实菱形表示,与聚集的区别是,两个类之间的关系式(contains a),两个类之间是强关联,一个类销亡,另一个类也肯定消亡。
- 补充2:http://www.iteye.com/topic/37302
- 补充3:当需要表示静态的属性或方法时,须在相应的属性和方法下面画一条实线。当命名接口时,需要在接口名上方加上<<interface>>标签。