系统架构设计师 - 软件工程(2)

软件工程

  • 软件工程(13-22分)非常重要
    • 软件系统建模
    • 系统设计
      • 界面设计 ★★
      • 软件设计
      • 结构化设计 ★★
      • 面向对象设计 ★★★★★
        • 基本过程
        • 设计原则
        • 设计模式
          • 创建型模式:创建对象
          • 结构型模式:更大的结构
          • 行为型模式:交互及职责分配


大家好呀!我是小笙,本章我主要分享系统架构设计师 - 软件工程(2)知识,希望内容对你有所帮助!!

软件工程(13-22分)非常重要

软件系统建模

软件系统建模是软件开发中的重要环节,通过构建软件系统模型可以帮助系统开发人员理解系统、抽取业务过程和管理系统的复杂性

软件系统建模优化过程

image-20240621125254189

例题

软件系统建模(Software System Modeling)是软件开发中的重要环节,通过构建软件系统模型可以帮助系统开发人员理解系统、抽取业务过程和管理系统的复杂性,也可以方便各类人员之间的交流。软件系统建模是在系统需求分析和系统实现之间架起的一座桥梁,系统开发人员按照软件系统模型开发出符合设计目标的软件系统,并基于该模型进行软件的维护和改进。请围绕“论软件系统建模方法及其应用”论题,依次从以下三个方面进行论述

  1. 说明软件系统开发中常用的建模方法有哪几类?阐述每种方法的特点及其适用范围

    1、结构化建模方法:结构化建模方法是以过程为中心的技术,可用于分析一个现有的系统以及定义新系统的业务需求。结构化建模方法所绘制的模型称为数据流图(DFD)。对于流程较为稳定的系统可考虑结构化建模方法
    2、信息工程建模方法(或数据库建模方法):信息工程建模方法是一种以数据为中心,但过程敏感的技术,它强调在分析和研究过程需求之前,首先研究和分析数据需求。信息工程建模方法所创建的模型被称为实体联系图(ERD)。主要用于数据建模
    3、面向对象建模方法:面向对象建模方法将“数据”:和“过程”集成到被称为“对象”的结构中,消除了数据和过程的人为分离现象。面向对象建模方法所创建的模型被称为对象模型。随着面向对象技术的不断发展和应用,形成了面向对象的建模标准,即UML(统一建模语言)。UML定义了几种不同类型的模型图,这些
    模型图以对象的形式共建一个信息系统或应用系统,是目前比较常用的建模方法


系统设计

界面设计 ★★

黄金三法则

  • 置于用户控制之下
  • 减少用户的记忆负担
  • 保持界面的一致性

例题

下列关于用户界面设计的叙述中,错误的是 界面交互模型应经常进行修改

  • 界面交互模型应经常进行修改
  • 界面的视觉布局应该尽量与真实世界保持一致
  • 所有可视信息的组织需要按照统一的设计标准
  • 确保用户界面操作和使用的一致性

软件设计

软件设计包括体系结构设计、接口设计、数据设计和过程设计

  • 结构设计:定义软件系统各主要部件之间的关系
  • 接口设计(人机界面设计):软件内部,软件和操作系统之间以及软件和人之间如何通信
  • 数据设计:将模型转换成数据结构的定义(好的数据设计将改善程序结构和模块划分,降低过程复杂性)
  • 过程设计:系统结构部件转换成软件的过程描述

例题

软件设计包括了四个既独立又相互联系的活动:高质量的 数据设计 将改善程序结构和模块划分,降低过程复杂性; 软件结构设计 的主要目标是开发一个模块化的程序结构,并表示出模块间的控制关系; 人机界面设计 描述了软件与用户之间的交互关系

  • 程序设计 数据设计 算法设计 过程设计
  • 软件结构设计 数据结构设计 数据流设计 分布式设计
  • 数据架构设计 模块化设计 性能设计 人机界面设计

结构化设计 ★★

  • 概要设计(外部设计):功能需求分配给软件模块,确定每个模块的功能和调用关系,形成模块结构图
  • 详细设计(内部设计):为每个具体任务选择适当的技术手段和处理方法

结构化设计原则

  • 模块独立(高内聚、低耦合)

    image-20240625125002962 image-20240625125024197

  • 保持模块的大小适中

  • 多扇入,少扇出

  • 深度和宽度均不宜过高

模块的四个要素

  1. 输入和输出,模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那取得输入,进行加工后再把输出返回调用者
  2. 处理功能,指模块把输入转换成输出所做的工作
  3. 内部数据,指仅供该模块本身引用的数据
  4. 程序代码,指用来实现模块功能的程序

面向对象设计 ★★★★★

基本过程

image-20240818132252326

设计原则
  • 单一职责原则:设计目的单一的类
  • 开放封闭原则:对扩展开放,对修改封闭
  • 里氏替换原则:子类可以替换父类
  • 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
  • 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
  • 组合重用原则侧:要尽量使用组合,而不是继承关系达到重用目的
  • 迪米特原则(最少知识原则):一个对象应当对其他对象有尽可能少的了解

例题

1、最少知识原则(也称为迪米特原则)是面向对象设计原则之一,指一个软件实体应当尽可能少地与其他实体发生相互作用。这样,当一个实体被修改时,就会尽可能少地影响其他的实体。下列叙述中, 在类的结构设计上,每个类都应当尽可能提高对其属性和方法的访问权限 不符最少知识原则

  • 在类的划分上,应当尽量创建松耦合的类
  • 在类的设计上,只要有可能,一个类型应当设计成不变类
  • 在类的结构设计上,每个类都应当尽可能提高对其属性和方法的访问权限
  • 在对其他类的引用上,一个对象对其他对象的引用应当降到最低
设计模式

概念:主要关注软件系统的设计,与具体的实现语言无关

注意:有打钩的表示既可以是类模式,也可以是对象模式,无下划线的表示只是对象模式

创建型模式:创建对象
  • 工厂方法(Factory Method)模式 √

    定义了创建对象的接口,它允许子类决定实例化哪个类(动态生成)

    image-20240627125039527
  • 抽象工厂(Abstract Factory)模式

    提供一个接口,可以创建一系列相关或相互依赖的对象而无需指定它们具体的类(生产成系列对象)

    image-20240627125314210
  • 原型(Prototype)模式

    允许对象在不了解要创建对象的确切类以及如何创建等细节的情况下创建自定义对象。通过拷贝原型对象来创建新的对象(克隆对象)

  • 单例(Singleton)模式

    确保一个类只有一个实例,并且提供了对该类的全局访问入口(单实例)

  • 构建器(Builder)模式

    将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示(复杂对象构造)

结构型模式:更大的结构
  • 适配器(Adapter)模式

    将一个类的接口转换成用户希望得到的另一种接口。它使原本不相容的接口得以协同工作(转换接口)

    image-20240703145129825

  • 桥接(Bridge)模式

    将一个复杂的组件分成两个独立的但又相关的继承层次结构将类的抽象部分和它的实现部分分离开来,使它们可以独立地变化(继承树拆分)

    image-20240705143421438

  • 组合(Composite)模式

    创建树型层次结构来改变复杂性,同时允许结构中的每一个元素操作同一个接口。用于表示“整体部分”的层次结构(树形目录结构)

    image-20240705144255883
  • 装饰(Decorator)模式

    在不修改对象外观和功能的情况下添加或者删除对象功能即动态地给一个对象添加一些额外的职责(动态附加职责)

  • 外观(Facade)模式

    子系统中的一组接口提供了个统一的接口(对外统一接口)

  • 享元(Flyweight)模式

    可以通过共享对象减少系统中低等级的、详细的对象数目提供支持大量细粒度对象共享的有效方法(汉字编码)

  • 代理(Proxy)模式

    为控制对初始对象的访问提供了一个代理或者占位符对象(快捷方式)

行为型模式:交互及职责分配
  • 职责链(Chain of Responsibility)模式

    可以在系统中建立一个链,这样消息可以在首先接收到它的级别处被处理,或者可以定位到可以处理它的对象(传递职责)

  • 命令(Command)模式

    在对象中封装了请求,这样就可以保存命令,将该命令传递给方法以及像任何其他对象一样返回该命令(日志记录,可撤销)

  • 解释器(Interpreter)模式 √

    可以解释定义其语法表示的语言,还提供了用表示来解释语言中的语句的解释器(虚拟机的机制)例如适用于工作流

  • 迭代器(Iterator)模式

    为集合中的有序访问提供了一致的方法,而该集合是独立于基础集合,并与之相分离的(数据集)

  • 中介者(Mediator)模式

    通过引入一个能够管理对象间消息分布的对象,简化了系统中对象间的通信(不直接引用)

    image-20240716141349566
  • 备忘录(Memento)模式

    保持对象状态的快照,这样对象可以在不向外界公开其内容的情况下,返回到它的最初状态(游戏存档)

  • 观察者(Observer)模式

    为组件向相关接收方广播消息提供了灵活的方法,定义对象间的一种一对多的依赖关系(订阅、广播、联动)

  • 状态(State)模式

    允许一个对象在其内部状态改变时改变它的行为(状态变成类)

  • 策略(Strategy)模式

    定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化(多方案切换)

    image-20240717142219965

  • 模板方法(Template Method)模式 √

    提供了在不重写方法的前提下允许子类重载部分方法的方法(框架)

  • 访问者(Visitor)模式

    提供了一种方便的、可维护的方法来表示在对象结构元素上要进行的操作(数据与操作分离)

例题

1、设计模式按照目的可以划分为三类,其中, 创建型 模式是对对象实例化过程的抽象。例如 Singleton 模式确保一个类只有一个实例,并提供了全局访问入口; Prototype 模式允许对象在不了解要创建对象的确切类以及如何创建等细节的情况下创建自定义对象; Builder 模式将复杂对象的构建与其表示分离

  • A 创建型 B 结构型 C 行为型 D 功能型
  • A Facade B Builder C Prototype D Singleton

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科三预约考试,为什么我场次排名在前,后面排名又变了

什么时候知道是否预约成功 系统确认考试预约结果的时间一般为考试前5-7个工作日,同时根据预约人数系统会自行判断提前1-2日或延长1-2日公示预约结果,学员至少考试前三天会收到预约成功短信通知。 如果预约失败了怎么办?会计入考试次数吗&am…

Java之线程篇一

目录 如何理解进程? 进程和线程的区别 线程的优点 线程的缺点 线程异常 线程用途 创建线程 方法一:继承Thread类,重写run() 观察线程 小结 方法二: 实现Runnable接口,重写run() 方法三:继承Threa…

【西安电子科技大学】2024年士兵计划考研信息总结!

西安电子科技大学 学校简介上方图片奖助学金下方图片研招网址https://gr.xidian.edu.cn/普通复试https://gr.xidian.edu.cn/info/1073/13301.htm士兵复试总分为各学科门类、各专业学位类别(领域)国家A类线,单科不限。士兵名额20报考说明无录取…

MES系统从哪几方面提升企业制造水平?

在当今这个快速变化的制造环境中,企业对于提升制造水平的追求从未停止。制造执行系统(MES)作为连接企业战略规划与车间实际操作的核心工具,其重要性日益凸显。盘古信息MES系统,凭借其独特的功能模块和创新的设计理念&a…

两种图像透明背景转特定颜色方法的比较

之前写过一篇博客,关于透明背景转换为特定颜色,当时使用了NumPy数组采用布尔索引转换的方式,这次我们把这种转换和常规的逐像素转换的方式进行比较,看那种方法效率更高。记得以前使用Matlab的时候,显然是矩阵布尔索引的…

基于SSM的体育馆预约管理系统---附源码84196

摘 要 体育馆作为一个重要的运动场所,需要进行预约管理以保证资源的合理利用和场馆秩序的维护。传统的人工预约管理方式存在效率低、容易出错等问题,因此,在互联网高速发展的当下,需要设计和实现一个基于SSM的体育馆预约管理系统&…

优思学院|六西格玛实施关键:如何整合定性与定量数据

在精益六西格玛的世界中,数据不仅是工具,更是推动变革和改进的关键力量。了解定性数据和定量数据的区别,可以为流程改进提供强大的见解和策略。 定性数据与定量数据的本质 首先,定性数据和定量数据是两种截然不同的概念。定性数据…

springboot+vue 初始

1.控制器 2.文件上传拦截器 #过滤规则 # 默认访问static下面的文件http://localhost:8009/4.jpeg, # 带上static-path-pattern/static/**后,http://localhost:8009/static/4.jpeg spring.mvc.static-path-pattern/static/**#静态资源位置 spring.web.res…

笔记分享: 香港中文大学CSCI5610高级数据结构——最邻近查询

文章目录 Approximate Nearest Neighbor Search \textbf{Approximate Nearest Neighbor Search} Approximate Nearest Neighbor Search 1. Doubling Dimension \textbf{1. Doubling Dimension} 1. Doubling Dimension 1.0. Intro \textbf{1.0. Intro} 1.0. Intro 1.1. Doubling…

webshell免杀--免杀入门

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理webshell免杀的一些基础思路 入门级,不是很深入,主要是整理相关概念 免杀对象 1.各类杀毒软件 类似360,火绒等,查杀己方webshell的软件。 2.各类流量…

Spring Boot和OCR构建车牌识别系统

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 OCR介绍 OCR(Optical Character Recognition)是光学字符识别技术的缩写,它能够将图像中的文本转换为机器可读和编辑的数字文本格式。这种技术广泛应用于数据输入、文档管理…

【名单】新一批DCMM贯标认证名单公布

​近日,DCMM官方平台发布通知公告,经对评估机构提交的380家企业贯标评估报告进行核查,均符合要求,现对名单进行公示,其中: 甲方受管理级(二级):276家 乙方受管理级(二级):96家 甲方…

LMDeploy 量化部署实践闯关任务

一、LMDeploy量化介绍 1.LMDeploy部署模型的优势 LMDeploy实现了高效的推理、可靠的量化、卓越的兼容性、便捷的服务以及有状态的推理。 相比于vllm具有领先的推理性能: LMDeploy也提供了大模型量化能力:主要包括KV Cache量化和模型权重量化。 LMDepl…

【python】python代码打包工具cx_Freeze的介绍、原理、用法及实战案例分析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

AI工作流:低代码时代的革新者,重塑手机问答类应用生态

在这个数字化迅猛发展的时代,低代码技术正以惊人的速度改变着我们的生活方式。作为低代码人群的先锋,AI工作流技术正在以前所未有的方式,赋予非技术人群实现梦想的能力 🔥能用AI-低代码传送门:https://www.nyai.chat …

1. windows搭建Kafka教程

目录 1. 部署zookeeper 1.1 下载地址 1.3 修改zoo配置 1.4 启动zookeepe服务 02 部署kafka 2.1 下载组件包 2.2 解压安装包 2.3 修改配置 2.4 启动kafka服务端 1. 部署zookeeper 1.1 下载地址 下载地址: kafka/zookeeper 下载地址 (qq.com) 1.2 解压 (…

JS模块化总结 | CommonJS、ES6

BV13W42197jR 个人笔记 目录 JS模块化基础知识1. 概述1.1 什么是模块化1.2 为什么需要模块化? 2 模块化规范3 导入&导出4 CommonJS规范4.1 初步体验4.2 导出数据4.3 导入数据4.4 扩展理解4.5 浏览器端运行 5 ES6模块化规范5.1 初步体验5.2 Node中运行ES65.3 导出数据①分别…

一文掌握 Web 测试:功能、界面、兼容与安全的综合测试指南!

随着Web技术的不断演进,测试除了对应用的功能性、界面美观性、跨平台兼容性的基本要求外、安全性和性能的要求也逐步增高。因此,全面、系统的测试思维和策略成为了保证Web应用高质量的关键因素。本篇文章将从功能测试、界面测试、兼容性测试和安全测试四…

【数据结构】PTA 带头结点的链式表操作集 C语言

本题要求实现带头结点的链式表操作集。 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P ); 其中List结构定义如下: typedef struc…

Kotlin学习-01创建kotlin学习环境

安装idea https://www.jetbrains.com/zh-cn/ 创建项目 选择kotlin 修改Main.kt fun main() {print("Hello World!") }运行