彻底看懂 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

 

 

  • 20
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值