UML类图简明教程

作者:郭孝星
微博:郭孝星的新浪微博
邮箱:[email protected]
博客:http://blog.csdn.net/allenwells
Github:https://github.com/AllenWells

类图用于描述系统中所包含的类以及它们之间的相互关系,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。

一 类图结构

类封装了数据和行为,它是具有相同属性、操作和关系的对象集合的总称。

在系统分析与设计阶段,类通常分为三种:

  • 实体类:实体类是系统需求中的实体,实体类通常保存在永久记忆体中,一般使用数据库表或文件来记录,实体类既包括存储数据的类、传递数据的类和操作数据的类。实体类通常来源于需求说明中的名词(例如:用户、产品)。
  • 控制类:控制类体现了应用的执行逻辑,提供相应的业务操作,将控制类抽象出来可以降低界面和数据库之间的耦合度。控制类通常有动词+名词来命名(例如:UserRegister)。
  • 边界类:边界类用于对外部用户与系统之间的交互对象进行抽象,主要包括界面类(例如:对话框、窗口、菜单)。

类的组成

如下图所示:

UML类图简明教程_第1张图片

  • 类名:类的名字
  • 属性:类的成员变量
  • 操作:类的成员方法

属性的表示方式如下所示:

可见性 名称:类型[=缺省值]
  • 可见性:public、private和protected,在类图中分别用+、-和#表示。
  • 名称:属性的名称。
  • 类型:属性的数据类型,可以是基本数据类型,也可以是用户自定义的类型。
  • 缺省值:可选项,表示属性的初始值。

二 类图关系

2.1 关联

关联是一种结构化关系,用于表示一类对象与另一类对象之间有联系。

在UML类图中,用实线连接有关联关系的对象所对应的类。

2.1.1 双向关联

双向关联表示双向关联是双向的。

UML类图简明教程_第2张图片

2.1.2 单向关联

单向表示关联是单向的。

UML类图简明教程_第3张图片

2.1.3 自关联

自关联表示类的属性对象类型为该类本身。

UML类图简明教程_第4张图片

2.1.4 多重关联

多重关联又称为重数性关联,表示两个关联对象在数量上的对应关系。

UML类图简明教程_第5张图片

常见的多重关联如下所示:

  • 1..1 表示另一个类的一个对象只与该类的一个对象有关系
  • 0..* 表示另一个类的一个对象与该类的零个或多个对象有关系
  • 1..* 表示另一个类的一个对象与该类的一个或多个对象有关系
  • 0..1 表示另一个类的一个对象没有或只与该类的一个对象有关系
  • m..n 表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

2.2 聚合/组合

2.2.1 聚合

聚合表示整体和部分关系,在聚合关系中成员对象是整体的对象的部分,但是成员对象可以脱离整体对象独立存在。

在UML中,聚合关系用带空心菱形的直线表示,如下图所示:

UML类图简明教程_第6张图片

在代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的参数注入到整体对象中,如下所示:

public class Car {  
    private Engine engine;  

    //构造注入 
    public Car(Engine engine) 
    {  
        this.engine = engine;  
    }  

    //设值注入 
    public void setEngine(Engine engine) 
    {  
        this.engine = engine;  
    }  

}  

public class Engine {  
    ……  
}  

2.2.2 组合

组合关系也表示整体和部分的关系,但是在组合关系汇总整体对象可以控制成员对象的生命周期,一旦整体对象不存咋了,成员对象也将不存在。

在UML中,组合关系用带实心菱形的直线表示,如下图所示:

UML类图简明教程_第7张图片

在代码实现组合关系时,通常在整体类的构造方法中直接实例化成员类,如下所示:

public class Head {  
    private Mouth mouth;  

    public Head() 
    {  
        mouth = new Mouth(); //实例化成员类 
    }  
}  

public class Mouth {  
    ……  
}  

2.3 依赖

依赖关系是一种使用关系,依赖关系通常体现在某个类的方法使用另一个类的对象作为参数。

在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方,如下图所示:

UML类图简明教程_第8张图片

在代码实现依赖关系时,通常有三种方式,如下所示:

  • 将一个类的对象作为另一个类中方法的参数
  • 在一个类的方法中将另一个类的对象作为其局部变量
  • 在一个类的方法中调用另一个类的静态方法
public class Driver {  
    public void drive(Car car) 
    {  
        car.move();  
    }    
}  

public class Car {  
    public void move() 
    {  
        ……  
    }    
}  

2.4 继承

继承关系用来描述父类与子类自检的关系。

在UML中,泛化关系用带空心三角形的直线来表示,如下图所示:

UML类图简明教程_第9张图片

在代码实现时,我们使用面向对象的继承机制来实现继承关系,如下所示:

//父类 
public class Person {  
    protected String name;  
    protected int age;  

    public void move()
    {  
        ……  
    }  

    public void say() 
    {  
        ……  
    }  
}  

//子类 
public class Student extends Person {  
    private String studentNo;  

    public void study() 
    {  
        ……  
    }  
}  

//子类 
public class Teacher extends Person {  
    private String teacherNo;  

    public void teach()
    {  
        ……  
    }  
}  

2.5 接口与实现

接口之间也可以有像类之间关系那样的继承关系和依赖关系,但是接口和类之间还存在着一种实现关系。在实现关系中,类实现了接口中定义的所有操作。

在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示,如下图所示:

UML类图简明教程_第10张图片

在代码实现时使用implents关键字,如下所示:

public interface Vehicle {  
    public void move();  
}  

public class Ship implements Vehicle {  
    public void move()
    {  
        …… 
    }  
}  

public class Car implements Vehicle {  
    public void move()
    {  
        ……  
    }  
}

你可能感兴趣的:(综合技术,-,开发工具)