彻底看懂 UML 类图

官方解释为:类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。

一.  基本定义

在UML中,类使用包含类名、属性和操作且带有分隔线的长方形来表示,如定义一个Employee类,它包含属性name、age和email,以及操作modifyInfo(),在UML类图中该类如图1所示:

对应的代码如下

public class Employee {
	private String name;
	private int age;
	private String email;
	
	public void modifyInfo() {
		......
	}
}

类图分三层,

第一层显示类的名称,如果是抽象类,就用斜体显示

第二层,为类的特性,通常就是字段和属性

第三层是类的操作,通常是方法或者行为。

 

二. 方法详解

第三部分是类的操作(Operations):操作是类的任意一个实例对象都可以使用的行为,是类的成员方法。

UML规定操作的表示方式为:

                                                           可见性 名称(参数列表) [ : 返回类型]

其中:

  • “可见性”的定义与属性的可见性定义相同。
  • “名称”即方法名,用一个字符串表示。
  • “参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“,”隔开。
  • “返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回类型。

“ + ”  表示 public  “ - ”  表示 private   “ # ”  表示 protected

方法method1  对应代码

public void method1(Object par) {

        do something ......

}

操作method1的可见性为public(+),带入了一个Object类型的参数par,返回值为空(void);

操作method2的可见性为protected(#),无参数,返回值为String类型;

操作method3的可见性为private(-),包含两个参数,其中一个参数为int类型,另一个为int[]类型,返回值为int类型。

 

三. 关系

图片为标准类图关系类型的定义,太过于抽象化,下面我会列出一些常用的通俗关系

1.继承关系 : 空心三角形 +  实线

如下图所示中,Student类与Teacher类继承了Person类

//父类
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.接口关系:空心三角形 + 虚线

如下图中,Car类与Ship类都实现了Vehicle接口。

public interface Vehicle {
public void move();
}

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

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

3. 关联关系

 a.单向关联    实线箭头

例如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关联关系,如图3所示:

public class Customer {
private Address address;
……
}

public class Address {
……
}

b.双向关联   实线

例如:顾客(Customer)购买商品(Product)并拥有商品,反之,卖出的商品总有某个顾客与之相关联。因此,Customer类和Product类之间具有双向关联关系

public class Customer {
private Product[] products;
……
}

public class Product {
private Customer customer;
……
}

c. 自关联  

用一个带有箭头且指向自身的直线表示。

上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”。

4.聚合关系  空心的菱形 +  实线箭头

例如:汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,因此,汽车和发动机是聚合关系

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

public class Car {
	private Engine engine;

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

public class Engine {
	……
} 

5.组合关系  实心的菱形 +  实线箭头

例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系

public class Head {
	private Mouth mouth;

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

public class Mouth {
	……
} 

6.依赖关系  虚线箭头

动物依赖于氧气和水。他们之间是依赖关系

public abstract class Animal{
    public Metabolism (Oxygen oxygen, Water water){

    }

    //do something .......
}

编程是一门技术,更加是一门艺术。UML 类图也不是一学就会的,需要有一个慢慢熟练的过程。所谓学无止境。大家加油!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考

http://www.uml.org.cn/oobject/201211231.asp

 

 

UML的入门教程PPT,非常详细,包括各种视图和元件的用法,和许多案例描述,看过之后可以直接画图。是学习UML的非常好的选择。也可以当做UML资料来查阅。 1. 前言 1.1前言 1.2UML概述 1.3UML事物 1.4UML关系 1.5各UML图及特征 1.6各UML图的关系 1.7UML语法 1.8习题 2. 用例图 2.1用例图概要 2.2用例图中的事物及解释 2.3用例图中的关系及解释 2.4例子 2.5习题 3. 类图 3.1类图概要 3.2类图中的事物及解释 3.3类图中的关系及解释 3.4类图与代码的映射 3.5类图例子 3.6习题 4. 顺序图 4.1概要 4.2顺序图中的事物及解释 4.3顺序图与用例图和类图的关系 4.4顺序图例子 4.5 练习题 5. 协作图 5.1概要 5.2协作图中的事物及解释 5.3协作图中的关系及解释 5.4对消息标签的详细讲解 5.5协作图例子 5.6协作图与顺序图的区别和联系 5.7练习题 6. 状态图 6.1状态图概要 6.2状态图的组成 6.3状态图中的事物及解释 6.4状态的可选活动表 6.5简单的例子:对象的状态图 6.6复杂的例子:网上银行登陆系统 6.7练习 7. 活动图 7.1活动图概要 7.2活动图事物 7.3活动图关系 7.4活动图实例 7.5活动图练习 8. 构件图 8.1构件图概要 8.2构件图中的事物及解释 8.3构件图中的关系及解释 8.4构件图的例子 8.5习题 9. 部署图 9.1部署图概要 9.2部署图中的事物及解释 9.3部署图中的关系及解释 9.4部署图的例子 9.5关于部署图与构件图 9.6习题 附录 ......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值