UML是啥?类图是啥?UML类图怎么画?进来手把手教!!!

目录

一、什么是类图?

二、UML类图怎么画?

2.1 单个类

2.2 类之间的关系

2.2.1 泛化关系

2.2.2 实现关系

2.2.3 依赖关系

2.2.4 关联关系

单向关联

 双向关联

 自关联

2.2.5 聚合关系

2.2.6 组合关系

三、实战

制作类图的一般步骤:

需求

工具


一、什么是类图?

        UML:统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。

        类图(Class Diagram)是描述类、接口、协同以及他们之间关系的图,用来显示系统中这些概念的静态结构。类图也是其它图的基础,我们可以在类图的基础上,使用状态图、协作图、组件图和配置图等。

二、UML类图怎么画?

2.1 单个类

常见的类图和接口

除此之外还有一些表示:

  • 静态属性/方法:加上下划线,如 -ClassAttribute: Long
  • 抽象属性/方法:使用斜体表示,如 +AbstractOperation()
  • 职责:可以在操作部分的下面再添加一个区域,用来说明类的职责,即说明类或其它元素的契约或义务。
  • 约束:指定了该类所要满足的一个或多个规则,用大括号表示,如 {Some Properties}

2.2 类之间的关系

2.2.1 泛化关系

        泛化关系描述的是“is a kind of”的关系,使用带空心三角形的箭头来表示,箭头从子类指向父类:

泛化关系

下面是一个车辆Vehicle与Truck之间的泛化表示:

        车辆Vehicle与Truck之间的泛化关系

实现这种关系的Java代码如下:

class Vehicle{}
class Truck extends Vehicle{}

2.2.2 实现关系

        实现关系是关于规格说明和其实现之间的关系,它将一种模型元素与另一种模型元素连接起来,比如类和接口。实现关系将不同语义层上的元素连接起来,这种关系不仅使用于接口和类之间,也可以是类的不同等级之间的联系,如粗设计与细设计之间。

        实现一般使用带空心三角形的虚线箭头表示,箭头指向接口。下面是关于接口和实现接口类之间的标识方法:

实现关系

        下面是一个具体的接口和实现之间的例子。IUser是一个接口,VipUser是一个类,VipUser类要实现接口IUser:

实现关系举例

其Java代码可以表示成下面的形式:

interface IUser{
public void walk();
class VipUser implements IUser {
public void walk(){}
2.2.3 依赖关系

        它表示这样一种情形,对于一个元素(提供者)的某些改变可能会影响或提供消息给其它元素(客户),即客户以某种形式依赖于其它类元。

依赖关系

这主要的情形为:

  • 客户类的操作需要提供者类的参数
  • 客户类的操作返回提供者类;
  • 客户类的操作在实现中使用提供类的对象

下面举个例子来说明这三种情形:

依赖关系举例

使用Java程序来表示上面这种情形:

class Car{
public void Move(){}
class Person{
    public void Travel(Car car){ car.Move();}
    public Car BuyCar(float price){}
    public void DoSth(){Car car; ...}
}
2.2.4 关联关系

        关联关系是一种结构关系,指出了一个事物的对象与另一个事物的对象之间的语义上的连接。

        关联的任何一个连接点都叫做关联端。关联端可以有自己的角色、多重性、可见性等修饰。关联也可以有自己的名称。在UML中,关联关系用一条连接两个类的实线表示:

关联关系

        上面的图中,“拥有”为关联的名称,“客户”为类Person的角色,“交通工具”为类car的角色。角色也可以有自己的可见性,“客户”和“交通工具”前的“+”即代表其可见性为公有。关联端的“1”和“0..n”是描述的多重性,下面将会做进一步的介绍。

        关联的多重性(Multiplicity)是指有多少个对象可以参与该关联,可用来表达一个取值范围、特定值、无限定的范围或一组离散值。多重性是UML中使用最广泛的约束,主要有以下几种形式:

形式含义形式含义
0恰为00..n0到多个
1恰为11..n1到多个
0..10或13..n3到多个,至少3个
n0或多个3,5,73个或5个或7个

关联关系多重性

单向关联

        单向关联用带箭头的实线表示,箭头由源类指向目标类,这种关联实际上是带导航的关联。它指在源类中要使用目标类的对象作为成员:

单向关联

上面类之间的关系可以使用下面的Java代码来表示:

class Department{}
class Teacher {
    Department depart;
}
 双向关联

        双向关联关系不再绘制箭头,使用直线直接连接两个类即可,如下面两个类之间的关系即是双向关联关系:

双向关联

实现这种关系的Java代码可以如下表示:

class Category{
    Film film;
}
class Film {
    Category category;
}

带有角色修饰的双向关联:

带有角色修饰的双向关联

实现这种关联关系的Java代码可表示如下:

class Teacher{
    public Student aLearner;
}
class Student{
    public Teacher alnstructor;
}
 自关联

        自关联关系即一个类与自己进行关联。下面类关系的意思是employee类中有一个为employee类型的leader成员,表示员工的领导:

自关联

实现这种关联关系的Java代码可表示如下: 

public class employee{    
    private employee leader;
}
2.2.5 聚合关系

    聚合关系表示整体与部分关系的关联,一组元素组成了一个更大、更复杂的单元。聚合关系描述了“has a”的关系,在UML中聚合关系用带空心菱形头的实线来表示,头部指向整体。这种关系中的空心菱形并不是箭头,它只表明哪端是整体。聚合的双向关联的一个例子,它表示College类是University类的一个聚合成分:

聚合关联

使用Java实现的代码如下所示:

class University{
    public List<College> colleges;
}
class College {
    public University university;
}

如果是单向的聚合关系,可以使用下面的方式来表示:

单向聚合关联关系

        跟上面那个例子的区别是,这种聚合关系只在University类中声明College类的成员对象,不在College类中声明University的成员对象。使用Java代码实现如下:

class University{
    public List<College> colleges;
}
class College {
}

当然单向的聚合关系也可以表示下图的形式:

单向聚合关系表现形式

使用Java代码实现如下:

class University{}
class College {
    public University university;
}

2.2.6 组合关系

        组合关联是聚合的一种特殊情况,是更强形式的聚合(即强聚合),成员的生命周期取决于聚合的生命周期。聚合不仅控制着成员对象的行为,而且控制着成员对象的创建和解构。

在UML中,组合使用带实心菱形头的实线来表示,其菱形在整体这一端:

组合关联

上面的Triangle类由多个Side类对象组合而成,当Triangle对象创建时,Side的对象被创建,Triangle对象被销毁时,其Side对象也将被销毁。使用Java代码实现如下:

class Side{}
class Triangle {
    private final List<Side> sides;
    public Triangle(List<Side>sides){
        this.sides=sides;
    }
}

三、实战

制作类图的一般步骤:

  1. 研究分析问题领域,确定系统的需求;
  2. 发现对象与对象类,明确他们的含义和责任,确定属性和操作。
  3. 发现类之间的静态联系;
  4. 设计类与联系;
  5. 绘制类图并编制相应的说明。

需求

S校图书馆借阅系统的”类“

经过认真分析类之间的关系,使用ProcessOn工具绘制的类图如下:

ProcessOn绘制的S校图书馆借阅系统类图

工具

ProcessOn思维导图流程图-在线画思维导图流程图_在线作图实时协作

UMLet - 用于快速 UML 图的免费 UML 工具

  • 33
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值