工作两三年的人才能体会的软件设计思想

2023-05-16

最近看了几本关于编程的书籍,都是些讲解软件架构和设计的书。根据目前脑袋中还残留的记忆,相关知识总结如下:

1. 编程范式

目前被提出来的编程范式为:结构化编程范式、面向对象编程范式、函数式编程范式。从bob大叔的大作中看出,编程范式的提出并非为编程增加了什么东西,而是限制了什么。

  • 结构化编程范式,由Edsger Wybe Dijkstra于1968年最先提出。限制了程序的控制权的直接转移;
  • 面向对象编程范式,是在1966年由Ole Johan Dahl和Kriste Nygaard在论文中总结归纳出来的。这两个程序员注意到在ALGOL语言中,函数调用堆栈可以被挪到堆内存区域里,这样函数定义的本地变量就可以在函数返回之后继续存在。限制了程序控制权的间接转移;
  • 函数式编程范式,是基于与阿兰.图灵同时代的数学家Alonzo Church在1936年发明的λ演算的直接衍生物。限制了程序中的赋值。

2. SOLID原则

SOLID原则中最广为人知的应该是单一职责,这也是很多程序员学习的第一个简单原则。但在SOLID原则中,最核心的原则是开闭原则,所有其他的原则都是为其服务的。

  • 单一职责原则,内涵不是指函数或类或模块只做一件事,而是说只有一个变化的方向,只为一个角色服务。这一点很多人存在误解。难点在于如何识别变化的方向!
  • 里式替换原则,类的继承体系,子类均可以替换父类;
  • 迪米特法则(有些地方翻译为得墨忒法则,最少知识原则),只与你的直接朋友交谈,不和陌生人说话;
  • 接口隔离原则,客户端不应该依赖他不需要的接口,类间的依赖关系应该建立在最小的接口上。一个大的接口,可以拆分成两个小的接口给两个不同的类使用。
  • 依赖倒置原则,上层模块不应该依赖于底层模块,他们都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。这个原则在软件设计和解耦中极其重要,平时应该要有意识的去关注软件层次的依赖。
  • 开闭原则,本质上这不是一个具体的原则。一切的一切,都是为了保持软件对扩展开放对修改关闭,维持软件的高内聚低耦合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

工作两三年的人才能体会的软件设计思想 的相关文章

  • 基于深度学习的磁环表面缺陷检测算法

    基于深度学习的磁环表面缺陷检测算法 人工智能技术与咨询 来源 xff1a 人工智能与机器人研究 xff0c 作者罗菁等 关键词 缺陷检测 xff1b 深度学习 xff1b 磁环 xff1b YOLOv3 xff1b 摘要 在磁环的生产制造过
  • 基于PX4的地面无人车避障系统及路径规划研究

    基于PX4的地面无人车避障系统及路径规划研究 人工智能技术与咨询 来源 xff1a 动力系统与控制 xff0c 作者姜琼阁等 关键词 地面无人车 xff1b 避障 xff1b PX4 xff1b 摘要 地面无人车避障及路径规划是指 xff0
  • 基于图像的数据增强方法发展现状综述

    基于图像的数据增强方法发展现状综述 人工智能技术与咨询 2022 03 22 20 57 点击蓝字 关注我们 来源 xff1a 计算机科学与应用 xff0c 作者冯晓硕等 关键词 数据增强 xff1b 图像数据集 xff1b 图像处理 xf
  • 基于改进SSD算法的小目标检测与应用

    人工智能技术与咨询 点击蓝字 关注我们 来源 xff1a 计算机科学与应用 xff0c 作者刘洋等 关键词 SSD xff1b 深度学习 xff1b 小目标检测 摘要 xff1a 摘要 针对通用目标检测方法在复杂环境下检测小目标时效果不佳
  • 组网雷达融合处理组件化设计与仿真

    人工智能技术与咨询 点击蓝色 关注我们 关键词 xff1a 组网雷达 点迹融合 航迹融合 组件化设计 仿真 摘要 数据融合处理是多雷达组网的核心 以典型防空雷达网为参考对象 xff0c 采用组件化设计方式 xff0c 将组网数据融合处理过程
  • 字符设备驱动基础-linux驱动开发第2部分-朱有鹏-专题视频课程

    字符设备驱动基础 linux驱动开发第2部分 5673人已学习 课程介绍 本课程是linux驱动开发的第2个课程 xff0c 从零开始带领大家逐渐熟悉内核模块 xff0c 并且一步步写出一个字符设备驱动程序来控制LED等 本课程对驱动的学习
  • 人工智能 知识图谱

    关于举办 2022年数字信息化培训项目系列 知识图谱Knowledge Graph构建与应用研修班线上课程的通知 各有关单位 一 培训目标 本次课程安排紧密结合理论与实践 xff0c 深入浅出 xff0c 循序渐进 从基本概念讲起 xff0
  • 深度学习(Deep Learning)

    知识关键点 1 人工智能 深度学习的发展历程 2 深度学习框架 3 神经网络训练方法 4 卷积神经网络 xff0c 卷积核 池化 通道 激活函数 5 循环神经网络 xff0c 长短时记忆 LSTM 门控循环单元 GRU 6 参数初始化方法
  • 基于深度学习的机器人目标识别和跟踪

    如今 xff0c 深度学习算法的发展越来越迅速 xff0c 并且在图像处理以及目标对象识别方面已经得到了较为显著的突破 xff0c 无论是对检测对象的类型判断 xff0c 亦或者对检测对象所处方位的检测 xff0c 深度学习算法都取得了远超
  • 散列表与探测法

    动态查找的时候 如果用查找树同时对俩个变量名 字符串 进行查找 会导致效率不高的问题 引入散列的思想 把字符串变成数字 使得对字符串的比较变成对数字的比较 查找方式时间复杂度顺序查找O n 二分查找 静态查找 O log2N 二叉搜索树O
  • Springboot实现VNC的反向代理

    背景 用户需要通过前端HTML页面的noVNC xff08 noVNC是什么 xff1f xff09 客户端连接底层VNC Server服务端 xff0c 为了防止VNC Server的IP暴露 xff0c 因此需要做一层代理 正常情况下使
  • Visual Studio Code 的C++环境配置和调试

    目录 前言 xff1a 1 为什么要写这篇文章 xff1f 2 为什么选择VS Code xff1f 3 如何联系我 xff1f 简而言之 xff0c VS Code免费 43 快速 43 好用 43 潜力无穷 xff1b 一 安装VS C
  • 浅析向量(Vector),迭代器(Iterator)和数组(Array)

    目录 前言 Foreword 向量 Vector 1 何为向量 xff1f 2 如何初始化Vector向量 xff1f 3 向量的基本操作 xff1a 4 Range based For Statement 5 向量的插入操作 xff1a
  • 《数字电路分析》学习札记

    目录 前言 xff1a Chapter 1 数字逻辑基础 进制 xff1a 进制间转换方法 xff1a BCD xff1a 余3码 xff1a 余3循环码 xff1a 格雷码 xff08 循环码 xff09 xff1a 二进制数 格雷码 x
  • Ubuntu 22.04 双系统安装和卸载

    前言 xff1a 一 为什么选择Ubuntu系统 xff1f 1 免费且提供长期系统维护支持 xff1b 2 是主流的Linux服务器发行版 xff1b 3 强大的Shell xff1b 4 简洁好看的图形化UI界面 xff1b 5 丰富的
  • CSS-Div居中方法(Position方法)

    目录 代码展示 xff1a 实际效果 xff1a 具体分析 xff1a 如何联系我 xff1f 代码展示 xff1a lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt
  • 字符设备驱动-linux驱动开发第3部分-朱有鹏-专题视频课程

    字符设备驱动 linux驱动开发第3部分 4561人已学习 课程介绍 本课程是linux驱动开发的第3个课程 xff0c 接上部分继续讲解字符设备驱动的开发要点 xff0c 重点是相关的内核源代码的解析和一些真正驱动惯用的编程手法的引入 本
  • C++测试代码运行时间

    如果我们想直观地看出朴素算法和其他算法对程序运行时间的影响 xff0c 那么就可以采取以下方式 方法1 xff1a 基于头文件ctime和函数clock 的实现 代码1 xff1a include lt iostream gt includ
  • VMware虚拟机安装CentOS 7

    目录 1 VMware软件安装 2 CentOS 7 镜像下载 3 VMware安装CentOS 1 安装前内容设置 xff1a 2 安装中操作步骤 3 安装后语言设置 4 将图形化界面切换为命令符界面 如何联系我 xff1f wei ha
  • 解决Windows开机后无启动项的问题

    前言 为什么会出现这个问题 xff1f 此前PC上装有Windows 43 Ubuntu双系统 xff0c 由于又配置了虚拟机下的Centos xff0c 我把Ubuntu系统卸载了 没想到手滑删除了Windows的引导项 如图所示 xff

随机推荐

  • KMP算法图文详解

    简介 xff1a Knuth Morris Pratt xff08 KMP算法or字符串查找算法 xff09 可在一较长串S内查找一子串P出现的位置 xff0c KMP算法利用最长公共前后缀的特性以避免重新检索先前配对的字符串 xff0c
  • 离散数学期末习题

    前言 xff1a 本文适用于应对HUEL离散数学 期末考试 xff0c 重点整理了HUEL离散数学 期末考试范围内的题型 xff0c 既可以应对HUEL离散数学期末考试 xff0c 亦可以作为数据结构与算法的预备知识 如何联系我 xff1f
  • VMware Tools在Centos 7环境的安装教程

    前言 xff1a 阅读本文 xff0c 您可以得到 xff1a VMware Tools在Centos7环境下的安装步骤 xff1b 正文 xff1a VMware Tools在Centos7环境下安装步骤 xff1b 1 您需要保持虚拟机
  • 宝塔面板快速部署SSL证书

    前言 xff1a 发现自己的网站不能使用https访问 xff0c 原来是没有为网站部署SSL证书 通过本文 xff0c 您可以一键免费部署SSL证书 xff08 Let 39 s Encrypt xff09 正文 xff1a 1 如图显示
  • 宝塔面板部署WordPress(保姆式教程)

    前言 xff1a 通过本篇文章 xff0c 您可以掌握 xff1a 1 基于宝塔面板的快速建站操作 xff1b 2 一些浅浅的建站知识与技能 xff1b 3 WordPress助您快速建站 xff0c 节省您的时间 xff1b 如何联系我
  • VS 2022 C++ 自定义头文件示例

    前言 xff1a 博主最近刚从VS Code转到VS 2022 xff0c 但发现自定义的方法和VS Code有些不同 xff0c 故出一期VS 2022自定义头文件的博客 xff0c 时间仓促 xff0c 请不吝赐教 如何联系我 xff1
  • 零基础搭建网站(保姆级教程)

    前言 xff1a 本教程不需要任何前置知识 xff0c 零基础教您搭建网站 如何联系我 xff1f wei haoran 64 outlook com 正文 xff1a 搭建网站需要什么 xff1f 1 域名 xff1b 2 服务器 xff
  • 驱动框架入门之LED-linux驱动开发第4部分-朱有鹏-专题视频课程

    驱动框架入门之LED linux驱动开发第4部分 5199人已学习 课程介绍 本课程是linux驱动开发的第4个课程 xff0c 主要内容是驱动框架的引入 通过led驱动框架和gpiolib的这两个框架的详细解释 xff0c 让大家学习内核
  • VSCode远程连接服务器(SSH免密登录)

    前文 连接远程服务器的方式众多 xff0c 本文将介绍基于VS Code的SSH免密登录方法 在开始SSH远程链接以前 xff0c 您需要完成以下步骤 xff1a 1 Windows配置SSH xff1a 1 以Windows平台为例 xf
  • Linux云服务器防止暴力破解(三道SSH安全策略)

    前言 新购入的服务器 xff0c 往往用户名默认为root xff0c ssh默认开放22端口 xff0c 且配置SSH服务时往往同时允许密码和公钥二重登录 然而 xff0c 许多非法服务器运行着暴力破解程序 xff0c 通过访问用户名ro
  • Git快速入门(图文教程)

    前言 xff1a Git是目前最流行的版本控制工具之一 xff0c 它可以帮助我们更好地管理代码 xff0c 协作开发 xff0c 以及保证代码的安全性 在学习Git之前 xff0c 我们需要先了解几个概念 xff1a workspace
  • VS Code + phpstudy实现PHP环境配置

    概述 xff1a 要使用VSCode进行PHP开发 xff0c 需要先在本地搭建PHP环境 xff0c 并将其配置到VSCode中 下面是具体的步骤 xff1a 1 下载安装PHPStudy 首先 xff0c 我们需要从PHPStudy官网
  • CSS圆角边框

    设置css圆角边框 1 border radius 属性用于向元素添加圆角边框 css圆角边框代码 xff1a border radius 15px 2 对应四个角 xff0c CSS3提供四个单独的属性 xff1a border top
  • CSS渐变色

    渐变 xff1a 通过渐变可以设置一些复杂的背景颜色 xff0c 可以从实现一个颜色向其他颜色过渡的效果 渐变是图片 xff0c 通过 background image设置 CSS 定义了两种渐变类型 xff1a 线性渐变 xff08 向下
  • js的for循环语句

    For循环语法 xff1a for 循环是在您希望创建循环时经常使用的工具 for 循环的语法如下 xff1a for 语句 1 语句 2 语句 3 要执行的代码块 语句 1 在循环 xff08 代码块 xff09 开始之前执行 语句 2
  • 了解 JavaScript 构造函数

    以下是Faraz Kelhini的客座文章 其中一些东西超出了我的舒适区 xff0c 所以我请凯尔辛普森为我进行技术检查 凯尔的回答 xff08 我们在办公时间会议期间所做的 xff09 非常有趣 它是 xff1a 1 xff09 这篇文章
  • JavaScript 字符串加密和解密

    使用CryptoJS 加密和解密 JavaScript 字符串 使用NcryptJS 加密和解密 JavaScript 字符串 使用CryptoJS 加密和解密 JavaScript 字符串 CryptoJS 是一个 JavaScript
  • DOM特效

    第一节 xff1a 模态框拖拽 1 offset 偏移量 offset 翻译过来就是偏移量 xff0c 我们使用 offset系列相关属性可以动态的得到该元素的位置 xff08 偏移 xff09 大小等 offset 可以得到任意样式表中的
  • linux设备驱动模型-linux驱动开发第5部分-朱有鹏-专题视频课程

    linux设备驱动模型 linux驱动开发第5部分 4285人已学习 课程介绍 本课程是linux驱动开发的第5个课程 xff0c 主要内容是linux的设备驱动模型 xff0c 包括总线 类 设备 驱动等概念 xff0c 重点通过plat
  • 工作两三年的人才能体会的软件设计思想

    最近看了几本关于编程的书籍 xff0c 都是些讲解软件架构和设计的书 根据目前脑袋中还残留的记忆 xff0c 相关知识总结如下 xff1a 1 编程范式 目前被提出来的编程范式为 xff1a 结构化编程范式 面向对象编程范式 函数式编程范式