UML精粹之类图

UML精粹之类图

本博客源自《UML精粹》一书,向Martin Fower致敬。UML图使用PlantUML的DSL绘制。

类的属性:

形如:visibility name: type multiplicity = default {property-string}
示例:- name: String [1] = "Untitled" {readOnly}

visibility: public(+), private(-), protected(#)
name: 字段名
type: 字段类型
Multivalued(多指的)意味着上限大于1,通常是*
default value: 在创建期间没有指定值时新创建对象的值
{property-string}: 指出属性附加的性质

DSL

@startuml							
Class Order {
	+ dateReceived: Date [0..1]
	+ isPrepaid: Boolean [1]
}
@enduml

效果图

类的关联

类的关联(表示属性的一种方法):
	一根两个类之间的实线:方向从源类到目标类
	性质的名称及多重性放在关联的目标端
	能够展示线两端的多重性
	
	
类的关联与属性相比较:
	倾向于小的东西使用属性,例如日期和布尔,值类型
	更重要的类,使用关联,例如顾客和订单
	为图中重要的类使用类方框

DSL

@startuml
Order "1" --> "*" OrderLine : + lineItems
@enduml

效果图           与之等价的类属性图

      

多重性

多重性(指出多少对象可以填充该性质):
	"1", "0..1", "*", "2..4"
	关于多重性的术语:
		Optional(可选的)意味着下限0
		Mandatory(强制的)意味着下限为1,也可能更多
		Single-valued(单值的)意味着上限为1
		Multivalued(多指的)意味着上限大于1,通常是*
		
		{ordered} 排序
		{nonunique}允许重复
		{bag}无序、非唯一
	属性多重性的默认值为1,但图可能省略了多重性

性质的编程解释

性质的编程解释(方式不止一种):
	Java的字段与C#(支持性质的语言)的属性对比
	使用私有字段是对图的一种非常聚焦于实现的解释
	面向接口的解释吧重点放在获取方法上而不是潜在数据上(客户不能辨别哪些是字段,哪些是计算的结果值)
	你几乎不会在类图中看到集合类

双向关联

DSL

@startuml
Person "0..1" <--> "*" Car : owns >
@enduml

效果图

类的操作(一个操作包含几个方法)

操作:
	visibility name(paramter-list) : return-type {property-string}
	paramter: direction name: type = default value
	+ name(in param: String) : String {getter}
	
	return-type: 返回类型
	direction:
		输入(in),输出(out),兼有(inout)
		没有展示方向,就假设为in
	查询与修改相分离
	操作比方法范围更广,操作困难包含多个方法

DSL

@startuml
Class Order {
	+ getPrice(str: String): String
}
@enduml

效果图

泛化(继承)

泛化:
	里氏代换原则:将父类替换成子类,且一切工作正常

DSL

@startuml
Customer <|-- PersonalCustomer
Customer <|-- CorporateCustomer
@enduml

效果图

注解符和注释

注解符和注释(注释符是图中的注释):
	注解符可以单独存在
	也可以通过虚线链接到所注释的元素
	注解符可以出现在任何类型的图中

DSL

@startuml
Person "0..1" <--> "*" Car : owns >
note right of Person #blue\9932CC
  this is my
  note on this class
end note
@enduml

效果图

依赖

依赖:
	关联就包含依赖关系
	UML有许多中依赖,每一种都有特定的语义和关键词
	最有用的基本依赖:
		call:源调用目标的操作
		create:源创建目标的实例
		derive:源从目标派生
		instantiate:源是目标的实例
		permit:目标允许源访问目标的私有特性
		realize:源是目标所定义的规格或接口的实现
		refine:精化指不同语义级别之间的关系
		substitute:源矿业替代目标
		trace:用于跟踪类似需求到类
		use:源的实现目标
	通常在使用依赖时不带关键词
	不要尝试展示类图中的所有依赖

DSL

@startuml
Class01 ..> Class02 : call
@enduml

效果图

其它

约束规则:
	画类图时,做的大部分事情都是表明约束
	可以用任何事情来表示约束,前提是放入{}中
	扩展:按契约设计
	

何时使用类图:
	不要尝试使用所有的表示法
	不要为每个东西都画模型
	类图不要只聚焦于结构,而忽略了行为


更多资料:
	UML三友《UML用户指南》 《UML参考手册》

你可能感兴趣的:(UML,UML,类图,PlantUML)