• 【UML】详解UML类图


    目录

    1.概述

    2.权限

    3.关系

    3.1.连线关系

    3.2.依赖

    3.3.泛化(继承)

    3.4.实现

    3.5.关联

    3.6.聚合

    3.7.组合


    1.概述

    UML是什么?书面化一点的说法是:

    UML(Unified Modeling Language),统一建模语言,是一种用于软件工程和系统设计的标准图形化建模语言。它旨在帮助开发人员、设计师和分析师在软件开发过程中更好地理解、设计、交流和文档化系统。UML提供了一组图形符号和规则,可以用于表示软件系统的各个方面,从需求分析到系统设计、实现和测试。

    直白点说人话就是:

    UML用图形和符号的方式来帮助描述软件系统,让人更加容易看懂整个系统是什么样子的。

    正如我们知道的,软件系统是很庞大且复杂的一个东西,想要描述清楚,肯定不可能是一个维度就能描述的很准确,所以UML从几种维度,每个维度提出了一系列的图来用于描述软件系统,包括:

    1. 用例图
    2. 静态结构
      1. 类图
      2. 组件图
      3. 部署图
    3. 动态行为
      1. 状态图
      2. 活动图
      3. 时序图

    以上的图在各类型的软件系统的规范化描述中用到的频率都很高,但是不一定都会用到,选取其中需要的图来描述清楚系统即可。这其中UML的类图,是最为常用的,因为描述类关系就是描述好实体间的关系,在当今面向对象的设计和编程为主的系统开发中,这是基础中的基础。本文将先讲UML类图,下一篇文章会一起讲其它的图。

    UML类图总结起来就是,提供了一套图形和符号的标准,用来描述系统中各个类之间的关系,以及它们的属性和方法。

    2.权限

    UML类图中以符号的方式来描述访问权限,有以下权限:

    权限符号说明
    public+公用的,该属性对所有类可见

    protected

    #

    受保护的,对该类的子孙可见

    private 

    -私有的,只对该类本身可见

    package

    ~

    包的,只对同一包声明的其他类可见

    3.关系

    3.1.连线关系

    3.2.依赖

    A类中使用到了B类,A和B就产生了依赖关系,下面以一个常见的service中调用dao为例:

    1. public class UserServiceImpl{
    2. private UserDao userDao;
    3. public User queryById(int id) {return null;}
    4. }

    3.3.泛化(继承)

    泛化其实指的是is a的关系,A is a B,A和B之间就是泛化关系,在面向对象的编程里,只有继承才能实现这种效果,所以泛化可以理解为就是继承。

    1. public class BaseDao {
    2. protected void insert(User user){};
    3. protected void delete(User user){};
    4. protected void update(User user){};
    5. protected void query(User user){};
    6. }
    1. public class UserDao extends BaseDao{
    2. User queryById(int id){
    3. return null;
    4. }
    5. }

    3.4.实现

    实现是继承的特例:

    接口:

    1. public interface UserService {
    2. User queryById(int id);
    3. }

     实现类:

    1. public class UserServiceImpl implements UserService{
    2. private UserDao userDao;
    3. @Override
    4. public User queryById(int id) {
    5. return userDao.queryById(id);
    6. }
    7. }

    3.5.关联

    关联关系,即类与类之间的联系,是依赖关系的特例。

    这就是一种关联关系:

     为什么说是依赖关系的特例喃,是因为要实现一个driver驾驶一辆car,那么肯定是要driver类持有一个car对象,也就是依赖一个car。其实关联关系也可以用依赖关系的箭头来替代,只是用关联关系表示,能将实体在业务上的关系描述的更清楚,所以到底是用依赖关系表示还是关联关系表示,这个具体情况具体抉择。

    3.6.聚合

     聚合关系是依赖关系的特例,依赖之间可以分开,即被依赖的类和依赖它的类不同生共死,也就是说被依赖的类的实体需要从外界传入。

    3.7.组合

    组合关系是依赖关系的特例,依赖之间不可以分开,即被依赖的类和依赖它的类同生共死,也就是说被依赖的类的实体就在依赖它的实体内部生老病死,不需要从外界传入。

  • 相关阅读:
    10.8流水灯
    无线智能振弦采集系统(NLM5或6多通道无线采集采发仪)
    基数排序(Radix Sort)
    几种常用的排序
    卷积神经网络参数量和计算量的计算
    调用okhttp3的案例代码
    scratch经典游戏主题源码分享,包含了20多款经典游戏
    ffmpeg 命令行 pcm 编码 MP3
    一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
    vue3项目安装eslint和prettier
  • 原文地址:https://blog.csdn.net/Joker_ZJN/article/details/132418191