UML 类图
示例
类(class)
下图“动物”矩形框,就代表一个类(class)。
类图分为三层,第一层显示类的名称,如果是抽象类,则用斜体显示;第二层是类的特性,通常就是字段和属性;第三层是类的操作,通常是方法或行为 。 注意前面的符号,“+”表示public,“-”表示private,“#”表示protected。
abstract class Animal {
}
接口(interface)
下图“飞翔”表示一个接口图,与类图的区别主要是顶端有<<interface>>显示。第一行是接口名称,第二行是接口方法。接口还有另一种表示方法,俗称棒棒糖表示法,比如图中的唐老鸭类就是实现了“讲话人”的接口。
interface IFly {
void fly();
}
interface ILanguage {
void speak();
}
继承(extends)
动物、鸟、鸭、唐老鸭之间的关系符号表示继承关系,继承关系用==空心三角形 + 实线==来表示。
class Bird extends Animal {
}
实现(implements)
大雁会飞,所以这里让它实现了飞翔接口。实现接口用==空心三角形 + 虚线==来表示。
class WideGoose implements IFly {
}
关联(associatin)
企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。企鹅需要“知道”气候的变化,需要“了解”气候规律。当一个类“知道”另一个类时,可以用关联(association)。关联关系用==实线箭头==来表示。
class Penguin extends Bird {
// 企鹅 Penguin 持有气候 Climate 的引用
private Climate climate;
}
聚合(aggregation)
大雁与雁群这两个类,大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以有多只大雁。所以它们之间就满足聚合 (Aggregation)关系。聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。聚合关系用==空心的菱形+实线箭头==来表示。
class WideGooseAggregation {
// 在雁群 WideGooseAggregation 类中有大雁数组对象 arrayWideGoose
private WideGoose[] arrayWideGoose;
}
合成/组合(composition)
合成(composition,也有翻译成“组合”)是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。在这里鸟和其翅膀就是合成(组合)关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。合成关系用==实心的菱形+实线箭头==来表示。
另外,你会注意到合成关系的连线两端还有一个数字“1”和数字“2”,这被称为基数。表明这一端的类可以有几个实例,很显然,一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就用“n”来表示。关联关系、聚合关系也可以有基数。
class Bird {
// 在鸟 Bird 类中声明一个翅膀 wing 对象
private Wing wing;
public Bird() {
// 初始化时,示例化翅膀 wing,它们之间同时生成
this.wing = new Wing();
}
}
依赖(dependency)
动物几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。也就是说,动物依赖于氧气和水。它们之间是依赖关系(Dependency),用==虚线箭头==来表示。
abstract class Animal {
// 依赖关系:通过参数临时使用 Oxygen、Water
public void metabolism(Oxygen oxygen, Water, water) {
}
}
好了,以上就是 UML 类图中的基本图示。“UML类图也不是一学就会的,需要有一个慢慢熟练的过 程。所谓学无止境,其实这才是理解面向对象的开始呢~。”