架构-软件工程模块-2

系统分析

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

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

结构化分析

  • 结构化分析是面向数据流的需求分析方法,它的思想是通过功能分解方式把系统功能分解到各个模块中。
功能模型-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访问者模式
    • 表示一个作用于某对象结构中的各元素的操作。可以在不改变各元素的类的前提下定义作用与这些元素的新操作,即对于某个对象或一组对象,不同的访问者,产生的结果不同,执行操作也不同。如处方单,收银员看到算账,药房看到拿药。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++学习——c与c++const修饰的变量的区别

c语言下const修饰的变量 1、c语言下const修饰的变量都有空间 2. c语言的const修饰的全局变量具有外部链接属性 07 const修饰的变量.c #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h>const int a 10;//常…

解析使用FPGA逻辑实现FIR滤波器的几种架构

有限脉冲响应(finite impulse response&#xff0c;FIR)数字滤波器 一、FIR数字滤波器理论介绍 FIR滤波器的实质就是输入序列与系统脉冲响应的卷积&#xff0c;即&#xff1a; 其中&#xff0c;N为滤波器的阶数&#xff0c;也即抽头数&#xff1b;x(n)为第n个输入序列&#xff…

AI人工智能标记数据的技术:类型、方法、质量控制、应用

AI人工智能 标记数据 在人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;领域中&#xff0c;标记数据是非常重要的一环。它是指对原始数据进行标记和注释&#xff0c;以便机器学习算法可以理解和利用这些数据。标记数据可以提高机器学习模型的准确…

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

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

HackTheBox-关卡Fawn

1. 连接靶场&#xff0c;打开FAWN实例场景&#xff0c;检查是否互通 TASK1 3 个字母的首字母缩写词 FTP 代表什么&#xff1f; 答案是&#xff1a;File Transfer Protocol TASK2 问题是&#xff1a;FTP服务通常监听哪个端口&#xff1f; FTP监听的TCP端口号为21,监听的数据端…

计算机操作系统(慕课版)第二章课后题答案

一、简答题 (1)什么是前趋图&#xff1f;试画出下面四条语句的前趋图. S1&#xff1a;axy&#xff1b; S2&#xff1a;bz1&#xff1b; S3&#xff1a;ca-b&#xff1b; S4&#xff1a;wc1&#xff1b; 答&#xff1a;前趋图(Precedence Graph)是一个有向无循环图&#xff0c;…

进程控制--进程的等待

回顾 之前我们已经学习了进程的状态和进程的退出如果你没有这些基础知识&#xff0c;应先去了解进程的相关基础知识。 这次我们主要来学习如何让进程等待子进程的退出。 为什么要等待子进程&#xff1f; 之前我们在学习进程的状态的时候&#xff0c;我们知道了进程有一种状态…

spring boot +Sa-Token优雅的实现项目鉴权!

1. 技术选型 最近在做登录、授权的功能&#xff0c;一开始考虑到的是spring boot spring security&#xff0c;但spring security太重&#xff0c;而我们是轻量级的项目&#xff0c;所以&#xff0c;spring security不适合我们。 而后考虑spring boot shiro&#xff0c;但s…

ChatGPT ✖️ 前端 = 有点er意思

HOT! HOT! HOT! &#x1f525; &#x1f525; &#x1f525; ChatGPT登上了国内各大平台的热搜榜&#xff0c;应该在去年11月末的时候就有不少同学了解并使用过&#xff0c;那个时候它刚刚问世&#xff0c;在互联网圈子里有了很大的热度&#xff0c;但是对于大众来说&#xff…

fastapi基础篇

文章目录 简介环境搭建安装基础文件自动文档 基础使用POST请求传递参数返回定制信息jinja2返回html 简介 FastAPI 是一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;使用 Python 3.6 并基于标准的 Python 类型提示。 关键特性 快速&#…

「 计算机网络 」TCP的粘包拆包问题

「 计算机网络 」TCP的粘包/拆包问题 参考&鸣谢 大病初愈&#xff0c;一分钟看懂TCP粘包拆包 雷小帅 TCP 的粘包拆包以及解决方案 一乐说 文章目录 「 计算机网络 」TCP的粘包/拆包问题一、前言二、为什么UDP没有粘包三、粘包拆包发生场景四、常见的解决方案五、Netty对粘包…

内卷把同事逼成了“扫地僧”,把Git上所有面试题整理成足足24W字测试八股文

互联网大厂更多的是看重学历还是技术&#xff1f; 毫无疑问&#xff0c;是技术&#xff0c;技术水平相近的情况下&#xff0c;肯定学历高/好的会优先一点&#xff0c;这点大家肯定都理解。 说实话&#xff0c;学弟学妹们找工作难&#xff0c;作为面试官招人也难呀&#xff01…

【PCIE732】基于 Kintex UltraScale 系列FPGA 的2 路40G 光纤通道适配器(5GByte/s 带宽)/XCKU060

板卡概述 PCIE732 是一款基于PCIE 总线架构的高性能数据传输卡&#xff0c;板卡具有1 个PCIex8 主机接口、2 个QSFP40G 光纤接口&#xff0c;可以实现2路QSFP 40G 光纤的数据实时采集、传输。板卡采用Xilinx 的高性能Kintex UltraScale 系列FPGA 作为实时处理器&#xff0c;板…

9. Linux下实现简单的socket通讯

本文简单介绍了UDP传输层协议&#xff0c;并在Linux下实现简单的socket通讯 一、UDP UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种无连接的传输层协议&#xff0c;它不保证数据包的可靠性和顺序。UDP在IP协议的基础上增加了简单的差错…

TCP是面向字节流的协议

TCP字节流 之所以会说 TCP 是面向字节流的协议&#xff0c;UDP 是面向报文的协议&#xff0c;是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同&#xff0c;也就是问题原因在发送方。 为什么 UDP 是面向报文的协议&#xff1f; 当用户消息通过 UDP 协议传输时&#xff0c;…

《Java 核心技术面试》课程笔记(十)

如何保证集合是线程安全的? 典型回答 Java 提供了不同层⾯的线程安全支持。 在传统集合框架内部&#xff0c;除了 Hashtable 等同步容器&#xff0c;还提供了所谓的同步包装器&#xff08;Synchronized Wrapper&#xff09;&#xff0c;我们可以调用 Collections 工具类提供…

Android java层hook------xposed框架的使用

xposed曾经是android平台上最好的java层hook和调试工具&#xff0c;由于已经不再更新&#xff0c;当前支持的android系统版本比较老旧&#xff0c;目前只能支持到android6.0&#xff0c;故已经逐渐落伍&#xff0c;目前android上最广泛使用的hook工具是frida&#xff0c;这是另…

C语言函数大全-- _w 开头的函数(5)

C语言函数大全 本篇介绍C语言函数大全-- _w 开头的函数 1. _wspawnl 1.1 函数说明 函数声明函数功能int _wspawnl(int mode, const wchar_t* cmdname, const wchar_t* arglist, ...);启动一个新的进程并运行指定的可执行文件 参数&#xff1a; mode &#xff1a; 启动命令的…

用爬虫分析沪深300指数超长走势

我们知道&#xff0c;一个股市里面有非常多的股票&#xff0c;我们如何能够量化整个股市整体的行情呢&#xff0c;答案是通过一些综合性的指数。本文所选用的沪深300就是这类指数中的一个。我们先来看一下百度百科对于沪深300的解释。 由于股票价格起伏无常&#xff0c; 投资者…

蓝桥杯拿到一等奖,并分享经验

昨天和群里的小伙伴在群里聊&#xff0c;有的小伙伴竟然说蓝桥杯一等奖没有含量&#xff0c;我也是醉了&#xff01; 就像去年看了一个号主写的&#xff1a;研究生遍地都是! 放眼全国14亿人口&#xff0c;别说研究生了&#xff0c;本科生占比有多少? “蓝桥杯是我人生中得到…