内容源于《大话设计模式》。
类图:
类图分三层,第一层显示类的名称,如果是抽象类,则用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。方法前面一般有符号,‘+’表示public,‘-’表示private,‘#’表示protected。
接口图:
继承关系:
空心三角形+实线。
实线接口:
空心三角形 + 虚线
关联:
当一个类需要知道另一个类时,可以用关联。实线箭头。
例如企鹅需要知道气候的变化。
聚合:
聚合表示一种弱拥有关系,对象A包含对象B,但对象A消失后,不会对B产生影响。
例如雁群与大雁,大雁是雁群的一部分,但雁群分散后,大雁不会死。
再比如你有一辆车,你那啥了,车还在。
另一个问题是,可以看到聚合和前面的关联的表现形式非常相似。实际上写法上没有任何区别,主要区别还是在意义上,关联主要表示的是一种平等关系,比如你和你的朋友,但聚合相对强调一种上下级包含关系,是不平等的。
组合:
组合表示一种强拥有关系。
例如,鸟和翅膀,鸟没了,翅膀也不能单独存在了。
再比如,车和车轮,车没了,车轮也不能单独存在。
组合关系连线两端还有数字,表示这一端的类可以有几个实例。
在这个例子中表示一个鸟可以有两个翅膀。
实际上前面两个,关联和聚合也可以标上这样的表示。其中“0..*”表示任意个(包括0),“1..*”表示至少一个。
用专业一点的术语来描述组合和聚合的区别,主要就是变量生命周期不同,组合中,被包含对象(车轮)是在包含对象(车)中的一个属性,然后构造出来的,当包含对象(车)被析构时,被包含对象(车轮)也会被析构掉。而聚合则不这样,被包含对象是采用一次赋值操作(人.车 = 车),所以当包含对象(人)被析构时,车仍单独存在。
依赖关系:
一般是不在作用域的变量引用,例如下面的示例代码,氧气和谁不是动物的特性,但通过类方法传递过来可使用。
、