2.UML类图

Posted 客官不爱喝酒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.UML类图相关的知识,希望对你有一定的参考价值。

UML 基本介绍

  • UML——Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果
  • UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如下图
  • 使用UML来建模,常用的工具有 RationalRose , 也可以使用一些插件来建模

因为不会URML类图软件的使用,索引参考了该博客进行学习:参考博客

StartUML的使用

目前官网http://staruml.io上的最新版本是4.X系列,可进入官网进行下载。下载后理论上是要付费使用的,但是不付费也不太影响使用。我用的是新版本,可能与有的老版本不太一致

在这里插入图片描述
说明:默认打开starUML后,会默认进入类图模式,各模块区域功能如下:

1.菜单栏: 最上方是菜单栏,新建工程啥的,具体不详细介绍;

2.已经建类图列表: 左上方列表显示已经创建的图,比如类图,时序图等;

3.工具箱: 左下方工具箱,显示当前类型的图可以使用的工具,主要是各种连线或者图形,是最常用的区域;

4.绘图区域: 中间白色格子区域,就是绘图区域;

5.工程区: 右上方区域是工程区,显示工程,model和各种已经绘出的图形;

6.属性编辑区域: 当画出来一个图形或者一根线时,这个区域会显示这个图形的各种属性,可以修改;

画图种类介绍

  1. 类图(Class Diagram)

打开starUML工具时,默认进入的就是类图模式,右上角工程区如下显示:

默认创建了一个名字为【Untitled】的工程,工程下面有个模块,名字叫【Model】,模块下有个类图,名字叫【Main】。这3个名字是默认的,都可以修改为你自己想要的名字。

比如修改工程名,只需要鼠标选中工程名字,然后右下方属性编辑区域会如下显示:
在这里插入图片描述
输入你想要的名字即可。模块和类图名字,用同样的方法也可以修改。

创建类图

工程区-》选择Model-》右键-》选择【Add Diagram】,然后如下图:

在这里插入图片描述
接下来我们,就可以画类图了,现在左下角工具箱显示了在类图模式下,可以使用的工具列表:

在这里插入图片描述
类组件的基本操作介绍:
单击选择Class,至工作区域内单机左键,即可创建一个class实例。创建实例后,周围会出现一堆,功能按钮,去描述这个类,如图所示。图后会有介绍各个租价功能的介绍。

在这里插入图片描述
功能介绍:

  1. 用来标识Class的可见性(默认为public)
  2. 用来添加note的,比如:类的说明
  3. 增加类的属性
  4. 增加类的操作方法。
  5. 增加Reception
  6. 增加子类
  7. 增加父类
  8. 添加已有的接口
  9. 添加需要的接口
  10. 添加关联
  11. 添加聚合
  12. 添加组合
  13. 添加端口
  14. 添加部件

入门案例

`创建一个User类,并且用URML类图描述出来

代码:

/** 用户实体类
 * @author compass
 * @version 1.0
 * @date 2021-07-05 18:59
 */
public class User {
    int id;
    private String username;
    public String password;
    public String email;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

在这里插入图片描述

1.泛化关系|继承Generalization)

泛化关系实际上就是继承关系,他是依赖关系的特例
UML图中实现泛化管理的描述,在类图中使用带空心三角箭头的实线表示,箭头从子类、子接口指向父类、父接口。具体如图所示。

/** 泛化关系|继承(Generalization)
 * @author compass
 * @version 1.0
 * @date 2021-07-05 19:30
 */
public abstract class DaoSupport{
    public void save(Object entity){

    }

    public void delete(Object id){

    }
}

class PersonService extends DaoSupport{

}

在这里插入图片描述

2.实现关系(Implementation)

实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在类图中使用带空心三角箭头的虚线表示,箭头从实现类指向接口。如图。

/** 实现关系(Implementation)
 * @author compass
 * @version 1.0
 * @date 2021-07-05 19:46
 */
public interface OrderDao {
    int deleteById(String id);
}

class OrderDaoImpl implements OrderDao{
    @Override
    public int deleteById(String id) {
        return 0;
    }
}

在这里插入图片描述

3.依赖关系(Dependence)

只要是在类中用到了对方, 那么他们之间就存在依赖关系。 如果代码中没有对方, 连编绎都通过不了 。

依赖关系小结:类中用到了对方,他们就存在依赖关系

  • 类的成员属性
  • 方法的返回类型
  • 方法接收的参数类型
  • 方法中使用的局部变量
/**
 * @author compass
 * @version 1.0
 * @date 2021-07-05 19:12
 */
public class PersonServiceBean {
    private PersonDao personDao;//类

    public void save(Person person){}

    public IDCard getIDCard(Integer personId){
        return null;
    }

    public void modify(){
        Department department = new Department();
    }
}

class PersonDao{}

 class IDCard{}

 class Person{}

 class Department{}

在这里插入图片描述

聚合

4.关联关系(Association)

关联关系是一种拥有的关系, 它使一个类知道另一个类的属性和方法;
如:老师与学生
关联关系又分为单项关联和双向关联,关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头单向的关联有一个箭头。

单项关联:

/**
 * 关联关系 单项关联
 * @author compass
 * @version 1.0
 * @date 2021-07-05 22:54
 */
// 单向一对一关系
public  class Student {
    private Teacher teacher;
}

 class Teacher{

}

URML类图

在这里插入图片描述

双向关联关系

 // 双向一对一关系
 public  class Student {
 private Teacher teacher;
 }

 class Teacher{
     private Student student;

 }

URML类图

在这里插入图片描述

自关联(自己跟自己关联)

 // 自关联关系
 class Employee{
     // 员工id
     int employeeId;
     // 员工的上级领导Id
     String leadId;
 }

在这里插入图片描述
**Dirtected Association:当向关联**

**Association: 相互关联**

5.聚合关系(Aggregation)

  1. 聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。 聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。
  2. 如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的, 使用带空心菱形的实线来表示:
/** 聚合关系
 * @author compass
 * @version 1.0
 * @date 2021-07-05 23:14
 */
public class Computer {
    private Mouse muse; // 鼠标可以和Computer分离
    private Monitor monitor;// 显示器可以和Computer分离

    public void setMouse(Mouse muse) {
        this.muse = muse;
    }

    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }

}
class Monitor{
    
 }
class Mouse{
    
 }

在这里插入图片描述

6.组合关系(Composition)

  • 组合关系:也是整体与部分的关系,但是整体与部分不可以分开。
  • 在程序中我们定义实体: Person与IDCard、 Head,那么 Head 和Person 就是组合关系, IDCard 和 Person 就是聚合关系。
  • 但是如果在程序中Person实体中定义了对IDCard进行级联删除,即删除Person时连同IDCard一起删除, 那么IDCard 和 Person 就是组合了
 // 组合关系
class Person {
    private IDCard card; // 聚合关系
    private Head head = new Head(); // 组合关系
}
class Head{

}
class IDCard{

}

在这里插入图片描述

以上是关于2.UML类图的主要内容,如果未能解决你的问题,请参考以下文章

UML类图

2.4 UML类图

C++中的UML类图

Day306.UML类图 -Java设计模式

UML简易教程

系统开发基础:UML中图的相关知识笔记(上)