当前位置: 首页 > news >正文

软件设计与重构

**# 软件开发

“Talk is cheap ,show me the code” 。

软件建模

软件建模是在需求和实现之间架起了桥梁。

如何进行软件建模

  • 软件建模原则:不同视角

    • 外部视角:对系统上下文或者环境进行建模
    • 交互视角:对系统及其环境部或者系统的构件之间的交互建模
    • 结构化视角:对系统的组织或者系统所处理的数据的结构进行建模
    • 行为视角:对系统的动态行为以及系统如何响应事件进行建模
  • 软件建模方法:

    • 面向对象方法建模
  • 软件建模工具:

    • UML

UML内容组成:包括事物,关系,图

事物:是UML中重要的组成部分,最静态的部分,代表概念或者物理上的元素。
关系:指的是事物的关系 关联 依赖 泛化 实现
图:指的是事物相互相关

UML 模型在软件开发流程中,不同阶段需要用到不同的UML图

软件开发流程:

timelinetitle 软件开发流程需求分析 : 用例图概要设计 : 类图、对象图、合作图、状态图、顺序图、活动图详细设计 : 类图、对象图、合作图、状态图、顺序图、活动图编码阶段 : \测试 : 类图、组件图、部署图

类图:

  1. 实现:类和接口的关系 类是接口所有特征和行为的实现 虚线三角箭头
  2. 依赖:类似于资源依赖,是后者需要使用前者 虚线箭头
  3. 泛化: 继承关系 实线三角箭头
  4. 关联: 拥有的关系 一个类知道另一类的属性和方法
  5. 聚合: 整体和个体的关系 菱形箭头实线
  6. 组合: 整体和局部

三角箭头:
实线: 泛化 继承的关系
虚线: 实现 接口和类的关系

菱形:
实线: 组合 整体和局部 车 和 车胎 车灯
虚线: 聚合 整体和个体 蚁群和蚂蚁

箭头:
实线: 关联 拥有 一个类知道另一个类的属性和方法
虚线: 依赖

9种UML图:

  1. 用例图 use-case图 ,描述角色以及角色与用例之间的连接关系:泛化、关联、依赖 谁使用系统 以及使用系统做什么? 关联: 角色直接参与用例的执行 泛化: 角色或者用例之间的继承关系 依赖:
  2. 类图 : 用于描述系统中的类 以及各种关系 泛化 实现 依赖 关联 聚合 组合
  3. 对象图 : 表示的类的实例 对象之间的关系
  4. 状态图 : 用于描述类的对象所有可能的状态,以及事件发生时状态转移条件 对类图行为上的补充
  5. 活动图 : 用于描述用例要求所要进行的活动,以及活动之间的约束关系
  6. 顺序图 : 描述参与者与系统对象之间有序的交互过程 。强调消息是如何在对象之间被发送和接收的。
  7. 合作图 : 用于描述对象之间的相互通信关系。
  8. 组件图 : 描述代码构件的物理结构以及各种构件之间的依赖关系。
  9. 部署图 : 描述系统的物理部署 。

动态图: 顺序图 活动图 状态图

设计原则和设计模式

正交四原则:

  1. 最小化变化:重复意味着代码耦合,当重复代码需要修改,容易出现漏改的问题
  2. 分离变化:识别变化方向并对变化预留扩展接口
  3. 缩小依赖范围: 最小化知识原则:依赖接口,不要依赖实现
  4. 向稳定方向依赖: 定义API要关注接口,而不关注实现。接口是稳定的,而实现是不同的

SOLID原则:

  1. 单一职责:一个类,引起它变化的原因只有一个
  2. 开闭原则: 对扩展开放,对修改关闭。
  3. 里氏替换:基类设定一系列规范和契约,子类需要遵守
  4. 依赖倒置原则:接口为稳定的契约 依赖稳定接口
  5. 接口分离原则 : 客户只需要了解必须了解的。 最小知识原则

23种设计模式:

  • 创建型:
    • 工厂方法:隔离创建对象的细节 ,使得创建对象的行为可扩展
    • 抽象工厂:抽象出创建一组相关对象的接口
    • 建造者:包含对象构造的若干过程,因此和tmplate 结合
    • 原型: 基于某个对象为模板创建新的对象:PPT中的母版和普通页
    • 单例 :
  • 结构型:
    • 适配器: 空方法实现接口作为抽象父类
    • 桥接:使用关联代替继承,解决类多维度的扩展导致的 类爆炸问题
    • 组合:将组件组装为整体使用
    • 装饰:常用于在原函数执行前后做一些额外的工作
    • 外观: 利用树状结构减少调用者的复杂度
    • 享元: 复用变化少的对象
    • 代理: 是原对象的一个完整的替代品
  • 行为型:
    • 解释器:一般用于解释执行自定义的某种语法
    • 模板方法: 框架与钩子
    • 责任链:一组对象按照既定的顺序关联起来,依次处理请求,其中任一对象都可以停止调用传递。
    • 命令 : 将行为抽象和解耦
    • 迭代器 : 封装数据的访问行为 顺序和可见性
    • 中介者 : 用一个中介对象来封装一系列的交互,新增一个模块处理两个模块的交互
    • 备忘录 : 将当前对象的状态信息保存为另一个对象,使得对象可以基于状态镜像快速恢复原状态
    • 观察者 :observer 订阅/发布模型,用于事件驱动的设计
    • 状态 :
    • 策略 : 使用接口即使使用strategy ,用于隔离变化
    • 访问者 : 数据和行为分离方法 通过这种分离,可达到一个被访问者动态刷新新的操作而无需做其他的修改的效果

创建型: 提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new运算符直接实例化对象。这让程序在创建对象时更加灵活。要把对象的创建和对象的使用分离。
结构型: 设计模式关注类和对象的组合。继承的概念被用来组合接口和定义对象获得新功能的方式。
行为型: 对象之间的通信。

安全模式

STRIDE

S : Spoofing 假冒 身份认证
T : Tampering 篡改 威胁/数据完整性 防止数据在存储中被篡改
R : Repudiation 抵赖 不可否认性 审计日志设计 确保用户关键行为记录,无法否认其行为
I : information Disclosure 信息泄露 机密性
D : Denial of service 拒绝服务 系统可用性 如何设计软件抵御资源耗尽攻击 性能问题
E : Elevation of privilege 权限提升 最小权限原则

FMEA 故障模式影响分析 **

http://www.dtcms.com/a/270163.html

相关文章:

  • docker部署单机gitlab
  • Pytorch实战——完整的模型训练套路2
  • GitOps实践指南:GitLab CI/CD + ArgoCD 实现 Kubernetes 自动化部署
  • 【AI大模型】深度学习正则化技术:Batch Normalization (BatchNorm) 详解
  • 【GPT深度研究】科研SaaS项目可行性分析报告
  • 【学习笔记】网络设备(华为交换机)基础知识 24 —— 以太网子接口基础知识
  • 【入门级-C++程序设计:3、程序基本语句-多层循环语句】
  • 数据推荐|标贝科技大规模高质量数据集
  • 25.安卓逆向2-frida hook技术-拦截弹框事件(拦截强制更新弹框和解决jadx加载dex文件不全问题)
  • 从0到1搭建ELK日志收集平台
  • 扣子Coze飞书多维表插件参数获取流程
  • 如何利用机器学习(ML)检测异常登录行为
  • 深深浅浅地理解 Python 中的 `Barrier` 对象
  • emscripten编译cocos2dx项目输入框支持中文
  • MySQL 全库表记录统计与空间估算教程
  • 猿人学js逆向比赛第一届第十五题
  • SpringAI学习笔记-MCP服务器简单示例
  • 软考(软件设计师)数据库原理-SQL
  • HTML+JS+CSS制作一个数独游戏
  • CSS揭秘:9.自适应的椭圆
  • 记一次mount point is busy问题排查
  • 数据结构 —— 栈(stack)在算法思维中的巧妙运用
  • C++进阶—二叉树进阶
  • 笔记/TCP/IP四层模型
  • Fence-音视频设备资源同步
  • IT 技术领域创作者三周年纪念日
  • 【CodeTop】每日练习 2025.7.8
  • Java 阻塞队列:7种类型全解析
  • 起重机械的工作循环门限值计算逻辑
  • 容器技术入门与Docker环境部署