宇宙最强UML类图详解,看不懂你来打我 转载 mb60efb0123ab42 2021-07-26 10:05:33 文章标签 学习 文章分类 前端开发 虚线箭头指向依赖;实线箭头指向关联;虚线三角指向接口;实线三角指向父类;空心菱形能分离而独立存在,是聚合;实心菱形精密关联不可分,是组合;上面是UML的语法。在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。下面我们结合实例理解这些关系。在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。下面我们结合实例理解这些关系。基本概念类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。 类图的3个基本组件:类名、属性、方法。泛化(generalization):表示is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节。直接使用语言中的继承表达。在类图中使用带三角箭头的实线表示,箭头从子类指向父类。实现(Realization):在类图中就是接口和实现的关系。这个没什么好讲的。在类图中使用带三角箭头的虚线表示,箭头从实现类指向接口。依赖(Dependency):对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责。在类图使用带箭头的虚线表示,箭头从使用类指向被依赖的类。关联(Association) : 对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联又分为一般关联、聚合关联与组合关联。后两种在后面分析。在类图使用带箭头的实线表示,箭头从使用类指向被关联的类。可以是单向和双向。聚合(Aggregation) : 表示has-a的关系,是一种不稳定的包含关系。较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。如公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司。在类图使用空心的菱形表示,菱形从局部指向整体。组合(Composition) : 表示contains-a的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。是一种更强的聚合关系。部分不能脱离整体存在。如公司和部门的关系,没有了公司,部门也不能存在了;调查问卷中问题和选项的关系;订单和订单选项的关系。在类图使用实心的菱形表示,菱形从局部指向整体。多重性(Multiplicity) : 通常在关联、聚合、组合中使用。就是代表有多少个关联对象存在。使用数字..星号(数字)表示。如下图,一个割接通知可以关联0个到N个故障单。聚合和组合的区别这两个比较难理解,重点说一下。聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。 实例分析联通客户响应OSS。系统有故障单、业务开通、资源核查、割接、业务重保、网络品质性能等功能模块。现在我们抽出部分需求做为例子讲解。大家可以参照着类图,好好理解。1. 通知分为一般通知、割接通知、重保通知。这个是继承关系。2. NoticeService和实现类NoticeServiceImpl是实现关系。3. NoticeServiceImpl通过save方法的参数引用Notice,是依赖关系。同时调用了BaseDao完成功能,也是依赖关系。4. 割接通知和故障单之间通过中间类(通知电路)关联,是一般关联。5. 重保通知和预案库间是聚合关系。因为预案库可以事先录入,和重保通知没有必然联系,可以独立存在。在系统中是手工从列表中选择。删除重保通知,不影响预案。6. 割接通知和需求单之间是聚合关系。同理,需求单可以独立于割接通知存在。也就是说删除割接通知,不影响需求单。7. 通知和回复是组合关系。因为回复不能独立于通知存在。也就是说删除通知,该条通知对应的回复也要级联删除。经过以上的分析,相信大家对类的关系已经有比较好的理解了。大家有什么其它想法或好的见解,欢迎拍砖。 PS:还是那句话:以上类图用Enterprise Architect 7.5所画,在此推荐一下EA,非常不错。可以替代Visio和Rose了。Visio功能不够强大,Rose太重。唯有EA比较合适。 赞 收藏 评论 分享 举报 上一篇:使用Serverless模式开发部署前端和Node.js 下一篇:请求与上传文件,Session简介,Restful API,Nodemon 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 UML--类图(最全版本解释) 引言类图是用于描述系统的静态结构视图,主要表述类和接口之间关系描述;类图可以说是UML中比较重要的视图之一,是uml结构视图的基点。其中类图包含了类、协作、接口、信号、数据类型、枚举类型以及依赖关系、关联关系(单向关联、双向关联)、实现关系、泛化关系以及依赖关系的衍生使用关系和关联关系的衍生组合关系和聚合关系;今天小编会一一梳理各个元素的属性数据以及可连接关系。这些总结均是查看官方UML2.5以及 数据类型 关联关系 依赖关系 我在工作一年时怎么都看不懂的编程写法,今天... 作为一名程序员,你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山,或者被戏称为“面向保就业编程”。以下面这个代码为例,其中的问题也显而易见,当越来越多的条件判断时,代码会变得非常臃肿,难以维护。 String mediaType = "blogger"; if ("lxf".equals(mediaType)) { java System ide UML学习总结导图篇1 本篇主要针对uml2.0前的类图、对象图、包图、组件图(构件图)、部署图以及用例图、活动图、时序图(顺序图)、状态图分别分析其中图含义,使用场景,元素含义,元素可连接关系线等 UML 构造型 图形符号 【Network Security!】IP地址详解(看不懂你来打我) 文章目录一.简单局域网的构成二.IP地址1.IP地址规则三.子网掩码四.IP地址详解1.分类2.案例13.案例2五.网关六.DNS七.配置IP地址八.网络测试命令一.简单局域网的构成最重要的就是交换机。要想实现通信每个PC必须有一个名字。二.IP地址IP地址就是唯一标识,是一种网络编码(2进制),由32位组成.每一部份8位二进制。1.IP地址规则三.子网掩码比如说 10.... NetworkSecurity 网络安全 线程池工作原理-看不懂你打我 前言 前段时间忘记了线程池的工作原理, 于是上网搜了一下, 偶然看到一个帖子说的特别好理解, 特 线程池 外包 阻塞队列 【Network Security!】NTFS安全权限(看不懂你来打我) 文章目录一.NTFS权限概述二.文件系统基本作用Windows常见的文件系统三.文件夹的NTFS权限目录操作权限四.文档的NTFS权限设置五.权限累加六.权限的拒绝七.权限继承一.NTFS权限概述通过设置NTFS权限,实现不同的用户访问不同的权限分配了正确的访问权限后,用户才能访问其资源设置权限防止资源被篡改、删除二.文件系统基本作用定义向磁盘上存文档的方法和数据结构,以及读文档的... NetworkSecurity 网络安全 【网页前端设计Front end】CSS入门(看不懂你来打我) 文章目录**css的基本语法和使用方法****css的层次及其作用优先级****css常用属性****css布局**css的基本语法和使用方法/*选择符组*//*类选择符*//*id选择符*/#intro{ font-size:110%; font-style:italic; color:#0000ff; background-color: transpare... css 样式表 选择符 C 《看不懂你打我系列》之 —— 极简ArrayList 要点基本实现扩容机制数组拷贝基本实现内部使用了Object [] elementData 来存储元素,这是一个缓冲数组,其末尾一般会余留一些空位给待插入的元素。注意到elementData是被transient关键字修饰的,被transient修饰的字段,不会参与对象的序列化。对ArrayList进行序列化,我们调用其实例方法writeObject(),其会依次序列化elemen... 数组 序列化 for循环 内存区域 无参构造函数 【网页前端设计Front end】JavaScript教程.下(看不懂你来打我) 文章目录onclick事件onmousedown事件文本输入框即选择域的内容变化事件onchangeJavaScript表单处理——radio单选钮JavaScript事件及处理onclick事件 javascript html html5 sed 文本输入框 【网页前端设计Front end】JavaScript教程.上(看不懂你来打我) 文章目录**1.JavaScipt的作用和特点****2.JavaScript语法****3.JavaScript函数****4.JavaScirpt的使用方法**如需使用外部文件,需要在标记的src属性中设置该.js文件5.JavaScript内置对象**6.浏览器对象模型BOM**1.JavaScipt的作用和特点可以将JavaScipt看成是Java语言的某种简化版本。嵌入HTMl文档... JavaScript 前端开发 机器学习(MACHINE LEARNING)Sklearn全高级使用(看不懂你来打我!) 文章目录1 正规化 Normalization1.1 数据标准化1.2 数据标准化对机器学习成效的影响2 检验神经网络 (Evaluation)2.1 误差曲线2.2 准确度曲线2.3 正规化2.4 交叉验证3 Cross-validation3.1 Model 基础验证法3.2 Model 交叉验证法(Cross Validation)3.3 以准确率(accuracy)判断(改变n_neigh... 机器学习教程 机器学习 安装mysql(非常详细,看不懂你来打我,有zip包资源) 快速无伤安装mysql mysql 数据库 database 环境变量 系统设置 源码剖析panic与recover,看不懂你打我好了! 前言哈喽,大家好,我是asong,今天与大家来聊一聊go语言中的"throw、try.....catch{}"。如果你之前是一名java程序员,我相信你一定吐槽过go语言错误处理方式,但是这篇文章不是来讨论好坏的,我们本文的重点是带着大家看一看panic与recover是如何实现的。上一文我们讲解了defer是如何实现的,但是没有讲解与 队列 java gwt go golang 《看不懂你打我系列》之 —— 极简mybatis缓存 Mybatis 缓存源码学习笔记mybatis版本:3.4.6题外话先说点题外话,作为技术工作者,学习框架或技术,我觉得有3个方面需要去思考。是什么?这个东西是什么?要怎么使用?在什么场景下需要使用?为什么?为什么有这个东西,它能解决什么问题?怎么做到的?框架或技术,就是工具。是工具,就有不好使的时候。工具不好使了,怎么办呢?修!不懂原理的话怎么修?所以,要至少了... 二级缓存 sql 缓存 数据 xml 【操作系统】考研の内存管理方法(看不懂你来打我~!) 文章目录1 内存管理概述1.1 存储层次结构1.2 指令数据绑定到内存地址1.3 逻辑地址2 连续内存管理2.1 单独分区分配2.2 固定分区分配2.3 动态分区分配2.4 可重定位分区分配3 离散的内存管理方法3.1 分页3.2 分页硬件和TLB3.3 分段管理3.4 地址变换1 内存管理概述1.1 存储层次结构1.2 指令数据绑定到内存地址1.3 逻辑地址静态地址重定位在装入... 操作系统 【网页前端设计Front end】HTML语言基础.上(看不懂你来打我) 文章目录1.HTML文档的基本结构与语法2.HTML标记及其属性3.段落标记4.文字标记5.表格标记6.超链标记7.图片8.列表1.HTML文档的基本结构与语法<html><head><title>一个简单的HTML实例</title></head><body><h2 align="center">一个简... HTML教程 前端开发 【网页前端设计Front end】HTML语言基础.下(看不懂你来打我) 文章目录文本框,password示例复选框示例单选框示例文件提交按钮标记标记提交按钮和重置按钮HTML表单文本框,password示例<form><p>请输入姓名:<input type="text" name="Name" size="25"></p><input type="password" name="pwd"/>... 单选框 复选框 重置 C 【Web安全】关于PHP-文件上传的探索(看不懂你来打我) 文章目录1 文件的上传2 超级全局变量$_FILES3 文件的接收4 上传文件后的移动1 文件的上传首先,写一个HTML 的表单,用于上传文件,命名为form.html。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>cnm&... PHP开发 PHP教程 python【PIL图像处理库】PIL库快速入门(看不懂你来打我) 文章目录1. Introduction2. What PIL can do?3. How to use PIL?3.1 Image class1. IntroductionPIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。其官方主页为:PIL。 PIL历史悠久,原来是只支持py... Python开发 Python MySQL存储过程和存储函数(看不懂你打我系列) MySQL存储过程和存储函数MySQL中提供存储过程与存储函数机制,我们先将其统称为存储程序,一般的SQL语句需要先编译然后执行,存储程序是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,当用户通过指定存储程序的名字并给定参数(如果该存储程序带有参数)来调用才会执行。1.1 存储程序优缺点优点通常存储过程有助于提高应用程序的性能。当】 数据库 mysql sql 存储过程 MySQL properties 配置 DruidDataSource引入使用 load方法是重点这个方法所读的文件中 键与值可以有等号 空格隔开 但是如果由#隔开就不会遍历读到了可以使用Properties集合中的方法load,把硬盘中保存的文件(键值对),读取到集合中使用 void load(InputStream inStream);字节输入流,不能读取含有中文的键值对 void load(Reader reader);字节输入流,可以读取含有中 java 键值对 输入流 字符串 centos无法识别千兆 一.Zabbix-Server服务器端的安装 监控学习重要参考地址: https://zabbix.org/wiki/Main_Page https://zabbix.org/wiki/Zabbix_Templates https://www.zabbix.com/integrations https://share.zabbix.com/ https://github.com/monitorin centos无法识别千兆 zabbix nginx vim mysql springboot thymeleaf 生成html文件 springboot 不推荐使用 jsp页面, 它内部提供了 Thymeleaf 模板的支持. 从性能上来说, thymeleaf 比 jsp 页面的性能要好, thymeleaf 是开发了一套 java的程序对 html 页面进行了解析 jsp 是使用的 jsp-api 把 jsp页面转换成了 servlet 来进行解析 两者之间的实现方式是不同的, 不能混在一起, 实现的方式也各不相同如何在 html spring xml java开发modbus tcp客户端 目录什么是Socket ?TCP api 与 UDP api 的特点 : UDP api使用UDP Socket 实现一个单词翻译 : TCP api使用TCP协议来实现一个回显服务什么是Socket ?应用层和传输层之间的桥梁 .程序猿写网络代码 (应用层) , 要想发送这个数据 , 就需要去调用下层协议 , 应用层就要去调用传输层. 传输层给应用层提供了一组 ap java开发modbus tcp客户端 udp tcp/ip java 客户端 jaeger 接入 skyw 分布式追踪是实现应用链路追踪的一种重要技术手段,同时也是实现云原生可观测性的重要组成部分,其主要用于应用程序性能管理(APM,ApplicationPerformance Management)和故障定位等分布式追踪工具大致可分为以下三类。1)基于 SDK 的分布式追踪工具。以 Jaeger 为例,Jaeger 提供了大量可供追踪使用的 API,通过侵入微服务业务的软件系统,在系统源代码中添加追踪 jaeger 接入 skyw 云原生 分布式 java 数据