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

二、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.mzph.cn/news/745621.shtml

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

相关文章

雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕

雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕 硬件平台 AT32A403A Board开发板 1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口GC9A01 产品介绍 推荐一个屏幕资料参考网站 http://www.lcdwiki.com/1.28inch_IPS_Module 1.28寸圆形IPS彩屏&…

C语言——动态内存分配

前言:通过前面的学习,我们知道C语言中在内存中开辟空间的方法有:变量和数组。既然拥有了开辟空间的方法,我们为什么还要学习动态内存分配呢? int val 20; //在内存中开辟四个字节的空间 int arr[10] { 0 }; //在内…

【金三银四】掌趣科技24.3.7 H项目 服务端开发笔试题

考试题型: 不定项选择题 10 道 , 填空题 10 道 , 问答题 2 道 , 编程题 4 道 目录 不定项选择题 10 道填空题 10 道问答题 2 道编程题 4 道 不定项选择题 10 道 在TCP协议中,发送方的窗口大小是由两个关键因素共同决定…

鸿蒙 Harmony 初体验

前言 看现在网上传得沸沸扬扬的鸿蒙,打算弄个 hello world 玩一下, 不然就跟不上时代的发展了 环境安装 我的环境 Windows 11 家庭中文版HarmonyOS SDK (API 9)DevEco Studio (3.1.1 Release)Node.js (16.19.1) 开发IDE下载 官方下载链接 配置 nodejs 这里帮…

Opencascade基础教程(9):切换视图

1、切换视图 1、1 增加视图切换按钮,并添加消息响应函数。 void COCCDemoView::OnButtonFrontview() {//前视图m_View->SetProj(V3d_Yneg);m_View->FitAll(); }void COCCDemoView::OnButtonRearview() {//后视图m_View->SetProj(V3d_Ypos);m_View->Fit…

【华为Datacom数通认证】HCIA-HCIP-HCIE

华为认证课程概述 华为认证是华为技术有限公司(简称"华为")基于"平台生态"战略,围绕"云-管-端"协同的新ICT技术架构,打造的业界覆盖ICT领域最广的认证体系,包含"ICT技术架构认证"、"ICT开发者…

学习JAVA的二十二天(基础)

目录 网络编程 三要素: IP InetAddress类 端口号 协议 UDP协议 TCP协议 前言:学习JAVA的第二十一天(基础)-CSDN博客 网络编程 在网络通信协议下,不同计算机上运行的程序,进行的数据传输。 三要素:…

installation of package ‘RDocumentation’ had non-zero exit status

installation of package ‘RDocumentation’ had non-zero exit status Warning in install.packages :installation of package ‘httr’ had non-zero exit status Warning in install.packages :installation of package ‘openssl’ had non-zero exit status 由于项目需…

蓝桥杯(1):python排序

1 基础 1.1 输出 1.1.1 去掉输出的空格 print("Hello","World",123,sep"") print("hello",world,123,sep) print(hello,world,123) #输出结果 #HelloWorld123 #helloworld123 #hello world 123 1.1.2 以不同的方式结尾 print(&quo…

Ubuntu Flask 运行 gunicorn+Nginx 部署

linux Ubuntu 下运行python 程序出现killed 原因:CPU或内存限制:在华为云上,你可能有CPU或内存使用的限制。例如,如果你使用的是一个固定大小的实例,那么超过该实例的CPU或内存限制可能会导致进程被杀死。 参考&am…

Python Web开发记录 Day10:Django part4 靓号管理与优化

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、数据库准备2、靓号列表3、新建靓号4、编辑靓…

Vue手写模拟步骤条

效果图&#xff1a; 如果要使用element的步骤条就需要强行修改样式&#xff0c;参考之前的那篇步骤条。这里我采用手写div 代码&#xff1a; 思路是给最外层的div一个左边框&#xff0c;给里面的step-item设置左边框为图片&#xff0c;通过定位来移动。 <div class"m…

Canal实现mysql与缓存同步

什么是Canal Canal是阿里巴巴旗下的一款开源项目, 基于java开发. Canal是基于mysql的主从同步来实现的. github地址: https://github.com/alibaba/canal Canal把自己伪装成MySQL的一个slave节点, 从而监听master的binary log变化. 再把得到的变化信息通知给Canal的客户端, 进而…

个人简历主页搭建系列-02:github 仓库作为联系方式

这篇文章暂时没有开始正式搭建网站。首先是最重要的注意事项&#xff1a;隐私。 真实姓名如果大家自己不介意的话其实我觉得还好&#xff0c;现在在互联网上想扒个姓名挺简单的&#xff0c;而且很多人都实名上网hh&#xff08;比如我的几位田径队学弟笑&#xff09;。 电话&a…

小程序学习3 goods-card

pages/home/home home.wxml <goods-listwr-class"goods-list-container"goodsList"{{goodsList}}"bind:click"goodListClickHandle"bind:addcart"goodListAddCartHandle"/> <goods-list>是一个自定义组件&#xff0c;它具…

[抽象]工厂模式([Abstract] Factory)——创建型模式

[抽象]工厂模式——创建型模式 什么是抽象工厂&#xff1f; 抽象工厂模式是一种创建型设计模式&#xff0c;让你能够保证在客户端程序中创建一系列有依赖的对象组时&#xff0c;无需关心这些对象的类型。 具体来说&#xff1a; 对象的创建与使用分离&#xff1a; 抽象工厂模…

信号与系统学习笔记——信号的分类

目录 一、确定与随机 二、连续与离散 三、周期与非周期 判断是否为周期函数 离散信号的周期 结论 四、能量与功率 定义 结论 五、因果与反因果 六、阶跃函数 定义 性质 七、冲激函数 定义 重要关系 作用 一、确定与随机 确定信号&#xff1a;可以确定时间函数…

uniapp移动端 IOS系统下无法与webview通信

不知道有没有人遇到过这个问题 我的页面嵌套了一个webview&#xff08;文件位于项目的hybrif/html&#xff09;目录下 使用evalJS与webview进行通信 代码如下 在安卓里运行是没问题的&#xff0c;但在苹果手机上一直无法通信 连接真机&#xff0c;打印evalJS是个方法&#xf…

C语言中内存函数的使用

memcpy函数的使用和模拟实现 memcpy的使用 函数使用说明&#xff1a; • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果source和destination有任何的重叠&#xff0c;复制的结…

【python】centos 8新装python3.10.0

1.python源码包准备 2.gcc环境安装 如果系统已具备&#xff0c;可以略过。 有的已经自带了gcc&#xff0c;但是如果编译时启动优化的话&#xff0c;如果gcc版本过老就必须要升级。 3.make环境安装 如果系统已具备&#xff0c;可以略过。 4.更新openssl版本&#xff08;很重…