目录
开闭原则(Open Closed Principle,OCP)
Liskov替换原则(Liskov Substitution Principle,LSP)
依赖倒置原则(Dependence Inversion Principle,DIP)
单一职责原则(Single Responsibility Principle,SRP)
合成复用原则(Composite Reuse Principle,CRP)
什么叫软件工程
当软件的规模越来越大,复杂度不断增加,软件项目开发维护过程中的问题就逐步暴露出来:软件产品质量低劣、软件维护工作量大、成本不断上升、进度不可控、程序人员无限度地增加。所以在 60 年代,“软件危机”的概念被提出来。
为解决软件危机,由此出现了一门新兴的工程学科:软件工程。软件工程就是要用工程化的方法去规范软件开发,让项目可以按时完成,成本可控,指令有保证
工欲善其事必先利其器
VScode
快捷键:Ctrl+Shift+P调出VS Code命令行,Ctrl+~ 调出VS Code的终端,Ctrl/⌘+Shift+E 文件资源管理器,Ctrl/⌘+Shift+G 源代码管理,Ctrl/⌘+Shift+F 跨文件搜索,Ctrl/⌘+Shift+D 启动和调试,Ctrl/⌘+Shift+M 查看错误和警告,Ctrl/⌘+Shift+X 管理扩展插件。
git
Vim

正则表达式
1、作用(正则表达式是一种字符串匹配的模式)
数据验证:比如电话号码、邮箱等
替换文本:快速找到特定文本,用于替换
快速提取字符串:基于匹配原则,快速从文档中查找或提取子字符串
2、语法(普通字符+特殊字符)
普通字符
[abc] 匹配[...]的所有字符
[^abc] 取反,除了[...]的其他字符
[A-Z] 区间字母A到Z
. 匹配除(\n换行符 \r 回车符)的任何单个字符
\s \S 匹配所有,\s所有空白符,包括换行 \S非空白符,不包括换行
\w 匹配字母、数字、下划线
特殊字符
$ 结尾位置 (匹配$字符----\$)
^ 开始位置(匹配$字符----\^)
() 子表达式开始和结束(匹配字符----\( 和 \))
* 匹配零次或多次(匹配字符----\*)
+ 匹配一次或多次(匹配字符----\+)
? 匹配零次或一次(匹配字符----\?)
代码中的软件工程
什么样的代码是好代码?
一是规范整洁。遵守常规语言规范,合理使用空格、空行、缩进、注释等
二是逻辑清晰。没有代码冗余、重复,让人清晰明了的命名规则。做到逻辑清晰不仅要求程序员的编程能力,更重要的是提高设计能力,选用合适的设计模式、软件架构风格可以有效改善代码的逻辑结构,会让代码简洁清晰;
三是优雅。优雅的代码是设计的艺术,是编码的艺术,是编程的最高追求
模块化的基本原理
关注点的分离,每一个软件模块都将只有一个单一的功能目标,并相对独立于其他软件模块,使得每一个软件模块都容易理解容易开发,从而整个软件系统也更容易定位软件缺陷bug,整个系统的变更和维护也更容易
模块化设计的常见方法
KISS原则:一个函数或方法只做一件事 使用本地化外部接口来提高代码的适应能力 不要和陌生人说话 先写伪代码 设计通常为每一个程序组件提供一个框架,然后用专业知识来编写代码实现设计 一定要有错误处理
本地化外部接口的含义
我们的代码不是通过API直接调用外部的代码,而是在我们的代码中调用本地的外部接口,本地的外部接口再去调用外部代码
接口的基本概念
接口就是互相联系的双方共同遵守的一种协议规范,通常是通过定义一组API函数来约定软件模块之间的沟通方式
接口的五个基本要素
目的;前置条件;使用接口的双方遵守的协议规范;后置条件;隐含的质量属性
通用接口定义的基本方法
参数化上下文;移除前置条件;简化后置条件
可重入函数与线程安全
可重入的函数可能是线程安全的也可能不是线程安全的;在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题 不可重入的函数一定不是线程安全的
从需求分析到软件设计
什么是需求分析
需求分析是在获取需求的基础上进一步对软件涉及的对象或实体的状态、特征和行为进行准确描述或建模的工作
为什么需求重要
不完整的需求是导致项目失败的主要因素,需求过程的某些部分设计是大部分项目失败的原因,如果不尽早检测到需求错误,代价可能会很高
获取高质量需求的方法
采访利益相关者、回顾文档、研究当前系统、了解用户的任务、使用特定领域的策略、与当前和潜在用户进行头脑风暴
高质量需求的特点
Correct正确的、Consistent一致的、Unambigious无二义性的、Complete完整的、Feasible可行的、Relevant和主要目标相关、Testable可测试的、Traceable可追踪的
需求类型
功能要求:根据所需活动描述所需行为
质量要求或非功能性要求:描述软件必须具备的一些质量特征</