UML基础之Class Diagram

UML中,类图的使用最为广泛,一个类图包括三部分:

  • properties
    • attribute 指普通的变量 它有以下几个性质
      • visibility “-”表示此变量为private,“+”表示为public,“#”表示protected,“~”表示package
      • name 指变量的名称
      • type 指变量的类型
      • multiplicity 多样性
      • default values 默认值
      • {property-string} 比如{readOnly}表示此变量只读,而默认情况下为{unrestricted}表示可修改的
    •  
      • 例如:
        - name: String [1] = "Untitled" {readOnly}
         
    • association(关联) 指的是一个对象在类中的引用,关联关系在图中的表示为一条带箭头的实线,它从source class指向target class,在线的两端有“0...1”、“1”、“*”这样的关系。
  • 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>> 源端需要目标端的实现

         要降低元素之间的依赖程度,要防止循环依赖。

  • Constraint Rules 限制条件一般写在{}中,如:{限制名称:限制条件解释},在Design by Contract有三种情况:
    • post-condition (事后条件) 限制操作后应该得到的结果
    • pre-condition(事先条件) 限制操作之前应该有如何的操作
    • invarian(不变条件) 限制操作中,类中某个条件不会变,如一个账户,在增加xx钱,再减少xx钱,余额是一定的。
  • 补充1:聚集(aggregation)和组合(composition),这个是需要从上下文的语义关系才能看出来的。聚集的意思是:当需要对“整体/部分”关系建模时,其中一个类描述了一个较大的事物(“整体”),它有较小的事物(“部分”)组成。把这种关系称为聚集,它描述了“has a”的关系,意思是整体对象拥有部分对象,用一条直线加上一个空菱形表示,空菱形指向整体一端,例如汽车对象和发动机、轮子对象的关系。组合使用一条直线加上一个实菱形表示,与聚集的区别是,两个类之间的关系式(contains a),两个类之间是强关联,一个类销亡,另一个类也肯定消亡。
  • 补充2:http://www.iteye.com/topic/37302
  • 补充3:当需要表示静态的属性或方法时,须在相应的属性和方法下面画一条实线。当命名接口时,需要在接口名上方加上<<interface>>标签。

猜你喜欢

转载自uuuvvv.iteye.com/blog/575190