架构-软件工程模块-2

news2024/11/27 2:40:51

系统分析

数据流图可能出案例题,状态转换图了解作用即可
用例图、类图选择题多,暴徒了解即可

系统分析
结构化分析
数据流图
状态转换图
面向对象分析
用例图
包含关系
扩展关系
泛化关系
类图
关联关系
聚合关系
组合关系
依赖关系
泛化关系
实现关系
包图

结构化分析

  • 结构化分析是面向数据流的需求分析方法,它的思想是通过功能分解方式把系统功能分解到各个模块中。
功能模型-DFD数据流图
数据字典
行为模型-STD状态转换图
数据模型-ER实体关系图

在这里插入图片描述

名称注意事项
数据流数据流的流向:
从一个加工流向另一个加工
从加工流向数据存储(写)
从数据存储流向加工(读)
从外部实体流向加工(输入)
从加工流向外部实体(输出)
加工加工要有输入输出:
有输入没有输出 – 黑洞
有输出没有输入 – 奇迹
输入不足以产生输出 – 灰洞
外部实体外部实体可以是人、物品、其他系统

面向对象分析

  • 面向对象的分析(Object Oriented Analysis,OOA)运用面向对象方法,对问题域进行分析和理解,正确认识其中的事物及它们之间的关系,找出描述问题域和系统功能所需的类和对象,定义它们的属性和职责,以及它们之间所形成的各种联系。
  • 面向对象的建模是面向对象分析的关键,面向对象建模主要使用UML图。基于UML面向对象需求分析过程大致分为以下几个步骤:
    • 利用用例及用例图表示需求。
    • 利用包图及类图表示目标软件系统的总体框架结构。

用例图

  • 面向对象的分析主要由顶层架构图(包图)、用例与用例图、领域概念模型(类图)构成

  • 用例图展现了一组用例,参与者和它们之间的关系

    • 参与者:存在于系统外部,并与系统进行交互的任何事物。参与者可以由人、物、其他系统、时钟组成。
    • 通信关联表示的是参与者和用例之间的关系,或用例与用例之间的关系。发现用例的方法可以采用“动词(短语)+名词(短语)”的形式
    • 用例是由系统执行的一系列动作,为相关的参与者提供其所期望的服务。
  • 用例之间的关系:

    • 包含关系(include):大家共同的功能,两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。
    • 扩展关系(extends):不一定需要的功能,对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。
    • 泛化关系(generalize):反继承,抽象更高级的类,描述父类与子类之间的关系。

类图

类图展现了一组对象、接口、协作和它们之间的关系。

类之间的关系:关联、聚合、组合、依赖、泛化、实现

  • 依赖:使用的关系,一个类的实现需要另一个类的协助。如:汽车依赖汽油。
  • 关联:拥有的关系,关联提供了不同类之间的结构关系,它在一段时间内将多个类的实例连接在一起。有单向关联,双向关联。如:人拥有身份证。
  • 组合关系:整体与部分的关系。部分只能属于一个整体,部分与整体生命周期相同。
  • 聚合关系:整体与部分的关系。部分可能属于多个整体,生命周期可以不同。
  • 泛化关系:父类与子类的关系,父类又称为超类或基类,子类又称派生类。如:学生和老师都是人
  • 实现关系:将说明和实现联系起来。一个或多个类可以实现一个接口,而每个类分别实现接口中的操作。如:车、船都是交通工具

包图

包被描述成文件夹,可以用于UML任何一种图上。是一种维护和描述系统总体结构的模型的重要建模工具,通过包与包之间关系的描述,展现出系统模块之间的依赖关系。
可以看成是类图的一种

系统设计

主要考这些工具的特点
设计过程选择案例都有可能考

系统设计
系统设计概述
概要设计
模块结构图
层次结构图
HIPO图
详细设计
程序流程图
伪代码
盒图
处理流程设计
问题分析图
判定表
判定树
结构化设计
结构化设计的概念与特征
模块的属性与划分原则
结构化的程序设计
面向对象设计
设计过程
实体类
边界类
控制类
设计原则
设计模式

系统设计概述

  • 概要设计(系统总体结构设计)

    • 功能需求分配给模块
    • 模块调用关系形成模块结构图系统结构图
    • 将需求转化为数据结构软件的系统结构
    • 主要使用的图:
      • 系统结构图=模块结构图(structure chart,SC):反映系统的功能实现和模块之间的联系与通信,包括各模块之间的层次结构
      • 层次图
      • HIPO(Hierarchy plus Input-Process-Output,HIPO)图:输入-处理-输出的层级结构,描述系统结构
  • 详细设计

    • 详细的数据结构与算法
    • 程序流程图(Program Flow Diagram,PFD):顺序、选择、循环结构
    • 盒图(N-S图):表示层次关系,有结构化的特点
    • 过程设计语言(Process Design Language,PDL),又称伪代码
  • 处理流程设计
    - 确定各个系统模块的内部结构,包括数据组织、控制流、加工过程、实施细节
    - 常用图形工具:程序流程图、IPO图、盒图、问题分析图、判定树、表格工具判定表、语言工具过程设计语言

在这里插入图片描述

在这里插入图片描述

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

结构化设计

结构化设计的概念

是一个自顶向下、逐步求精和模块化的过程
包括:

  • 体系结构设计:定义软件系统和各主要部件之间的关系。零件如何组装成汽车。
  • 数据设计:将模型转换成数据结构的定义。好的数据设计将改善程序结构和模块划分,降低过程复杂性。零件间传递的信息,加速,减速。
  • 接口设计:软件内部,软件和操作系统间以及软件和人之间如何通信。通过踩油门、刹车的方式传递
  • 过程设计:系统结构部件转换成软件的过程描述。接收到加速信息后,要加大电机输出功率。

软件设计

软件结构设计的任务是定义系统的主要结构元素之间的关系。通常是从数据流出发,对数据流图进行分析,得出软件的层次化的模块结构图。

数据流图
在这里插入图片描述
模块结构图
在这里插入图片描述

结构化设计的特征

  • 信息隐蔽与隐藏:信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,并且尽可能少的暴露其内部的处理过程。通过信息隐蔽可以提高软件的可修改性可测试性可移植性
  • 模块化
  • 高内聚与低耦合

模块

模块是实现功能的基本单位,它一般具有功能、逻辑和状态三个基本属性。

  • 外部特性:模块结构与功能
  • 内部特性:局部数据、程序代码

在模块划分时需要遵循如下原则:

  • 模块的大小要适中
  • 模块的扇入(被其他模块调用的次数)和扇出(调用其他模块的个数)要合理,越小越好
  • 深度和宽度适当
  • 模块要高内聚、低耦合

结构化的程序设计

特征:顺序、选择(分支)、循环结构

如程序流程图

面向对象设计

红色字体选择题高频考点
在这里插入图片描述

面向对象的设计过程可以分为:

  • 设计用例实现方案

    • UML的交互图(顺序图、协作图)适用于用例方案的表示。包含三个步骤:
      • 提取边界类、实体类、和控制类
      • 构造交互图。UML交互图,以交互图作为用例的精确实现方案。
      • 根据交互图精化类图。
    • 在UML交互图中,对每个类的对象都规定了它必须响应的消息以及类的对象之间的消息传递通道。
  • 设计技术支撑方案:软件项目往往需要一组技术支撑机制提供服务。如

    • 数据持久存储服务
    • 安全控制服务
    • 分布式事务管理服务
    • 并发与同步控制服务
    • 可靠消息服务
  • 设计用户界面

  • 精化设计模型:之前的颗粒度可能较粗,进一步细化。

  • 面向对象设计的类有三种类型:

    • 实体类
      • 来源于领域模型的类
      • 一定有属性,不一定有操作
      • 反映的信息需要在系统中处理,并需要进行持久化存储。
    • 边界类
      • 用于系统接口与外界进行交互
    • 控制类
      • 控制用例工作的类
      • 体现应用程序的执行逻辑

设计原则

原则说明
单一职责目的单一的类
开放-封闭对扩展开放,对修改封闭
里氏替换子类可以替换父类
依赖倒置要依赖于抽象,不是具体实践。对接口进行编程,不要对实现编程
接口隔离使用多个专门的接口比使用单一的总接口好
组合重用尽量使用组合而不是继承达到重用的目的
迪米特一个对象应当对其他对象有尽可能少的了解

设计模式

选择题

创建型模式用于创建对象工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、。共五种。口诀:单抽原建厂
结构型模式处理类或对象的组合适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。共七种。口诀:外侨组员代配饰。
行为型模式描述类与对象怎样交互、怎样分配职责策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。共十一种。口诀:观摩对策,责令解放,戒忘台。
  • Factory Method工厂方法模式
    • 定义一个用于创建对象的接口,让子类决定哪一个类实例化。其实就是定义一个抽象类,所有的子类都实现实现接口,用户直接调用子类的方法。
  • Abstract Factory抽象工厂模式
    • 提供一个或一系列相关或相互依赖对象的接口,而无需指定它们具体的类。如:沙发、茶几有不同的风格,如中式,欧式等等。客户端使用时,经过挑选得到一个欧式的工厂,第一次买了沙发(调用new sofa),一段时间后,再次购买茶几(调用new table)。保证了风格的一致性,不用关心其他的风格,也不受影响。
  • Builder 建造者模式
    • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。强调构建过程相同,即步骤相同,把差异封装的创建者类里面。
  • Prototype原型模式
    • 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。系统中存在大量相同、相似的对象。存在clone的方法,直接生成一个对象。如你在很多张照片上添加相同文字,在第一张照片添加后,后续的只需要复制粘贴即可。
  • Singleton单例模式
    • 保证一个类仅有一个实例,并提供一个访问它的全局访问点。如线程池、各种管理器等。
  • adapter适配器模式
    • 将一个类的接口转换成客户希望的另一个接口。adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。如实时操作系统移植第三方库时,常常需要有一个适配层。
  • Bridge桥接模式
    • 将抽象部分与它的实现部分分离,使他们都可以独立的变化。如不同图形和不同的颜色,将图形的实现和颜色的实现分离,再进行组合得到所需要的图形。
  • Composite组合模式
    • 将对象组合成树形结构以表示”部分-整体“的层次结构。如文件夹和文件的关系。
  • Decorator装饰模式
    • 动态的给一个对象添加一些额外的职责,比生成子类的方式更加灵活。动态即可运行时添加。如你有茉莉花茶,增加一个柠檬,就成了柠檬茉莉花茶。
  • Facade外观模式
    • 为子系统中的一组接口提供一个一致的界面,隔离外部系统与子系统复杂的交互过程。如网关给服务分发消息。
  • Flyweight Pattern享元模式
    • 运用共享技术有效的支持大量细粒度的对象。如围棋游戏中的棋子,除了位置不同,其他都相同,所以可以共享一个对象。
  • Proxy Pattern代理模式
    • 为其他对象提供一种代理以控制对这个对象的访问。如代理人,代理服务器。
  • Chain Of Responsibility Pattern责任链模式
    • 避免请求发送者和接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。类似于 PjSip 库的实现方式。
  • Interpreter Pattern解释器模式
    • 给定一个语言,定义它文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。如在实时操作系统中实现python
  • Template Pattern模板方法
    • 定义一个操作的算法骨架将一些步骤延迟到子类中。在子类中重定义该算法的特定步骤。如ISP算法。
  • Command Pattern命令模式
    • 将一个请求封装成一个对象,从而使得不同的请求对客户进行参数化:对请求排队或请求日志,以及支持可撤销的操作。如命令行参数
  • Iterator Pattern迭代器模式
    • 提供一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部表示。如电视频道的切换。
  • Meditor Pattern中介者模式
    • 用一个中介对象来封装一系列的对象交互,中介者使对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的修改它们之间的交互。如系统和各硬件之间的关系。
  • Memerto Pattern备忘录模式
    • 不破坏封装性的前提下,捕获对象的内部状态,保存状态,这样可以将对象恢复到原先的保存状态。如word文档的撤销
  • ObServer Pattern观察者模式
    • 观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。如系统事件监听。
  • State Pattern状态模式
    • 对于对象内部的状态,允许其在不同的状态下,拥有不同的行为,对状态单独封装成类。如登陆成功可显示退出,登陆失败显示账号密码输入框。
  • Strategy Pattern策略模式
    • 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们可以相互替换。如摄像头的环境策略,夜晚,户外,雨天等。
  • Visitor Pattern访问者模式
    • 表示一个作用于某对象结构中的各元素的操作。可以在不改变各元素的类的前提下定义作用与这些元素的新操作,即对于某个对象或一组对象,不同的访问者,产生的结果不同,执行操作也不同。如处方单,收银员看到算账,药房看到拿药。

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

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

相关文章

加密那些事

一、前言 说到加解密也许有些人会有些陌生(仅对于初学者或其他行业的学者),先不说那些让人看到千篇一律的概念,就是如果两个人发信息怎样才能不被第三个人知道呢?是不是脑海里冒出了使用某种暗号,只有相互传…

每一个“大佬级别”的测试工程师,都有着怎样的成长那个路线?3分钟为你揭晓谜底!

目录 引言 1.何为软件测试工程师? 2.软件测试工程师的职责? 3.为什么要做软件测试? 4.软件测试的前途如何? 5.工具和思维谁更重要? 6.测试和开发相差大吗? 7.成为测试工程师的必备条件 8.测试的分…

虚拟机栈概述

一、概述 1.1、虚拟机栈背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功…

网络分析和机器学习

文章目录 网络分析1.Introduction to networks and graph foundations and algorithmsNetwork types (social/bio/comp), Euler/Hamilton, Graphs (matrix/adj)Breadth-first search (shortest paths), Depth-first search (conn. compnts) 2. Emergent global / local network…

PS的基础操作

1、图片放大缩小alt鼠标滚轮 2、按住空格不放,拖拽鼠标可以改变图片的位置 3、英文状态下按字母t,再点击想要查看的文字,就可以在菜单栏上看到所有属性(取消选中按esc键) 4、点击它可以画选区来查看间距; w代表宽;h代表…

Jenkins版本升级

Jenkins版本过低的时候,一些插件无法升级,会引发一系列错误,这个时候我们就要升级版本了 一、下载更新包 第一种方式:Jenkins页面下载最新包 第二种官网上下载war包(Jenkins官网) 二、打开服务器搜索jenkins.war路径 1、如果Jenk…

CSDN 的 MD编辑器一些用法

一、点击关键语句跳转指定位置 在CSDN写文章的时候,写的文章过长往往会让读者很难找到自己想看的部分,这时候有个 跳转到指定位置功能 就非常的便利。CSDN在MD编辑器上(富文本编辑器只有一种)就提供了两种跳转到指定位置的方法: 一、目录转跳…

【SCADA】KingSCADA将数据插入SQLServer的方法

大家好,我是雷工! 本篇通过实例,介绍KingSCADA3.7访问SQL Server2022数据库。 一、概述 1、创建数据库及数据表格; 2、配置ODBC数据源。 3、通过KingSCADA与数据库建立连接,将数据写入数据库对应表格。 二、创建数据…

自动化测试与手工测试?你真的了解吗?如何共存...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

代码随想录算法训练营第二十七天|39. 组合总和 40.组合总和II131.分割回文串

文章目录 39. 组合总和思路代码总结 40.组合总和II思路代码总结 131.分割回文串思路代码总结 39. 组合总和 思路 我举过例子,如果是一个集合来求组合的话,就需要startIndex,例如:77.组合 ,216.组合总和III 。 如果是…

【AIGC使用教程】Microsoft Edge/Bing Chat 注册使用完全指南

欢迎关注【AIGC使用教程】 专栏 【AIGC使用教程】SciSpace 论文阅读神器 【AIGC使用教程】Microsoft Edge/Bing Chat 注册使用完全指南 【AIGC使用教程】GitHub Copilot 免费注册及在 VS Code 中的安装使用 【AIGC使用教程】GitHub Copilot 免费注册及在 PyCharm 中的安装使用 …

算法时间复杂度

参考视频&#xff1a;https://www.bilibili.com/video/BV14j411f7DJ 目录 1.常数阶O(1) 2.对数阶O(IogN) 3.线性阶O(n) 4.线性对数阶O(nlogN) 5.平方阶O(n^2) 6.立方阶O(n^3) 7.K次方阶O(n^k) 8.指数阶(2^n) 9.阶乘O(n!) 两层for循环 for (int i 1; i <…

有模型强化学习和免模型强化学习有什么区别?

有模型强化学习&#xff08;Model-Based Reinforcement Learning&#xff09;和无模型强化学习&#xff08;Model-Free Reinforcement Learning&#xff09;是两种不同的强化学习方法。 有模型强化学习是指&#xff0c;智能体在学习过程中能够对环境进行建模&#xff0c;即学习…

软件测试分类: 你需要知道的不同类型测试

文章目录 一. 按测试对象进行划分1. 界面测试2. 可靠性测试3. 容错性4. 文档测试5. 兼容性测试6. 易用性测试7. 安装卸载的测试8. 安全测试9. 性能测试10. 内存泄漏测试 二. 按是否查看代码划分1. 黑盒测试(Black-box Testing)2. 白盒测试(White-box Testing)冒泡排序测试用例进…

【1 Vue基础 - 模板语法-绑定】

1 VSCode代码片段 链接: link 2 Mustache双大括号语法 插入内容 <body><div id"app"><!-- 1.基本使用 --><h2>{{ message }}</h2><h2>当前计数: {{ counter }} </h2><!-- 2.表达式 --><h2>计数双倍: {{ c…

研发项目工时统计工具哪个好?9大工时管理系统盘点

工时管理是项目型企业的重要需求&#xff0c;特别是在人力成本占比较高的行业&#xff0c;如软件开发、设计咨询、会计律师等。工时管理可以帮助企业核算项目人工成本&#xff0c;控制成本投入&#xff0c;提高项目利润&#xff0c;客观考核员工绩效&#xff0c;优化资源分配等…

C++类和对象入门(中)

C类和对象入门 中 1. 类的6个默认成员函数2. 构造函数2.1 概念2.2 特性 3.初始化列表4.析构函数4.2 特性 5. 拷贝构造函数5.1 特性 6.运算符重载6.1 赋值运算符重载6.2前置和后置重载 7. 自实现日期类 1. 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空…

golang 服务中 context 超时处理的思考

文章目录 前言起因&#xff1a;日志告警引发的思考什么是contextcontext的作用context超时之后继续执行 or 中断 最后 前言 公司运行的服务代码中&#xff0c;随处可见各种各样的日志信息&#xff0c;其中大多数是用来记录各种异常的日志&#xff0c;一方面&#xff0c;当出现…

煤矿电子封条实施方案 yolov7

煤矿电子封条实施方案采用YOLOv7网络模型算法技术&#xff0c;煤矿电子封条实施算法模型过将全国各省矿山实时监测数据&#xff0c;实现对全国各矿山及时有效的处理及分析。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;研究团队希望它能够同时支持移动 GPU 和…

Arthas实现热更新代码

目录 1.Arthas简介 2.准备Demo 3.启动Arthas 4.Arthas命令 5.使用retransform命令热更新代码 1.Arthas简介 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对…