【UML】详解UML类图

2023-08-21 23:34:06

目录

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为例:

public class UserServiceImpl{

    private UserDao userDao;

    public User queryById(int id) {return null;}
}

3.3.泛化(继承)

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

public class BaseDao {
    protected void insert(User user){};
    protected void delete(User user){};
    protected void update(User user){};
    protected void query(User user){};
}
public class UserDao extends BaseDao{
    User queryById(int id){
        return null;
    }
}

3.4.实现

实现是继承的特例:

接口:

public interface UserService {
    User queryById(int id);
}

 实现类:

public class UserServiceImpl implements UserService{
    private UserDao userDao;

    @Override
    public User queryById(int id) {
        return userDao.queryById(id);
    }
}

3.5.关联

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

这就是一种关联关系:

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

3.6.聚合

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

3.7.组合

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

更多推荐

构建高性能应用:Java与MongoDB的完美融合

AI绘画关于SD,MJ,GPT,SDXL百科全书面试题分享点我直达2023Python面试题2023最新面试合集链接2023大厂面试题PDF面试题PDF版本java、python面试题项目实战:AI文本OCR识别最佳实践AIGamma一键生成PPT工具直达链接玩转cloudStudio在线编码神器玩转GPUAI绘画、A

机器人如何有效采摘苹果?

摘要:本文利用动捕数据构建拟人运动模型,对比观察两种苹果采摘模式,并对系统性能进行全面评估,为提高机器人采摘效率提供创新方法。近期,一项关于苹果采摘机器人的有趣研究——"Designandevaluationofaroboticappleharvesterusingoptimizedpickingpatterns",在

C#网站代码防止漏洞和攻击 增强网站安全性方法

输入验证:永远不要信任用户提供的输入数据。始终对用户提交的数据进行验证和过滤,以防止恶意输入。使用正则表达式、白名单过滤或内置的.NET验证来验证输入。防止SQL注入:使用参数化查询或存储过程来执行数据库查询,而不是将用户输入直接嵌入SQL语句中。这可以有效防止SQL注入攻击。防止跨站脚本(XSS)攻击:始终对用户提交

SpringMVC之JSR303和拦截器

目录一.JSR3031.1.介绍1.2.为什么要使用JSR-3031.3.常用注解1.4.快速入门1.4.1.导入依赖1.4.2.配置校验规则1.4.3.编写方法校验1.4.4.测试二.拦截器2.1.什么是拦截器?2.2.拦截器与过滤器的区别2.3.拦截器的应用场景2.4.基础使用2.5.用户登录权限控制最后实战Spr

指针进阶笔试题

今天分享的是指针的笔试题,相信看完这篇文章对指针又会有深入的了解,让我们来学习吧。首先分享的是指针和数组的关系,我们都知道数组名是首元素的地址,那就让我们来看一下一维数组和指针的关系吧//一维数组inta[]={1,2,3,4};printf("%d\n",sizeof(a));printf("%d\n",sizeof

Java手写桶排序和算法案例拓展

Java手写桶排序和算法案例拓展1.算法思维导图解释实现思路原理#mermaid-svg-OFCWrsU78anzeD09{font-family:"trebuchetms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OFCWrsU7

【Python】python -m pip install 和 pip install 的区别

文章目录一、pipinstall二、python-mpipinstall三、两者的总结一、pipinstall当你使用pipinstall命令时,你正在使用Python包管理器pip来安装Python包或模块。以下是关于pipinstall的详细理解:安装包:pipinstall<package>命令用于安装指定的Py

【Python】保姆级万字讲解:Python中的 pip 和 conda 的理解

文章目录一、pip的理解1.1安装1.2如何使用1.3升级1.4安装某个版本的包1.5卸载或者是更新包1.6查看某个包的信息1.7查看需要被升级的包1.8查看兼容问题1.9指定国内源来安装1.10下载包但是不安装1.11批量安装软件包二、conda的理解2.1下载源channel详解2.1.1国内部分好用conda下载

Vue学习笔记

初识Vue需要创建Vue实例root容器代码需要符合html规范,但是混入了一些特殊的Vue语法root容器代码被称为Vue模板容器和Vue实力之间一一对应注意区分js表达式、js代码:一个表达式会生成一个值,可以放在任何一个需要值的地方{{}}需要写js表达式,可以读取data中的所有属性data中属性的值发生改变,

回归与聚类算法系列⑤:逻辑回归

目录1、介绍2、原理输入激活函数3、损失及其优化损失函数优化4、API5、案例:乳腺癌肿瘤预测数据集代码🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发。🦅主页:@逐梦苍穹📕回归与聚类算法系列⭐①:概念简述⭐②:

Spring Bean&生命周期图&扩展接口介绍&spring的简化配置

目录1.生命周期简图2.扩展接口介绍2.1Aware接口2.2BeanPostProcessor接口2.3InitializingBean2.4DisposableBean2.5BeanFactoryPostProcessor接口3.spring的简化配置3.1项目搭建3.2Bean的配置和值注入3.3AOP的示例1.

热文推荐