系统架构设计师 - 案例特训专题 - 软件工程篇

案例特训专题 - 软件工程篇

  • 软件工程篇
    • 需求分析 ★★★★
      • 结构化需求分析 SA
      • 数据流图
      • 答题技巧
    • 面向对象设计 ★★
      • UML 图
        • 概况
        • 用例图
        • 类图与对象图
        • 顺序图
        • 通信图
        • 状态图
        • 活动图
        • 定时图
        • 构件图
        • 包图
        • 部署图


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

软件工程篇

需求分析 ★★★★

结构化需求分析 SA

image-20240830123829741

数据流图

概述

image-20240830124202653

平衡原则

  • 父图与子图之间的平衡
  • 子图内平衡,以下是异常现象
    • 黑洞:一个加工只有输入数据流而无输出数据流
    • 奇迹:一个加工只有输出数据流而无输入数据流
    • 灰洞:若一个加工的输入数据流无法通过加工产生输出流

答题技巧

一、补充实体

  • 人物角色:如客户、管理员、主管、经理、老师、学生
  • 组织机构:如银行、供应商、募捐机构
  • 外部系统:如银行系统、工资系统、后台数据库(当要开发的是中间件时)

二、补充存储

  • 存储的文字方面特征:文件、表、库、清单以及档案

三、补充数据流

  • 数据平衡原则
    • 顶层图与0层图对比,是否有顶层图有,但0层图无的数据流,或反之
    • 检查图中每个加工,是否存在只有入没有出,或只有出没有入,或根据输入的数据无法产生对应的输出的情况
  • 按题目说明与图进行匹配
    • 说明中的每一句话,都能与图中有对应关系,当把说明中的实体与数据流标识出来之后,容易缩小对应范围,找出纰漏

四、补充加工名

  • 加工是用于处理数据流的,所以要补充加工名,可以把该加工涉及到的数据流,在说明中标识出来,再在数据流名称所在的句子中,找“动词+名词”的结构,分析是否可作为加工(如:生成报告、发出通知、批改作业、记录分数,当然这只是普遍情况,也有例外,如物流跟踪、用户管理)

面向对象设计 ★★

UML 图

概况
  • 静态图(结构图):类图、对象图、构件图、部署图、制品图、包图、组合结构图
  • 动态图(行为图):用例图、顺序图、通信图、状态图、活动图、交互概览图、定时图
用例图
  • 用例图描述一组用例、参与者及它们之间的关系

  • 用户角度描述系统功能

  • 参与者是外部触发因素(包括用户、组织、外部系统,时间)

  • 用例是功能单元

关系包括:包含关系、扩展关系以及泛化关系

  • 包含关系:其中这个提取出来的公共用例称为抽象用例,而把原始用例称为基本用例或基础用例

    image-20240903124919828
  • 扩展送系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样使描述可能更加清晰

    image-20240903124935134
  • 泛化关系:当多个用例共同拥有一种类以的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例

    image-20240903124945267

例题

1、在某银行业务的用例模型中:“取款”和“存款”两个用例中都需要执行查询余额的功能,将查询余额提取成独立的用例,那么“取款”和“存款”用例与“查询余额”用例之间的关系属于 包含关系

  • 扩展关系
  • 包含关系
  • 依赖关系
  • 继承关系

2、采用UML分析用户需求时,用例 UC1 可以出现在用例 UC2 出现的任何位置,那么UC1和UC2之间的关系是 generalize

  • include
  • extend
  • generalize 泛化关系
  • call
类图与对象图

类图:类图描述一组类、接口、协作和它们之间的关系
对象图:对象图描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照

多重度

  • 1:表示一个集合中的一个对象对应另一个集合中一个对象
  • 0.*:表示一个集合中的一个对象对应另一个集合中的0个或多个对象
  • 1*:表示一个集合中的一个对象对应另一个集合中的一个或多个对象
  • *:表示一个集合中的一个对象对应另一个集合中的多个的对象

关系

  • 依赖关系:一个事物发生变化影响另一个事物
  • 泛化关系:特殊 / 一般关系
  • 关联关系:描述了一组链,链是对象之间的连接
    • 聚合关系:整体与部分生命周期不同
    • 组合关系:整体与部分生命周期相同
  • 实现关系:接口与类之间的关系
image-20240903125623080

例题

1、UML用关系把事物结合在一起,依赖关系 描述一个事物发生变化会影响另一个事物的语义; 泛化关系 描述特殊元素的对象可替换一般元素的对象

  • 聚合关系 关联关系 包含关系 依赖关系
  • 实现关系 聚合关系 泛化关系 关联关系
顺序图

顺序图是一种交互图,它强调对象之间消息发送的顺序,同时显示对象之间的交互

image-20240904125354071
通信图

通信图也是一种交互图,它强调对象之间存在的消息收发关系,而不专门突出这些消息发送的时间顺序

image-20240904125618844
状态图

状态图是对类描述的补充。用于展现此类对象所具有的可能状态,以及某些事件发生时其状态转移情况

image-20240905123933289

例题

1、在订单处理的过程中,会员可以点击“取消订单”取消该订单。如果支付失败,该订单将被标记为挂起状态,可后续重新支付,如果挂起超时30分钟未支付,系统将自动取消该订单。订单支付成功后,系统判断订单类型:
(1)对于常规订单,标记为备货状态,订单信息发送到货运部,完成打包后交付快递发货
(2)对于定制订单,会自动进入定制状态,定制完成后交付快递发货。会员在系统中点击“收货”按钮变为收货状态,结束整个订单的处理流程

image-20240905124526035

解答如下

image-20240905124445056
活动图

活动图是一种特殊的状态图。活动图描述一个操作中要进行的各项活动的执行流程。同时,也常被用来描述一个用例的处理流程或者某种交互流程

image-20240905125130372

泳道式的活动图

image-20240905125338007

例题

1、某某公司欲开发一个在线交易系统。为了能够精确表达用户与系统的复杂交互过程,应该采用UML的 顺序图 进行交互过程建模

  • 类图
  • 顺序图
  • 部署图
  • 对象图

2、 活动图 适用于描述复杂算法的执行流程

  • 活动图
  • 状态图
  • 类图
  • 用例图
定时图

定时图也叫计时图,也是一种交互图,用于展示交互过程中的真实时间信息,具体描述对象状态变化的时间点以及维持特定状态的时间段

image-20240905125903975
构件图

构件图描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。构件图用于表示系统的静态设计实现视图。对于由小的部件构建大的系统来说,构件图是很重要的。构件图是类图的变体

包图

包图,图标像是一个带标签的文件夹,包的基本思想是把共同工作的元素放到一个文件夹中(例:多个类或构件组成了一个子系统,就可以将它们放到一个包中)

部署图

部署图描述对运行时的处理节点及在其中生存的构件的配置。部署图给出了架构的静态部署视图,通常一个节点包含一个或多个部署图

image-20240906125503061

例题

1、某软件公司拟为物流企业开发一套库存管理系统,该系统的部分需求陈述如下:

  1. 库存管理系统主要包括货物入库管理、货物出库管理、仓库管理、统计报表和系统管理等功能
  2. 库存管理系统的用户包括仓库管理员、仓库经理和系统管理员,用户必须在注册后才能使用系统功能;用户可以选择使用邮件注册或电话注册
  3. 仓库管理员在进行出入库操作前必须先登录;仓库经理可以通过系统查看统计报表,如果前一个月的报表未生成,则系统自动生成统计报表,否则直接显示
  4. 系统管理员可以在系统中设置仓库温度范围,当仓库内温度超过最高值或者低于最低值时,系统自动调用温控管理操作,连接温度调节系统进行制冷或加热
  5. 仓库管理功能要求每个月1日零点对前一个月货物入库和出库记录进行数据汇总操作。项目组决定构造用例模型以描述系统需求

【问题1】用例建模的首要任务是识别系统中的参与者。请根据题目中所描述的需求,识别出系统中有哪些参与者?

用例模型的参与者:仓库管理员、仓库经理、系统管理员、时间、温度、温度调节系统

【问题2】用例建模的主要工作是书写用例规约。用例规约通常包括哪几部分内容?

用例名称、简要说明、事件流、非功能需求、前置条件、后置条件、扩展点、优先级

【问题3】建立了用例模型后,可以利用用例之间的关系调整用例模型,用例之间的关系包括哪几种?对于每种关系请根据题目中所描述的需求分别给出一组用例

  1. 用例之间的关系包括:包含关系、扩展关系、泛化关系
  2. “出入库操作”与“登录”属于包含关系;“查看统计报表”与“生成统计报表”属于扩展关系;,“用户注册”与“邮件注册”和“电话注册”属于典型的泛化关系

2、某软件公司为电子商务企业开发一套网上交易订单管理系统,以提升服务的质量和效率。在项目之初,项目组决定采用面向对象的开发方法进行系统开发,并对系统的核心业务功能进行了分析,具体描述如下

  1. 注册用户通过商品信息页面在线浏览商品,将需要购买的商品添加进购物车内,点击“结算”.按钮后开始录入订单信息
  2. 用户在订单信息录入页面上选择支付方式,填写并确认收货人、收货地址和联系方式等信息。点击“提交订单”按钮后产生订单,并开始进行订单结算
  3. 订单需要在30分钟内进行支付,否则会自动取消,用户也可以手工取消订单
  4. 用户支付完成,经确认后,系统开始备货,扣除该商品可接单数量,并移除用户购物车中的所有商品资料
  5. 生成订单表单,出货完毕,订单生效。为用户快递商品,等待用户接收
  6. 用户签收商品,交易完成

【问题1】 识别设计类是面向对象设计过程中的重要工作,设计类表达了类的职责,即该类所担任的任务。请用300字以内的文字说明设计类通常分为哪三种类型,每种类型的主要职责,并针对题干描述案例涉及的具体类为每种类型的设计类举出2个实例

  1. 实体类,实体类映射需求中的每个实体,保存需要存储在永久存储体中的信息,例如,用户、商品等
  2. 控制类,控制类是用于控制用例工作的类,用于对一个或几个用例所特有的控制行为进行建模。例如,结算、备货等
  3. 边界类,边界类用于封装在用例内、外流动的信息或数据流。例如,浏览器、购物车等

【问题2】 在面向对象的设计过程中,活动图(activity diagram)阐明了业务用例实现的工作流程。请用300字以内的文字给出活动图与流程图(flow chart)的三个主要区别

  1. 活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现系统的行为,而非处理过程;而流程图着重描述处理过程
  2. 流程图一般都限于顺序进程,而活动图则可以支持并发进程
  3. 活动图是面向对象的,而流程图是面向过程的

【问题3】在面向对象的设计过程中,状态图描述了一个实体基于事件反应的动态行为。请根据题干描述,填写下图中的(a)~(e)空白,完成订单处理的状态图

image-20240910125044679
  • (a)取消
  • (b)待结算
  • ©大于30分钟
  • (d)订单生效
  • (e)用户签收

3、某软件企业为影音产品销售公司W开发一套在线销售系统,以提升服务的质量和效率。项目组经过讨论后决定采用面向对象方法开发该系统。在设计建模阶段需要满足以下设计要求

  1. W公司经常进行促销活动。根据不同的条件(如订单总额、商品数量、产品种类等),公司可以提供百分比折扣或现金减免等多种促销方式供提交订单的用户选择。实现每种促销活动的代码量很大,且会随促销策略的不同经常修改。系统设计中需要考虑现有的促销和新的促销,而不用经常地重写控制器类代码
  2. 该在线销售系统需要计算每个订单的税率,不同商品的税率及计算方式会有所区别。所以W公司决定在系统中直接调用不同商品供应商提供的税率计算类,但每个供应商的类提供了不同的调用方法。系统设计中需要考虑如果公司更换了供应商,应该尽可能少地在系统中修改或创建新类

项目组架构师决定采用设计模式来满足上述设计要求,并确定从当前已经熟练掌握的设计模式中进行选择,这些设计模式包括:适配器模式(Adapter)、构造器模式(Builder))、命令模式(Command)、外观模式(Facade.)、中介模式(Mediator)、原型模式(Prototype)、代理模式(Proxy)、状态模式(State)和策略模式(Strategy)等

【问题1】设计模式按照其应用模式可以分为三类:创建型、结构型和行为型,请用200字以内文字说明三者的作用

  • 创建型模式主要用于创建对象,为设计类实例化新对象提供指南
  • 结构型模式主要用于处理类或对象的组合,对类如何设计以形成更大的结构提供指南
  • 行为型模式主要用于描述类或对象的交互以及职责的分配,对类之间交互以及分配责任的方式提供指南

【问题2】 请将项目组已经掌握的设计模式按照其作用分别归类到创建型、结构型和行为型模式中

  • 创建型模式:构造器模式、原型模式
  • 结构型模式:适配器模式、外观模式、代理模式
  • 行为型模式:命令模式、中介模式、状态模式和策略模式

【问题3】 针对题目中所提出的设计要求(1)和(2),项目组应该分别选择何种设计模式?请分别用200字以内文字说明具体的解决方案

  • 策略模式

    解决方案:在具有公共接口的独立类中定义每个计算。可以利用该模式创建各种促销类,它们从同一个超类继承。每个类都有相同名称的标准接口方法,用于根据订单编号计算将要折扣的金额总数。计算每个促销的内部代码对促销类来说完全不同

  • 适配器模式

    解决方案:增加一个类作为适配器,转换类的接口到客户端类期望的另一个接口。实现一个适配器类,这个类为系统的其他部分提供了一个不变的方法供调用,为了集成不同商品供应商提供的税率计算类,编写一个适配器类的子类,包含调用购买类所需的代码。该子类将系统的调用映射到某个供应商的税率计算类。如果要更换供应商,那么只需要写一个新的适配器子类,其他保持不变

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

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

相关文章

【刷题—双指针】复写0、三数之和、四数之和

目录 一、复写0二、三数之和三、四数之和 一、复写0 题目: 注意:题目要求是原数组上复写 思路: 一、确定最后一个复写的位置。定义两个变量cur等于0,dest等于-1,让cur去遍历数组。如果cur指向的元素是0,…

【玉米田】

题目 代码 #include <bits/stdc.h> using namespace std; typedef long long LL;const int mod 1e8; const int M 1 << 12; LL f[13][M]; int g[13]; vector<int> state; vector<int> p[M]; int n, m; bool check(int x) {return !(x & x <&…

【Linux课程学习】make/Makefile:Linux项目自动化构建工具

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f349;一.make/Makefile的理解&#xff1a; …

基于SpringBoot+Vue+MySQL的国产动漫网站

系统展示 用户前台界面 管理员后台界面 系统背景 随着国内动漫产业的蓬勃发展和互联网技术的快速进步&#xff0c;动漫爱好者们对高质量、个性化的国产动漫内容需求日益增长。然而&#xff0c;市场上现有的动漫平台大多以国外动漫为主&#xff0c;对国产动漫的推广和展示存在不…

【Java集合】深入了解ArrayList实现原理

概述 1.数据存储是基于动态数组实现的&#xff0c;默认初始容量为10。 2.添加数据时&#xff0c;首先需要检查元素个数是否超过数组容量&#xff0c;如果超过了则需要对数组进行扩容&#xff08;1.5倍&#xff09;&#xff1b;插入数据时&#xff0c;需要将从插入点 k 开始到数…

BMC 虚拟i2c访问PCA9545(switch芯片)后面的设备,为什么找不到PCA9545?

1.说明 1.1 背景 无意中看到PCA9545(switch芯片)后面有设备&#xff0c;但是PCA9545设备本身是连接到物理设备i2c上的&#xff0c;然而扫描该物理i2c bus&#xff0c;却找不到该设备。此篇文章主要找一下该原因的。 1.2 参考代码 当前使用的是ast2600芯片&#xff0c;可参考…

java使用ByteBuffer进行多文件合并和拆分

1.背景 因为验证证书的需要&#xff0c;需要把证书文件和公钥给到客户&#xff0c;考虑到多个文件交互的不便性&#xff0c;所以决定将2个文件合并成一个文件交互给客户。刚开始采用字符串拼接2个文件内容&#xff0c;但是由于是加密文件&#xff0c;采用字符串形式合并后&…

threejs性能优化之gltf文件压缩threejs性能优化之glb文件压缩

在使用Three.js进行3D图形开发时&#xff0c;GLTF&#xff08;GL Transmission Format&#xff09;文件因其高效性和灵活性而广受欢迎。然而&#xff0c;随着模型复杂度的增加&#xff0c;GLTF文件的大小也会显著增加&#xff0c;这可能会对加载时间和渲染性能产生负面影响。为…

Redis数据结构之哈希表

这里的哈希表说的是value的类型是哈希表 一.相关命令 1.hset key field value 一次可以设置多个 返回值是设置成功的个数 注意&#xff0c;哈希表中的键值对&#xff0c;键是唯一的而值可以重复 所以有下面的结果&#xff1a; key中原来已经有了f1&#xff0c;所以再使用hse…

linux 操作系统下dhcrelay命令介绍和案例应用

linux 操作系统下dhcrelay命令介绍和案例应用 dhcrelay是一个用于DHCP&#xff08;动态主机配置协议&#xff09;中继的命令&#xff0c;主要功能是在没有本地DHCP服务器的子网中转发DHCP请求。这使得不同子网的DHCP客户端能够与位于其他子网中的DHCP服务器进行通信。 dhcrela…

基于微信小程序的购物系统+php(lw+演示+源码+运行)

基于微信小程序的购物系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的购物系统的开发全过程。通过分析基于微信小程序的购物系统管理的不足&#xff0c;创建了一个计算机管理基于微信小…

如何使用 Python 连接 MySQL 数据库?什么是 ORM(对象关系映射),如何使用

数据库是现代软件开发中的核心部分&#xff0c;而 Python 作为一种流行的编程语言&#xff0c;广泛应用于数据处理和分析工作。通常我们需要通过 Python 连接数据库并执行一些常见的操作&#xff0c;如插入、查询、更新和删除数据。在实际开发中&#xff0c;MySQL 是非常常用的…

LeetCode[中等] 155. 最小栈

设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…

线程知识点补充

我们之前&#xff1a; 主线程下来&#xff0c;调用了一个方法run方法&#xff0c;方法执行完后再继续往下走主线程。 咱们期望&#xff1a; 两个同时执行&#xff0c;交替执行。 一些核心概念说明&#xff1a; 一个程序写好是静态的&#xff0c;给他运行起来就是一个进程了…

java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; 资源获取方式在最下方 java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频) 土地档案管理系统是一种将传统纸质档案进行数字化管理的软件。通过该系统&#xff0c;用户能够高效地进行土地档案的存储、查阅、修改和删除等操作…

unity3d入门教程八-飞机大战

unity3d入门教程八-飞机大战 19.2竖屏设置19.3主控脚本19.4制作子弹19.5制作飞机19.6制作怪物19.7击中目标19.8随机生成怪物19.9预制体怪物随机更换头像19.10怪物相关优化19.11游戏背景19.12游戏最终优化一、 HP显示二、怪物预制体三、分值显示四、背景音乐 19.2竖屏设置 切换到…

鸿蒙媒体开发系列08——AudioCapturer录制音频

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下方名片&#xff0c;关注公众号&#xff0c;公众号更新更快&#xff0c;同时也有更多学习资料和技术讨论群。 1、概述 我们在鸿蒙媒体开发系列07——AVRecorder音频录制中我们了解到&#xff0c…

【后端开发】JavaEE初阶—线程的理解和编程实现

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解多线程的知识哟~~~&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【后端开发】JavaEE初阶——计算机是如何工作的&#xff1f;&#xff1f;&#xff1f;-CSDN博客 &#x1f308;感兴趣的小伙…

Linux介绍;Linux安装;Linux常见错误

一&#xff0c;Linux简介 1.1操作系统 指人和计算机硬件沟通交流的平台。 1.2常见的操作系统 1.21 PC windows MacOS Linux 1.22 移动端 Android IOS 鸿蒙 塞班 1.3什么是Linux Linux&#xff0c;一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&…

【漏洞复现】泛微OA E-Office jx2_config.ini 敏感信息泄漏漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…