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

Introduction to Software Engineering(TE)

Program Design Language

也称为:伪代码语言(Pseudo-code Language)

PDL 的同类(或相关替代)

名称简介是否代码结构化
流程图 (Flowchart)用图形方式描述处理逻辑
伪代码 (Pseudo-code)通用术语,PDL就是一种伪代码形式
UML 活动图建模工具中的一种行为建模方式,用于描述过程流程
Nassi-Shneiderman图结构化图形流程图(无分支线),适用于结构化编程表示
结构化英语类似自然语言的方式,但带有结构化控制词(如 IF-THEN)

SC 图(Structure Chart,结构图)

  • 结构化程序设计中用于承上启下的工具

  • 位于概要设计和详细设计的衔接位置

  • 主要用于:

    • 表示模块之间的调用关系

    • 表达系统的模块分解层次结构

    • 指明模块之间数据流或控制流的方向

所以,SC 图是概要设计的输出,同时也是详细设计的输入依据,用于指导每个模块内部的 PAD 图或伪代码设计。

DFD 图(数据流图)

  • 用于需求分析阶段

  • 表示数据在系统中的流动和处理过程

  • 不是用来连接设计阶段的工具

PAD 图(Problem Analysis Diagram)

  • 又称“问题分析图”或“过程设计图”

  • 属于详细设计阶段的工具

  • 用于描述单个模块内部的具体实现逻辑

  • 它是SC 图的下级实现图,并不用于“衔接”

程序流程图(Flowchart)

  • 一种早期的通用图形表示法

  • 表达过程控制逻辑,但缺乏模块化、结构化设计特征

  • 不适合用于大规模系统设计的层级表达

按照软件开发阶段的逻辑顺序如下:

阶段图形工具中文名称作用说明
1. 需求分析DFD 图数据流图分析系统做什么,表达数据如何流动
2. 概要设计SC 图结构图把系统分成多个模块,表达模块间调用结构
3. 详细设计PAD 图过程设计图描述某个模块“内部怎么做”
4. 编码辅助流程图程序流程图可选工具,适合小模块的过程控制逻辑表达

常见耦合类型(由强到弱)

耦合类型英文名简要说明强弱级别
内容耦合Content Coupling一个模块直接修改/访问另一个模块内部数据或逻辑❌ 最强(最差)
控制耦合Control Coupling一个模块控制另一个模块的执行逻辑(如传入标志位)较强
公共耦合Common Coupling多个模块共享全局变量中等
数据耦合Data Coupling模块间仅通过参数传递必要数据,不含控制信息或全局变量✅ 最弱(最好)

“软件结构使用的图形工具

选项图形工具名称英文缩写用途说明
A数据流图DFD (Data Flow Diagram)用于需求分析阶段,描述数据流转而非结构
B过程设计图PAD (Problem Analysis Diagram)用于详细设计阶段,描述模块内部逻辑
✅ C结构图SC (Structure Chart)✅ 用于描述软件模块结构和调用关系
D实体-联系图ER (Entity-Relationship Diagram)用于数据库设计,描述实体与关系结构
序号中文名称英文缩写简述
内容耦合Content Coupling直接访问另一个模块内部数据或控制其逻辑
公共耦合Common Coupling多模块共享全局变量
控制耦合Control Coupling一个模块控制另一个模块的执行逻辑(如传标志)
标记耦合Stamp Coupling传递的数据结构包含对方不需要的字段
数据耦合Data Coupling只通过必要数据参数进行交互
非直接耦合Non-direct Coupling(非标准)基本上无任何调用关系、数据关系
无耦合No Coupling完全独立

📌 注:不同教材中“非直接耦合”有时不列入七种之一,而是作为“最低耦合”或“理想情况”补充出现。

  • “问题域对象”即系统要解决的问题空间中真实存在的实体(例如:图书馆系统中的“图书”、“借阅者”、“借书记录”)。

  • 识别这些对象,是将现实问题映射到程序世界的第一步。

概念英文缩写/词组说明
面向对象分析OOA (Object-Oriented Analysis)识别对象与需求建模
问题域对象Problem Domain Objects分析对象模型的核心内容
面向对象设计OOD (Object-Oriented Design)描述对象结构和交互(设计层面)

面向对象分析过程中常见的三类模型:

模型类型说明代表图形工具/建模图
对象模型表示系统中涉及的类、对象、属性、操作、关系等结构类图(Class Diagram)
功能模型描述系统要完成的功能与输入输出之间的变换关系数据流图(DFD)、用例图(Use Case)
动态模型表示对象如何随时间变化、如何响应事件、状态如何迁移等状态图、时序图(Statechart / Sequence)
DFDData Flow Diagram功能建模工具之一
UMLUnified Modeling Language通用建模语言(统一建模)

“建模、分析这些活动有没有标准的先后顺序,还是说存在多种流程方法?”

既有经典标准顺序(常见于传统模型),也存在多种变体流程(如敏捷、迭代、原型方法)
也就是说,不同的软件开发方法论中,这些活动的顺序可能固定交错、或者反复回溯

标准的“瀑布模型”顺序(最典型的线性流程)

这种是传统软件工程中最明确的阶段性流程:

阶段主要活动常用建模工具/方法
① 可行性研究立项、成本估算、风险分析无建模,主要是文档+表格
② 需求分析明确系统做什么DFD(数据流图)、ER图、用例图
③ 概要设计系统如何分模块SC图(结构图)、模块图
④ 详细设计每个模块怎么实现PAD图、伪代码、类图、状态图等
⑤ 编码实现编写源代码编程语言 + 编码规范
⑥ 测试验证检查是否满足需求单元测试、集成测试、验收测试等
⑦ 部署运维上线并维护日志监控、用户反馈系统

📌 在这个模型中,每一步都严格在前一步完成后进行,所以“建模”通常穿插在第 2–4 阶段。

面向对象开发模型中的顺序(适配 UML 流程)

UML 方法论中推荐的是一种“逐步细化、结构清晰”的过程,顺序如下:

步骤活动内容对应模型/图形工具
1. 领域建模抽象出问题空间的对象和关系类图、对象图
2. 用例建模从用户视角分析功能需求用例图(Use Case Diagram)
3. 静态建模描述系统结构(类、关系、继承等)类图、包图等
4. 动态建模描述行为随时间变化(状态/交互)状态图、时序图
5. 交互建模表现对象间如何协作完成用例通信图、协作图
6. 实现建模映射到代码结构部署图、组件图

📌 这些建模活动可以并行推进,但通常建议先有静态结构,再逐步补充行为与交互。

敏捷开发中的建模顺序:没有固定顺序,更强调迭代

  • **敏捷开发(Agile)**不强调一次性完成建模或设计,而是:

    • 快速识别最关键用例/对象

    • 快速建立最小可行产品(MVP)

    • 不断从用户反馈中修正模型与代码

    • 建模工具以轻量、可沟通为主,比如手绘用例图或白板类图

常见的模型构建流程对比总结

方法模型活动顺序是否固定是否强调建模特点说明
瀑布模型✅ 固定顺序✅ 严格建模适合需求稳定、流程清晰的项目
统一过程(RUP)✅ 分阶段进行✅ 全建模面向对象项目的标准流程,强调文档与模型
敏捷开发❌ 不固定,可回退⭕ 建模灵活强调快速交付,建模最小化
原型法❌ 反复迭代验证⭕ 部分建模快速做出初版原型,边试边改

先明确什么是分析建模(Analysis Modeling)?

分析建模是软件开发中需求分析阶段的重要组成部分,其核心目的是:

把模糊的用户需求,结构化、形式化地表达出来,为后续设计和实现做好准备。

标准分析建模的四个主要目的

  1. 定义可验证的软件需求(✅)
    → 让开发人员和客户都能理解并确认需求是否明确。

  2. 描述客户需求(✅)
    → 用结构化方式表达“系统应该做什么”,便于交流。

  3. 为设计建立逻辑基础(✅)
    → 分析建模输出的模型是设计阶段输入的依据

  4. 强调系统功能而非实现方式(✅)
    → 分析阶段不解决“怎么做”,而是“做什么”。

开发一个简单的问题解决方案

这是设计阶段或原型阶段的目标,而不是分析建模的目标。

  • 分析建模不提供“解决方案”,它提供“问题的结构化描述”。

  • 它不关心“简单”或“复杂”,也不会直接提出“怎么解决”。

DFD 中的“加工”(Process)是指对数据进行转换、处理的操作,图中用一个圆圈或椭圆表示。

按照数据流图的定义规范:

  • 每个加工必须有:

    • 至少一个输入数据流(即有“数据进来”)

    • 至少一个输出数据流(即有“数据出去”)

✅ 因为加工是对输入数据的处理 → 没有输入就无数据可处理;没有输出就无结果流出

“过程实体”= 软件中独立、可识别、可操作的逻辑过程或功能单元。

比如:

  • 登陆验证功能(一个过程)

  • 商品列表加载(一个过程)

  • 订单提交(另一个过程)

每个功能,都可以抽象为一个过程实体(Process Entity)。它不是“变量”“类”“对象”,而是某个清晰独立的过程动作/功能逻辑块

❓为什么叫“实体”?

是因为我们不止是说“功能”这个抽象概念,而是说“这个功能在系统中要成为一个明确的、单独的、可调度的存在”,就像对象、模块一样——所以叫实体。

抽象(Abstraction)是软件设计的第一步:

它的作用就是:从复杂的现实中,提炼出清晰可控的逻辑单位

比如:

现实中“用户下单”这个行为很复杂,要处理:

  • 用户身份

  • 商品库存

  • 支付接口

  • 收货地址

但我们可以通过抽象,把它整理成几个清晰的过程实体

  1. 检查库存

  2. 校验用户

  3. 创建订单

  4. 发起支付

这些就是“通过抽象得出的过程实体”。

信息隐藏(Information Hiding)就是:每个模块只暴露必要的接口,内部怎么做你别管。

比如:

  • 登录模块提供一个 verifyLogin() 接口

  • 你传入用户名和密码,它返回结果

  • 但你不知道它内部是数据库查?Redis查?有没有日志记录?你都不知道

这就叫信息隐藏。

🔁 好处:

  • 减少模块间耦合

  • 方便后期维护、替换、优化

模块内部有好几个小功能(步骤),它们按顺序执行,而且后面的功能直接吃前面的输出结果当“输入”用

就像接力赛跑,第一棒跑完把接力棒交给第二棒,第二棒才能跑。

内聚类型中文含义是否强内聚举个例子
顺序内聚输出传给下一个输入✅ 中等偏强表单处理、流水线式数据加工
过程内聚按顺序执行,但数据无依赖⚠ 偏弱打印、保存、退出一起做,但互不相关
功能内聚所有操作围绕一个明确目标✅ 最强登录模块、支付模块
偶然内聚(最差)几个功能硬塞一起,没啥关系❌ 最弱临时写了好几个功能堆一个函数里

通信内聚指:一个模块中各个处理步骤虽然功能不同,但它们都围绕“相同的数据”在操作。

比如:

  • 一个模块负责处理学生成绩,它里面有:

    • 统计总分

    • 统计平均分

    • 找出最高分

虽然是三个不同的小功能,但它们都在处理同一个数据结构(如成绩数组),这就叫通信内聚。

因为这些功能之间的共同点不是任务顺序,也不是功能目标,而是它们都依赖于“同一份信息”,所以也叫信息内聚(Informational Cohesion)。

什么是“功能内聚(Functional Cohesion)”?

是指一个模块里的所有操作、数据、流程,都只为完成一项明确的功能目标而存在,且每一步都是不可或缺的。

举个例子:

  • 登录模块:校验用户名 → 校验密码 → 返回结果
    每一部分都是为了“完成登录”这个目标,且缺一不可。

内聚等级(由弱到强)特征
偶然 → 逻辑 → 时间 → 顺序 → 通信 → 功能
功能内聚 ✅最纯粹、最整洁的单一目标模块

因为:

  • 模块结构清晰

  • 只处理一件事

  • 可测试性、可维护性最好

为什么它“耦合最弱”?

因为它自己就能独立完成一项功能,不依赖其他模块太多内部信息或控制信号,所以与其他模块的连接是最少的、最松的。

耦合越弱,模块之间越独立,改一个不影响另一个,系统更稳定。

在模块内聚(Cohesion)的标准分级中,顺序内聚确实比通信内聚要弱。这不是拍脑袋定的,而是从模块的独立性与关注焦点的集中程度来判断的。

类型定义说明内聚强度为什么强或弱(关键点)
顺序内聚一个模块中多个功能前后相连,后一步依赖前一步的输出✅ 中等有数据依赖,但每一步的目标不同,仍然偏“串联”
通信内聚模块内所有功能围绕同一个数据结构进行输入或输出操作,功能彼此平行但相关✅ 稍强虽然功能不同,但关注点统一、数据一致性强

数据库的设计指数据存储文件的设计,主要进行的设计方面有:
概念设计 )、( 逻辑设计 )、( 存储设计

阶段英文名称关注点主要产出举例
概念设计Conceptual Design现实世界中有哪些实体、属性、关系概念模型(如ER图)学生、课程、选课三者的联系
逻辑设计Logical Design数据库逻辑结构,如何转化为表结构逻辑模式(如关系模型)学生表、课程表、选课表,以及字段设计
存储设计Physical Design如何在磁盘上高效存储和访问数据索引、分区、文件结构给“学生ID”加索引,选择聚簇还是非聚簇

变换型:
输入 → 处理A → 处理B → 处理C → 输出  
(线性)

事务型:
         → 子流程A →  
输入 → 判断 → 子流程B → 输出  
         → 子流程C →
(分支)
 

变换型:一条线;事务型:分支选。
一个是顺序变形流程,一个是按条件选路线

什么是“扇出”和“扇入”?(核心术语)

概念英文含义
扇出Fan-out一个模块调用的下级模块个数(你派出多少个子任务)
扇入Fan-in一个模块被上级模块调用的次数/个数(你被多少人当作工具调用)

📌 它们都是衡量模块结构关系的指标,越合理,结构越清晰、系统越好维护。

  • 顶层模块(像总指挥)负责组织调度,所以扇出高:它要调用很多子模块

  • 中间层模块起到桥梁作用,不要太复杂,所以扇出较低:尽量不要它再派任务

  • 底层模块是“工具模块”,比如“计算平均数”“输出到文件”等,所以扇入高:大家都来用它,它自己不再调别人

         A(顶层,扇出=3)
        / | \
       B  C  D(中层,扇出=1)
       |     |
       E     E(底层,扇入=2)
 

  • 顶层高扇出:利于集中控制、统一分派任务

  • 中层低扇出:避免中间模块过于复杂,降低耦合

  • 底层高扇入:让底层模块复用率高、功能稳定

偶然内聚(Coincidental Cohesion)——最差的一种

  • 定义:模块中各功能毫无关系,只是“碰巧”被放在一起。

  • 特征

    • 功能不相关

    • 可能是写代码时随手加进来的

  • 例子

    一个模块里:
    - 显示欢迎界面
    - 打印用户日志
    - 初始化一个数组
    

    👉 看起来完全是乱搭在一起,根本没有逻辑关系。

  • ❌ 缺点:

    • 难以维护,改一个容易影响无关的地方

    • 不能被复用

逻辑内聚(Logical Cohesion)

  • 定义:模块中有多个功能,它们属于同一类逻辑动作,但具体做哪一个要靠传入的参数来决定

  • 特征

    • 属于“同类任务”,如:输入处理、输出处理、错误处理

    • 通过参数控制执行逻辑

  • 例子

    void handleIO(int mode) {if (mode == 0) readFile();else if (mode == 1) writeFile();else if (mode == 2) deleteFile();
    }
    

    👉 虽然都跟“文件操作”相关,但通过 mode 控制行为。

  • ⚠️ 问题:

    • 参数驱动逻辑,结构不清晰

    • 日后新增功能要频繁改条件判断

时间内聚(Temporal Cohesion)

  • 定义:模块中所有操作必须在相同时间点执行,例如程序启动时或关闭时。

  • 特征

    • 功能有一定时间相关性

    • 通常见于“初始化模块”“退出清理模块”

  • 例子

    系统启动模块:
    - 初始化数据库连接
    - 加载配置文件
    - 清屏

    👉 它们虽然做的事情不同,但都必须在“启动时”发生。

  • ✅ 比前两个好一点,但仍然功能不集中

偶然最差纯拼凑,逻辑靠参选操作,时间同时起步走。

项目软件结构图(Software Structure Chart, SC 图)数据图(Data Flow Diagram, DFD)
中文叫法软件结构图 / 程序结构图数据流图
核心关注点模块层级结构调用关系(“怎么做”)数据处理流程逻辑功能(“做什么”)
表达的是模块的控制层次、调用顺序、扇入扇出输入/输出数据流、加工过程、外部实体、存储
使用阶段结构设计阶段(软件设计中期)需求分析阶段(软件设计前期)
是否体现数据流动❌ 不强调(偏控制流)✅ 强调数据流转与变换
主要用途为程序模块划分和代码结构做准备理解业务流程,定义功能范围

需求分析 → 数据流图(DFD) → 功能模块识别 → 软件结构图(SC图) → 详细设计 → 编码
DFD 是“需求建模工具”,分析业务流程和数据流动

SC 图是“结构设计工具”,组织模块结构和调用层次

👉 数据图帮助我们确定有哪些功能,
👉 结构图帮助我们安排这些功能如何被实现、由谁来做

→ 需求分析(确定“做什么”)
  ↓
→ 概要设计 / 高层设计(模块划分 + 架构图)
  ↓
→ 详细设计(写模块的“内部结构”)
  ↓
→ 编码实现(根据详细设计写代码)
  ↓
→ 测试、部署、维护

✅ 说明:

  • 概要设计/高层设计:重“结构关系”

  • 详细设计/低层设计:重“逻辑实现”

什么是结构图(Structure Chart,SC 图)?

结构图软件结构设计阶段最常用的一种图形工具,用于表示:

模块之间的控制关系与数据传递关系

它是从数据流图(DFD)演化而来,是在“概要设计”中用于指导模块实现的图示。

它重点描述:

  • 系统是由哪些模块构成的(模块划分)

  • 各模块之间是如何调用/控制的(控制关系)

  • 调用时是否有参数/数据传递(数据传递)

题目:结构图中,不是其主要成分的是( C )。

选项是否主要组成解释
A. 模块✅ 是每个框框都是一个模块,基本单元
B. 模块间传递的数据✅ 是通常用带箭头的线标注参数传递
C. 模块内部数据❌ 否结构图不画模块内部细节,只画模块之间的关系
D. 模块的控制关系✅ 是用线连接上层模块与下层被调用模块,表示控制关系

结构图中的常见符号

  • 矩形框:表示一个模块

  • 箭头线:表示控制流(调用关系)

  • 空心/实心圆圈、线段注释:表示传递数据、判断点(有时)

结构化设计是一种从数据流图出发,把逻辑功能模块化、层次化的方法。它的核心工具是:

  • 结构图(Structure Chart)

  • 搭配内聚、耦合分析

  • 强调模块化、层次化、信息隐藏

❌ 对比其他选项为何错误:

选项原因
A. 测试用例设计属于软件测试阶段,与结构化设计无关
B. 软件概要设计使用的是结构化分析方法(如 DFD),不是结构化“设计”
C. 程序设计太宽泛,可能包括编码,不是结构化设计特指的阶段
✅ D. 软件详细设计✔ 正确,结构化设计就是这个阶段用的核心方法

特征顺序内聚(Sequential Cohesion)过程内聚(Procedural Cohesion)
是否有数据依赖(输入/输出)✅ 有:一个功能的输出是下一个的输入❌ 无:各功能顺序执行但不共享数据
功能之间的逻辑关系线性传递,像流水线顺序存在,但无数据耦合,像脚本任务清单
举例从输入读文件 → 处理数据 → 输出结果打开文件 → 打印标题 → 关闭文件
内聚强度(相对)✅ 更强较弱
图示A ➝ B ➝ C(A输出→B输入)A; B; C(只是顺序执行)

偶然 < 逻辑 < 时间 < 过程 < 顺序 < 通信 < 功能

结构化设计方法主要用于:
👉 详细设计阶段Low-Level Design

为什么不是“概要设计”阶段?

维度概要设计(High-Level Design)详细设计(Low-Level Design)
方法常用结构化分析方法(Structured Analysis)使用结构化设计方法(Structured Design)
工具DFD(数据流图)、数据字典、实体关系图Structure Chart(结构图)、模块接口表、伪代码
关注点系统分为哪些大模块、数据如何在模块之间流动每个模块内部怎么写、控制流程如何安排、数据如何传入传出
抽象程度比较“粗”,确定功能块和大体结构更“细”,接近代码实现
输出物模块划分文档、系统流程图模块接口文档、结构图、控制流程说明
  • 结构化分析 → 用在概要设计 → 画 DFD

  • 结构化设计 → 用在详细设计 → 画 Structure Chart(结构图)

SP(Structured Programming)结构化程序设计方法,是一种编写清晰、易读、易维护程序的编程规范与思想。它强调:

  • 只使用顺序、选择、循环三种基本控制结构(避免 goto)

  • 程序可以像搭积木一样由这些结构组合构建

  • 每个模块只完成一个功能,并严格限制内部结构

✅ 举个简单例子说明 SP 风格:

void printPositive(int n) {
    if (n > 0) {
        printf("Positive number");
    } else {
        printf("Non-positive number");
    }
}
这个函数没有用到 goto,而是使用选择结构(if-else),就是结构化程序设计的一种体现。

PDL 是用于在详细设计阶段描述模块内部逻辑的“伪代码形式”的结构化语言,帮助程序员将自然语言思路过渡到真正的代码实现。

PDL 的主要用途:

  • 描述一个模块的算法流程

  • 明确模块的输入、输出、控制结构

  • 是从结构化设计过渡到编码的中间过渡文本

  • 人看得懂,但机器不能直接执行

MODULE isPrime
INPUT: integer n
OUTPUT: booleanBEGINIF n <= 1 THENRETURN falseFOR i FROM 2 TO sqrt(n) DOIF n MOD i = 0 THENRETURN falseRETURN true
END

你可以看到,它:

  • 用的是伪英语风格的关键字(IF, RETURN, FOR)

  • 不涉及任何具体语言语法(比如没有 C 的 {},也没有 Python 的缩进规则)

  • 逻辑清晰、便于沟通

  • HIPO(Hierarchy plus Input-Process-Output) 是一种结构化文档工具,用于表示模块之间的层次关系与输入输出。

  • PDL(Program Design Language) 是结构化伪码,用于说明模块内部处理逻辑。

这两个都是详细设计阶段常用的规格说明手段

  • 结构化设计(Structured Design) 是详细设计阶段的核心方法,强调模块化、层次化、信息隐藏、内聚与耦合控制。

  • 它配合结构图、PDL、模块说明等工具,详细描述每个模块的功能与接口。

PDL 并不是代码注释,而是设计阶段使用的伪代码说明语言,它通常作为设计文档的一部分存在,而不是直接嵌入代码中当注释使用
而且,即便某些公司允许在注释中嵌入 PDL 描述,也不是 PDL 的标准定义内容,因此这个说法不准确。

流程图并不强调“从抽象到具体”的逐步求精过程,反而常常直接给出完整实现逻辑,不具备分层递进的表达能力。这正是 PAD 图胜过流程图的地方。

需求分析 → 概要设计 → ✅ 详细设计 → 编码 → 测试 → 运维
                         ↑
              这一步中使用详细设计工具

工具名称作用是否图形化
PDL(程序设计语言)用“伪代码”描述模块内部逻辑,接近真实程序结构否(文字描述)
PAD 图(Problem Analysis Diagram)顺序/选择/循环块表示流程,强调结构清晰✅ 是
流程图(Flowchart)展示操作的顺序、分支与循环,容易直观表现控制逻辑✅ 是
Nassi-Shneiderman 图结构化流程图,每个控制结构一个矩形块,强制结构化✅ 是
IPO 图(输入-处理-输出)描述模块的数据输入、处理过程和输出结果✅ 是
模块接口说明表列清楚每个模块的参数、输入输出、调用方式否(表格描述)
设计问题详细设计工具如何帮助解决
模块怎么实现?用 PDL 或 PAD 图明确每一步的处理逻辑
数据从哪里来,怎么处理?用 IPO 图来分析输入 → 处理 → 输出关系
模块内部的控制逻辑是否清晰?用 PAD、流程图或 Nassi 图结构化呈现
是否容易转化为代码?PDL 是写代码前的“半成品”逻辑框架
对比维度Jackson 方法(JSP)PAD 图(结构化图)
所属阶段软件详细设计(过程设计)软件详细设计(过程设计)
表达方式以“输入数据结构”为出发点,展开控制结构以“控制结构三要素”为核心(顺序/选择/循环)
核心思想程序结构应映射输入数据结构控制逻辑结构化(结构程序设计三结构)
应用场景文件处理、数据顺序结构强的问题任何通用的程序模块逻辑设计
是否图形化是,有自己的“Jackson 图”是,使用专门的 PAD 图格式
是否强调结构化✅ 强调结构化程序控制流程✅ 强调结构化三结构原则


✅ 结论:

  • 你可以理解为:Jackson 方法和 PAD 是“达到模块内部结构清晰”的两种不同技术路线。

  • 就像画图时有铅笔素描法和水彩法,目的都是“表现结构”,但用法和偏好不同。

  • 在实际使用中,不同开发组织可能选用其中之一或混合使用。

An excellent course, yet regrettably one that rarely finds its place beyond academia.

http://www.lryc.cn/news/575305.html

相关文章:

  • Linux 怎么恢复sshd.service
  • 【C++】std::function是什么
  • 【网络实验】-配置用户登录
  • 《高等数学》(同济大学·第7版)第九章 多元函数微分法及其应用第一节多元函数的基本概念
  • ARM内核之CMSIS
  • 《从0到1:C/C++音视频开发自学完全指南》
  • 超级好用的小软件:geek,卸载软件,2m大小
  • HarmonyOS 5分布式数据库有哪些性能指标?
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | BackgroundSlider(背景滑块)
  • 【Docker基础】Docker容器管理:docker pause、stop、kill区别
  • Windows下安装zookeeper
  • 【nRF52832】【环境搭建 1】【ubuntu下搭建nRF52832开发环境】
  • 一篇文章了解XML
  • 20250625解决在Ubuntu20.04.6LTS下编译RK3588的Android14出现cfg80211.ko的overriding问题
  • 【DataWhale组队学习】AI办公实践与应用-数据分析
  • 《仿盒马》app开发技术分享-- 待发货兑换订单列表(76)
  • 使用EasyExcel处理动态表头数据导入
  • Aurora MySQL 3.05/3.06/3.07版本即将停用,全局数据库升级实战指南
  • 鸿蒙ArkUI---基础组件Tabs(Tabbar)
  • 日本生活:日语语言学校-日语作文-沟通无国界(5)-题目:我的一天
  • Boss:攻击
  • ChaCha20加密解密技术
  • 使用 Netty 实现 TCP 私有协议(解决粘包/拆包)
  • 三步实现B站缓存视频转MP4格式
  • WeakAuras Lua Script [ICC BOSS 12 - The Lich King]
  • 【笔记——李沐动手学深度学习】2.3 线性代数
  • PyTorch RNN实战:快速上手教程
  • MySQL之存储过程详解
  • IoT/HCIP实验-5/基于NB-IoT的智慧农业实验(平台侧开发+端侧编码+基础调试分析)
  • 重置 MySQL root 密码