【设计模式】二、UML 类图与面向对象设计原则 之 UML概述

news2024/9/27 5:46:00

二、UML 类图与面向对象设计原则
(一)UML 类图

  1. UML 概述
  2. 类与类的UML图示
  3. 类之间的关系

(二)面向对象设计原则

  1. 单一职责原则(Single Responsibility Principle, SRP)
  2. 开闭原则(Open-Closed Principle, OCP)
  3. 里氏替换原则(Liskov Substitution Principle, LSP)
  4. 依赖倒置原则(Dependence Inversion Principle, DIP)
  5. 接口隔离原则(Interface Segregation Principle, ISP)
  6. 迪米特法则(最少知道原则)(Law of Demeter, LoP)
  7. 合成复用原则(Composite Reuse Principle, CRP)

文章目录

    • 二、UML 类图与面向对象设计原则
      • (一)UML 类图
        • 1. UML 概述
          • (1)UML 定义
          • (2)UML 结构
            • (2.1)视图(View)
            • (2.2)图(Diagram)
            • (2.3)模型元素(Model Element)
            • (2.4)通用机制(General Mechanism)
      • ※ 本文小结


二、UML 类图与面向对象设计原则

​ 学习设计模式之前需要掌握一些预备知识,主要包括UML类图和面向对象设计原则,它们是“基础内功”,将为后续的“深入修行”设计模式奠定基础。


UML 类图 可用于描述每个设计模式的结构以及对模式实例进行说明,而模式结构又是设计模式解法的核心组成部分。学一个设计模式,如果不能绘制和理解其结构图,基本上等于没学。


面向对象设计原则 是评价每个设计模式应用效果的重要依据。每个模式都符合一个或多个面向对象设计原则(个别模式除外),这些原则都是从无数项目中提取出来的经验性原则,他们为消除软件设计和实现中的“臭味(Bad Smell)”而诞生,力图为当前系统提供最好的设计方案。常用的面向对象设计原则包括7个,分别是单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则(最少知道原则)和合成复用原则

(一)UML 类图

1. UML 概述
(1)UML 定义

UML(Unified Modeling Language,统一建模语言) 是一种通用的可视化建模(Modeling)语言,不同于编程语言,它通过一些标准的图形符号和文字来对系统进行建模,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。

​ UML 适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具,UML 是一种总结了以往建模技术的经验并吸收了当今最优秀成果的标准建模方法。


​ UML 是一种语言,也就意味着它有属于自己的标准表达规则,它不是一种类似 Java、C++、C# 的编程语言,而是一种分析设计语言,也就是一种建模语言

(2)UML 结构

UML 是一种有图形符号表达的建模语言,UML结构主要包括以下四个部分:

  • 视图(View):包括用户视图、结构视图、行为视图、实现视图、环境视图。
  • 图(Diagram):包括类图、对象图、组件图、部署关系图这4种结构图,以及用例图、顺序图(序列图)、协作图、活动图、状态图这5种行为图。
  • 模型元素(Model Element):UML图中使用的概念(如:类、对象、消息)和这些概念之间的关系(如:关联关系、依赖关系、泛化关系、实现关系)。
  • 通用机制(General Mechanism):通用机制为模型元素提供额外的注释、信息和语义。
(2.1)视图(View)

UML 视图用于从不同的角度来表示待建模系统。视图是有许多图形组成的一个 抽象集合,在建立一个系统模型时,只有通过定义多个视图,每个视图显示该系统的一个特定方面,才能构造出该系统的完整蓝图,视图也将建模语言链接到开发所选择的方法和过程。

UML视图(View)包含五大系统视图:

  1. 用户视图:以用户的观点表示系统的目标,它是所有视图的核心,用于描述系统的需求。
  2. 结构视图:表示系统的静态行为,描述系统的静态元素,如包、类与对对象,以及它们之间的关系。
  3. 行为视图:表示系统的动态行为,描述系统的组成元素(如对象)在系统运行时的交互关系。
  4. 实现视图:表示系统中逻辑元素的分布,描述系统中物理文件以及它们之间的关系。
  5. 环境视图:表示系统中的物理元素的分布,描述系统中硬件设备以及它们之间的关系。
(2.2)图(Diagram)

UML 图是描述UML视图内容的图形。UML图(Diagram)主要包含9种,分为结构图和行为图,如下:

(一)结构图(4种)

  1. 类图:描述了系统中对象的类型以及它们之间存在的各种静态关系。
  2. 对象图:对象图是类图的一个实例,是系统在某个时间的详细状态的快照。
  3. 组件图:描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。
  4. 部署关系图:描述了系统内部的软件如何分布在不同的节点上。

(二)行为图(5种)

  1. 用例图:指由参与者、用例、边界以及它们之间的关系构成的用于描述系统功能的视图。(用于需求建模)
  2. 顺序图(序列图):描述了在用例的特定场景中,对象如何与其他对象交互。
  3. 协作图(通信图):描述了系统的行为是如何由系统的成分合作实现的。
  4. 活动图:描述了具体业务用例的实现流程。
  5. 状态图:描述了对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。

UML图(Diagram)对应的UML视图(View):

  1. 用户视图:(如:用例图)
  2. 结构视图:(如:类图、对象图、包图、组合结构图)
  3. 行为视图:(如:状态图、活动图、顺序图、通信图、定时图、交互概览图)
  4. 实现视图:(如:组件图)
  5. 环境视图:(如:部署图)
(2.3)模型元素(Model Element)

模型元素是指UML图中所使用的一些概念,它们对应于普通的面向对象概念,如类、对象、消息以及这些概念之间的关系,如关联关系、依赖关系、泛化关系等。

同一个模型元素可以在多个不同的UML图中使用,但是无论在哪个图中,同一个模型元素都必须保持相同的意义并具有相同符号。

(2.4)通用机制(General Mechanism)

UML提供的通用机制为模型元素提供额外的注释、信息和语义,这些通用机制也提供了扩展机制,允许用户对UML进行扩展,如定义新的建模元素、扩展原有元素的语义、添加新的特殊信息来扩展模型元素的规则说明等,以便适用于一个特定的方法或过程、组织或用户。


※ 本文小结

在这里插入图片描述
在这里插入图片描述


参考资料

参考书籍:《设计模式的艺术 / 刘伟著》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react03

react03 修改脚手架创建的打包命令 根据scripts中的命令,执行npm run eject ,输入y, 如果对原始的脚手架文件有过改动需要进行将修改后的文件提交到git 历史区 ,防止暴露后的代码覆盖我们自己的文件 git 提交: git add . git commit -m ‘…

服务器Debian 12.x中安装Jupyer并配置远程访问

服务器系统:Debian 12.x;IP地址:10.100.2.138 客户端:Windows 10;IP地址:10.100.2.38 利用ssh登录服务器: 1.安装python3 #apt install python3 2.安装pip #apt install python3-pip … 3.安装virtualen…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:GridCol)

栅格子组件,必须作为栅格容器组件(GridRow)的子组件使用。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 可以包含单个子组件。 接口 GridCol(option?:{span?: number | …

使用 opencv 识别答题卡,生成填涂答案

一般答题卡设计时都在试卷4个角预留4个一样大小的黑块 仅能识别选择题判断题之类的填涂答题的题目,不能识别填空题应用题等其它主观题 使用 opencv 识别试卷图片中所有黑块,再根据黑块大小获取四个角的位置,根据四个黑块位置校正图像 将图…

怎么避免电脑数据被拷贝?电脑如何禁用USB功能?

在无纸化办公的今天,很多重要数据都存放在电脑中。为了避免数据泄露,需要采用安全的方式保护电脑数据。那么,该如何避免电脑数据被拷贝呢?下面我们就来了解一下。 方法一:物理隔绝 物理隔绝是一种原始但有效的USB禁用…

发布组件到npm

1.环境准备&#xff0c;需要装好node&#xff0c;注册号npm账号,这里不做详解 2.创建编写组件和方法的文件夹package 3.在文件夹中创建需要定义的组件&#xff0c;并且加上name属性 //组件 <template><div><button>按钮组件</button></div> &…

Hadoop,Hive 数据预处理CR

记录一次大材小用,我在将.csv电影数据集 电影json数据 导入MySQL时,出现了报错: 很明显,意味着.csv中的数据有非utf8编码的, 尝试使用file查看了下.csv文件的编码格式: 如果不确定原始编码,可以先用file命令尝试检测一下: file -i input.csv该命令会显示文件的MIME类型…

医学图像目标跟踪论文阅读笔记 2024.03.08~2024.03.14

“Inter-fractional portability of deep learning models for lung target tracking on cine imaging acquired in MRI-guided radiotherapy” 2024年 期刊 Physical and Engineering Sciences in Medicine 医学4区 没资源&#xff0c;只读了摘要&#xff0c;用的是U-net、a…

前端路由跳转bug

路由后面拼接了id的千万不能取相近的名字&#xff0c;浏览器分辩不出&#xff0c;只会匹配前面的路径 浏览器自动跳转到上面的路径页面&#xff0c;即使在菜单管理里面配置了正确的路由 跳转了无数次&#xff0c;页面始终不对&#xff0c;检查了路由配置&#xff0c;没有任何问…

html--bug

文章目录 html html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>老师</title><style>body {background-color: #008000;margin: 0px;cursor: none;overflow: hidden;}</style></head><bod…

算法---滑动窗口练习-4(无重复字符的最长子串)

无重复字符的最长子串 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 算法的主要思想是使用滑动窗口来维护一个不含重复字符的子串。定义两个指针 left 和 right 分别表示窗口的左边界和右边界。还定义了一个数组 hash 来记…

Python数据分析-5

1.时间序列 2.pandas重采样 重采样&#xff1a;指的是将时间序列从一个频率转化为另一个频率进行处理的过程&#xff0c;将高频率数据转化为低频率数据为降采样&#xff0c;低频率转 化为高频率为升采样。 统计出911数据中不同月份电话次数的变化情况&#xff1a…

后端程序员入门react笔记(八)-redux的使用和项目搭建

一个更好用的文档 添加链接描述 箭头函数的简化 //简化前 function countIncreAction(data) {return {type:"INCREMENT",data} } //简化后 const countIncreAction data>({type:"INCREMENT",data })react UI组件库相关资料 组件库连接和推荐 antd组…

DM数据库安装(Linux)

Linux安装 操作系统CPU数据库CentOS7x86_64 架构dm8_20230418_x86_rh6_64 先把压缩包扔过去 新建 dmdba 用户 创建用户所在的组&#xff0c;命令如下&#xff1a; groupadd dinstall 创建用户&#xff0c;命令如下&#xff1a; useradd -g dinstall -m -d /home/dmdba -s /…

[论文笔记]LLaMA: Open and Efficient Foundation Language Models

引言 今天带来经典论文 LLaMA: Open and Efficient Foundation Language Models 的笔记&#xff0c;论文标题翻译过来就是 LLaMA:开放和高效的基础语言模型。 LLaMA提供了不可多得的大模型开发思路&#xff0c;为很多国产化大模型打开了一片新的天地&#xff0c;论文和代码值…

亚信安慧AntDB在数据可靠性和系统安全中的实践

亚信安慧AntDB以持续创新和技术进步为理念&#xff0c;不断优化性能和功能&#xff0c;至今已经保持了15年的平稳运行。这一漫长的历程并非偶然&#xff0c;而是源于AntDB团队对技术的不懈探索和追求。他们始终秉承着“永不停歇&#xff0c;永不满足”的信念&#xff0c;将技术…

Android14之报错:error:add its name to the whitelist(一百九十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

如何使用“ubuntu移动文件、复制文件到其他文件夹“?

一、移动文件到其他文件夹命令 mv node_exporter-1.5.0.linux-amd64.tar.gz /usr/local/etc/prometheus 二、复制文件到其他文件夹命令 cp node_exporter-1.5.0.linux-amd64.tar.gz /home/master

4种小众的能力,帮你更好地适应未来

新年伊始&#xff0c;又是一个全新的开始。 未来的社会究竟需要什么样的能力&#xff1f;这已经是一个很老的话题&#xff0c;已经有许许多多讨论了。但这其中&#xff0c;可能有一些是容易被人忽略的&#xff0c;或者不容易被注意到的。 我想跟你一起分享&#xff0c;我对这个…

vue 如何实现手机横屏功能

功能背景 有些需求需要手动实现横屏功能&#xff0c;比如点击一个横屏的图标将整个页面90度翻转&#xff0c;再点击退出横屏回到正常页面。 实现思路 一拿到这个需求很可能就被吓到了&#xff0c;但简单来说&#xff0c;就是点击横屏按钮跳转一个新页面&#xff0c;通过 cs…