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

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

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

  • 软件工程篇
    • 需求分析 ★★★★
      • 结构化需求分析 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.mrgr.cn/news/31759.html

相关文章:

  • Linux---常用shell脚本
  • C#界面设计
  • 2024游戏陪玩app源码的功能介绍/线上陪玩交友上线即可运营软件平台源码搭建流程
  • Flume1.9.0自定义Sink组件将数据发送至Mysql
  • PL/0-语法分析器
  • 自动驾驶仿真:软件在环(SIL)测试详解(精简版入门)
  • Leetcode Hot 100刷题记录 -Day18(反转链表)
  • MongoDB在Linux系统中的安装与配置指南
  • 搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述
  • sourceTree使用脚本一键push代码到gerrit
  • Python使用总结之FastAPI高级功能探索:数据库集成与依赖注入
  • Redis使用场景 | 建议收藏✨
  • BCT 预估block change tracking file的大小
  • 系统分析与设计
  • 【服务器第二期】mobaxterm软件下载及连接
  • C#中DataGridView 的 CellPainting 事件的e.Handled = true
  • C++速通LeetCode中等第16题-环形链表II(快慢指针)
  • Linux笔记---简单指令
  • 前端框架Vue、React、Angular、Svelte对比
  • 写作练习(一)
  • 2024年华为杯中国研究生数学建模竞赛F题(X射线脉冲星光子到达时间建模)思路
  • 为什么Redis这么快及可以实现的功能
  • 大厂校招:希音(Shein)校园招聘面试题及参考答案
  • JavaEE: 深入探索TCP网络编程的奇妙世界(二)
  • idea中.git文件夹存在但是没有git功能列表
  • 关于CONCAT(‘18‘,FLOOR(RAND()*X);