下面我就根据下面这个图来讲解一下UML类图。
类图
首先,看动物那个矩形框,他就表示为一个类(Class)。类图分为三层:
- 第一层显示类的名称
- 如果是抽象类,就用斜体表示
- 第二层显示类的特性,通常是字段和属性。
- 第三层是类的操作,通常是方法和行为。
+
表示为public-
表示为private#
表示为protected
接口图
典型代表是:
- 左下角的飞翔接口图
- 与类图的区别主要是顶端有
<<interface>>
- 第一行表示为接口名称
- 第二行表示为接口方法
- 与类图的区别主要是顶端有
- 正下方的唐老鸭方框右上方类似于
棒棒糖
的东西- 这种表示方法称为棒棒糖表示法
- 圆圈旁为接口名称。
- 接口方法在实现类中出现。
- 这种表示方法称为棒棒糖表示法
类与类、类与接口之间的关系
1、继承关系
鸟继承动物,大雁、鸭、企鹅继承鸟。
继承关系用空心三角形
+实线
来表示。
箭头指向父类。
public abstract class 动物{
}
public class 鸟 extends 动物{}
public class 大雁 extends 鸟{}
public class 鸭 extends 鸟{}
public class 企鹅 extends 鸟{}
复制代码
2、实现接口
大雁会飞翔,所以大雁这个类实现了飞翔这个接口。
实现接口用空心三角形
+虚线
来表示。
箭头指向接口。
interface 飞翔{
void 飞();
}
public class 大雁 implements 飞翔{
}
复制代码
3、聚合和组合关系
这两种关系有这本质上的区别:
-
聚合
-
很多大雁聚在一起变成雁群,也可以说雁群里有雁,所以是整体和个体之间的关系,即
has-a
的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期。即雁群可以不存在了,但是孤雁仍然存在。 -
用
空心的菱形
+实线箭头
表示 -
public class 雁群{ private 大雁[] 大雁数组名 } 复制代码
-
-
组合
-
一只鸟由两个翅膀组合而成,它体现的是
contains-a
关系,这种关系比聚合更强,也称为强聚合。他同样体现的是整体与部分间的关系,但此时整体和部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。比如这只鸟死了,自然这两个翅膀也不存在了。 -
用
实心的菱形
+实线箭头
表示 -
public class 鸟{ private 翅膀 wing; public 鸟(){ wing = new 翅膀(); } } 复制代码
-
这两种关系对比着就很好理解。
4、关联
企鹅和气候有关联,企鹅需要“知道”气候的变化,需要“了解”气候规律,关联是最常见的关系,当一个类“知道”另一个类时,可以用关联。
表示形式:实线箭头
。
代码表示:
public class 企鹅{
private Climate 气候;
}
复制代码
5、依赖
凡是动物,生存都需要水和空气,这种必须的需求,我们称之为依赖关系。
表示形式:虚线箭头
代码表示:
public abstract class 动物{
public 生存(Water 水,Oxygen 空气);
}
复制代码
最后谈谈它们的作用
UML类图在实际开发中非常常见,一般项目经理或产品经理根据实际业务来确定开发中需要的类以及类的结构。
(以UML类图的形式表现出来),可能有人会说为什么搞这么麻烦,
因为确定好类图不是一个简单的工作,他需要考虑很多事情,当然也会用到很多设计模式。
只有这样,程序员开发出来的程序才有更好的健壮性和易扩展性。