系统集成项目管理工程师-结构化设计面向对象设计UML与设计模式
一、软件设计概述(掌握)
需求阶段解决“做什么”,软件设计阶段解决“怎么做”。软件设计分为结构化设计与面向对象设计。
二、结构化设计(SD)(掌握)
结构化设计是一种面向数据流的方法,以SRS和SA阶段的DFD、数据字典为基础,自顶向下、逐层分解、逐步求精和模块化。
从管理角度分为概要设计和详细设计两个阶段。
阶段 | 主要任务 |
|---|---|
概要设计(总体结构设计) | 确定软件系统结构,将功能需求进行模块划分,确定每个模块的功能、接口和调用关系,形成模块结构图(系统结构图) |
详细设计 | 为每个模块设计实现细节,包括输入/输出设计、处理流程设计、数据存储设计、用户界面设计、安全性和可靠性设计等 |
1. 模块结构
信息隐藏与抽象:采用封装技术,将模块实现细节隐藏,模块设计成“黑盒”,外部只能使用接口说明中的信息。
模块化:模块具有功能、逻辑和状态3个基本属性。先确定外部特性,再确定内部特性。
耦合(模块间联系程度,越低越好):
耦合类型(从低到高) | 描述 |
|---|---|
非直接耦合 | 两个模块无直接关系,完全通过上级模块控制调用 |
数据耦合 | 借助参数表传递简单数据 |
标记耦合 | 通过参数表传递记录等复杂信息(数据结构) |
控制耦合 | 传递的信息中包含控制模块内部逻辑的信息 |
通信耦合 | 一组模块共用一组输入信息,或输出需整合 |
公共耦合 | 多个模块访问同一个公共数据环境 |
内容耦合 | 一个模块直接访问另一个模块的内部数据,或有多个入口等 |
内聚(模块内部各成分联系紧密程度,越高越好):
内聚类型(从高到低) | 描述 |
|---|---|
功能内聚 | 完成一个单一功能,各部分协同工作 |
顺序内聚 | 处理元素相关且必须顺序执行 |
通信内聚 | 所有处理元素集中在一个数据结构的区域上 |
过程内聚 | 处理元素相关且必须按特定次序执行 |
时间内聚 | 所包含的任务必须在同一时间间隔内执行 |
逻辑内聚 | 完成逻辑上相关的一组任务 |
偶然内聚 | 完成一组没有关系或松散关系的任务 |
📌 设计原则:高内聚、低耦合
2. 系统结构图
系统结构图(SC)是软件概要设计阶段的工具,反映系统功能实现和模块之间的联系与通信。
3. 详细设计工具
工具类别 | 具体工具 | 描述 |
|---|---|---|
图形工具 | 业务流程图 | 描述管理系统内各单位、人员之间的业务关系和作业顺序 |
程序流程图 | 用方框、菱形、箭头描述程序逻辑,最广泛使用 | |
NS流程图(盒图) | 强制使用结构化构造,功能域明确,不能任意转移控制 | |
PAD图 | 改进的图形描述,反映自顶向下的历史过程,提供5种基本控制结构 | |
表格工具 | 判定表等 | 列出各种可能的操作和相应条件 |
语言工具 | 伪码/PDL | 用高级语言描述过程细节,可作为注释直接插在源程序中 |
三、面向对象设计(OOD)(掌握)
OOD基本思想包括抽象、封装、可扩展性(通过继承和多态实现)。主要任务是对类和对象进行设计。
1. 常用面向对象设计原则(7个)
原则 | 说明 |
|---|---|
单职原则 | 一个类应有且仅有一个引起它变化的原因 |
开闭原则 | 对扩展开放,对修改封闭 |
李氏替换原则 | 子类可以替换父类,不能改变父类原有功能 |
依赖倒置原则 | 依赖于抽象,不依赖于具体实现;针对接口编程 |
接口隔离原则 | 使用多个专门接口比使用单一总接口好 |
组合重用原则 | 尽量使用组合而不是继承达到重用 |
迪米特原则(最少知识法则) | 一个对象应尽可能少了解其他对象,降低耦合 |
📌 记忆口诀:单开李依接组迪(单职、开闭、李氏替换、依赖倒置、接口隔离、组合重用、迪米特)
2. 类的三种类型
类型 | 描述 |
|---|---|
实体类 | 映射需求中的每个实体,保存需要存储在永久存储体中的信息(如学员类、课程类) |
控制类 | 用于控制用例工作的类,由动宾结构短语转化而来(如身份验证器) |
边界类 | 封装在用例内、外流动的信息或数据流,位于系统与外界的交接处(如窗体、报表、打印机接口) |
四、统一建模语言UML(掌握)
UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言(不是编程语言)。结构包括构造块、规则和公共机制。
1. UML中的事物(建模元素)
事物类型 | 说明 |
|---|---|
结构事物 | 最静态的部分,有7种:类、接口、协作、用例、活动类、构件、节点 |
行为事物 | 动态部分,包括交互(内部活动)和状态机 |
分组事物 | 唯一的包,是一种将有组织的元素分组的机制,只存在于开发阶段 |
注释事物 | UML模型的解释部分 |
2. UML中的关系(4种)
关系 | 说明 |
|---|---|
依赖 | 一个事物变化影响另一个事物 |
关联 | 一种对象和另一种对象有联系 |
泛化 | 一般元素和特殊元素之间的分类关系 |
实现 | 一个类指定了由另一个类保证执行的契约 |
3. UML 2.0 的14种图
UML 14种图分类图
序号 | 图 | 说明 |
|---|---|---|
1 | 类图 | 描述一组类、接口、协作及它们之间的关系,给出系统静态设计视图 |
2 | 对象图 | 描述一组对象及它们之间的关系 |
3 | 构件图 | 描述一个封装的类和它的接口、端口及内部结构 |
4 | 组合结构图 | 描述结构化类的内部结构及交互点 |
5 | 用例图 | 描述一组用例、参与者及它们之间的关系 |
6 | 顺序图(序列图) | 强调消息的时间次序的交互图 |
7 | 通信图 | 强调收发消息的对象或参与者的结构组织 |
8 | 定时图(计时图) | 强调消息跨越不同对象或参与者的实际时间 |
9 | 状态图 | 描述状态机,由状态、转移、事件和活动组成 |
10 | 活动图 | 展示计算内部一步步的控制流和数据流 |
11 | 部署图 | 描述运行时处理节点及构件配置 |
12 | 制品图 | 描述计算机中一个系统的物理结构 |
13 | 包图 | 描述模型本身分解而成的组织单元及依赖关系 |
14 | 交互概览图 | 活动图和顺序图的混合物 |
4. UML视图
视图 | 说明 |
|---|---|
逻辑视图(设计视图) | 表示设计模型中架构方面重要的部分 |
进程视图 | 可执行线程与进程作为活动类的建模,描述并发与同步结构 |
实现视图 | 对组成系统的物理代码的文件和构件进行建模 |
部署视图 | 把构件部署到物理节点上,表示软件到硬件的映射 |
用例视图 | 最基本的需求分析模型 |
五、设计模式(掌握)
设计模式是前人经验的总结,使人们可以方便地复用成功的软件设计。
根据处理范围:类模式和对象模式。
根据目的和用途(3种):
类型 | 描述 |
|---|---|
创建型模式 | 主要用于创建对象 |
结构型模式 | 主要用于处理类或对象的组合 |
行为型模式 | 主要用于描述类或对象的交互以及职责的分配 |
六、本章真题小测
Q1:模块的耦合类型中,耦合度最低的是()。
A. 数据耦合 B. 非直接耦合 C. 标记耦合 D. 控制耦合
Q2:UML中,强调消息的时间次序的交互图是()。
A. 通信图 B. 顺序图 C. 定时图 D. 活动图
Q3:面向对象设计原则中,“一个类应该有且仅有一个引起它变化的原因”指的是()。
A. 开闭原则 B. 单职原则 C. 李氏替换原则 D. 迪米特原则
📩 答案:
Q1答案:B解析:
耦合度从低到高:非直接耦合 <数据耦合<标记耦合<控制耦合。非直接耦合:模块之间没有直接联系,完全通过主程序调度,耦合度最低。
Q2答案:B解析:
顺序图:重点强调消息发送的时间次序、先后顺序;
通信图:侧重对象之间连接关系,不突出时间顺序;
定时图:侧重时间约束、时间间隔;
活动图:侧重流程、活动流转。
Q3答案:B解析:
单一职责原则(单职原则):一个类应该有且仅有一个引起它变化的原因。
开闭原则:对扩展开放,对修改关闭
李氏替换原则:子类可以替换父类
迪米特原则:最少知道原则,尽量减少对象之间交互
✅汇总答案
Q1:B;Q2:B;Q3:B
