学习设计模式就不能不先学习UML类图
学习设计模式就不能不先学习UML类图,在面向对象编程中,类是对某一种具有相同特征的事物的抽象归纳。类图则展示了一组类、接口和协作以及它们之间的关系。类图在系统分析和设计阶段发挥着重要的作用,是编码和测试的重要模型依据。
UML类图由类、接口、注释等基本元素和类与类之间、类与接口之间的关系所组成。首先我们来看基础元素。
1. 类
类的UML图由三部分组成:类名、属性和方法。
类名如果用斜体书写,则代表是抽象类,否则表示是具体的类。
属性描述了类的成员变量以及变量的类型,可以根据需要只列出重要的成员变量。
方法(或操作)描述类的方法以及方法的返回类型,同样可以根据需要只列出重要的方法。
在属性和方法前都可以附加表示访问权限的修饰符。访问权限在面向对象中同样具有非常重要的作用,是面向对象封装性的基础。
修饰符 | 权限 | 修饰符 | 权限 |
---|---|---|---|
+ | public | # | protected |
- | private | 无 | 默认 |
其中默认权限在Java中表示该属性或方法只能被同一包下的类访问。
下面是一个类的UML图的示例:
2. 接口
接口其实也是一种特殊的类,因此接口的UML图和类的UML图极为相似,第一部分是接口的名称,必须用斜体表示,顶端要用« interface »修饰。第二部分是接口中的常量。第三部分是方法(操作)。由于接口中的常量和方法都是public的权限,所以在常量和方法名之前都要用加号(+)进行修饰。下面是接口UML图示例:
3. 注释
UML中用一个右上方带卷角的长方形表示注释,并且用虚线将注释与其所注释的内容相连接。实例如图所示:
4.继承关系
在UML中用连接两个类的带空心三角形的实线表示继承关系,起始端是子类,终点端是父类,通常父类在上,子类在下。示例如图所示: 所表示的Java代码为:
public class Father{
...
}
class Son extends Father{
...
}
5.实现关系
一个类实现了一个接口,则该类与该接口之间就是实现关系,在UML中用带空心三角形的虚线连接类与接口,起始端是类,终点端是接口。示例如图: 所表示的Java代码为:
public interface A{
void method();
}
class B implements A{
public void method(){
...
}
}
6.依赖关系
如果B类作为参数被A类中的某个方法中使用,则A类和B类的关系就是依赖关系,即A依赖于B。在UML中用带箭头的虚线连接具有依赖关系的两个类,虚线起始端是A,终点端是B。示例如图: 表示的Java代码为:
public class Person{
public void work(Bus bus){
bus.drive();
}
}
public class Bus{
public void drive(){
...
}
}
7.关联关系
如果B类作为A类的一个属性存在,则A、B之间具有关联关系,称A关联于B。在UML中用带箭头的实线连接两个具有关联关系的类。起始端是A类,终端是B类。关联关系有三种类型,单向关联,双向关联,自关联。 三种关联的UML图:
8.聚合关系
聚合关系是关联关系的一种(弱关联),与关联不同的是聚合体现的是整体和个体的关系,这里的整体和个体是可以分离的个体可以独立于整体而存在,例如火车站中的火车。二者是has-a的关系。
在UML中用带空心菱形头和箭头的实线表示聚合关系。菱形头指向整体,箭头指向个体。示例如图:
9.组合关系
组合关系也是关联关系中的一种(强关联),是一种contains-a的关系,一旦整体对象不存在,部分对象也不会存在,部分和整体有着相同的生命周期。代码上表示为A类中的成员变量是B类的申明的对象,B的对象在A对象创建时被创建。
在UML中用带实心菱形和箭头的实线表示组合关系。菱形头指向A类,箭头指向B类。示例如图: