第5章 软件工程(二)

5.3 软件设计

需求阶段解决"做什么"的问题,而软件设计阶段解决"怎么做"的问题。软件设计分为结构化设计与面向对象设计。

5.3.1 结构化设计

结构化设计 (SD)是一种面向数据流的方法,其目的在于确定软件结构。它以SRS和SA阶段所产生的DFD和数据字典等文档为基础,是一个自顶向下、逐层分解、逐步求精和模块化的过程。

从管理角度讲,其分为概要设计和详细设计两个阶段。

·概要设计又称为总体结构设计 ,它是开发过程中很关键的一步,其主要任务是确定软件系统的结构,将系统的功能需求进行模块划分,确定每个模块的功能、接口和模块之间的调用关系,形成软件的模块结构图,即系统结构图。

·详细设计 的主要任务是为每个模块设计实现的细节,根据任务的不同,详细设计又可分为多种,例如,输入/输出 设计、处理流程设计、数据存储设计、用户界面设计、安全性和可靠性设计等。

1.模块结构

在SD中,这种功能分解就是将系统划分为模块,模块是组成系统的基本单位,它的特点是可以自由组合、分解和变换,系统中任何一个处理功能都可以看成一个模块。

(1)信息隐藏与抽象

信息隐藏原则 要求采用封装技术,将程序模块的实现细节(过程或数据等)

隐藏起来,对于不需要这些信息的其他模块来说是不能访问的,使模块接口尽量简单。按照信息隐藏的原则,系统中的模块应设计成"黑盒",模块外部只能使用模块接口说明中给出的信息,如操作和数据类型等。

(2)模块化。

在SD方法中,模块是实现功能的基本单位,它一般具有功能、逻辑和状态3个基本属性。其中,功能 是指该模块"做什么",逻辑 是描述模块内部"怎么做",状态 是该模块使用时的环境和条件。在描述一个模块时,必须按模块的外部特性与内部特性分别描述。软件设计阶段 ,通常是先确定模块的外部特性,然后再确定它的内部特性。

(3)耦合。耦合表示模块之间联系的程度。紧密耦合表示模块之间联系非常强,松散耦合表示模块之间联系比较弱,非直接耦合则表示模块之间无任何直接联系。模块的耦合类型通常分为7种,根据耦合度从低到高排序如表所示:

(4)内聚。内聚表示模块内部各代码成分之联系的紧密程度,是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做目标单一的一件事情。模块的内聚类型通常也可以分为7种,根据内聚度从高到低排序如表5.2所示。在模块的分解中应尽量减少模块的耦合,力求增加模块的内聚,遵循"低耦合、高内聚"的设计原则。

2.系统结构图

系统结构图 (S C ) ,又称为模块结构图,它是软件概要设计阶段的工具,反映系统的功能实现和模块之间的联系与通信,包括各模块之间的层次结构,即反映了系统的总体结构。

详细设计的主要任务 是设计每个模块的实现算法、所需的局部数据结构。

详细设计的目标有两个:实现模块功能的算法要逻辑上正确,算法描述要简明易懂。

详细设计必须遵循概要设计来进行。详细设计方案的更改,不得影响到概要设计方案;如果需要更改概要设计,必须经过项目经理的同意。详细设计应该完成详细设计文档,主要是模块的详细设计方案说明。

详细设计的表示工具 有图形工具、表格工具和语言工具。

(1)图形工具。利用图形工具可以把过程的细节用图形描述出来。具体的图形有业务流程图、程序流程图、问题分析图 (PAD)、NS流程图等。

(2)表格工具。可以用一张表来描述过程的细节,在这张表中列出了各种可能的操作和相应的条件。

(3)语言工具。用某种高级语言来描述过程的细节,例如伪码或PDL (程设计语言)等。

·PDL的优点:可以作为注释直接插在源程序中;可以使用普通的文本编辑工具或文字处理工具产生和管理,已经有自动处理程序存在,而且可以自动由PDL生成程序代码。

·PDL的不足:不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时不如判定树清晰简单。

5.3.2 面向对象设计

面向对象设计OOD 其基本思想包括抽象、封装、可扩展性,其中可扩展性主要是通过继承和多态来实现。

OOD的主要任务 是对类和对象进行设计,这是OOD中最重要的组成部分也是最复杂和最耗时的部分。其主要包括类的属性、方法,以及类与类之间的关系。

常用的面向对象设计原则包括:

在OOD中,类可以分为3种类型 :实体类、控制类和边界类。

5.3.3 统一建模语言

统一建模语言(UML) 是一种定义良好,易于表达、功能强大且普遍适用的建模语言。(不是编程语言)

UML的结构包括构造块、规则和公共机制3个部分。

1.UML中的事物

UML中的事物也称为建模元素,包括结构事物、行为事物、分组事物和注释事物。

2.UML中的关系

UML用关系把事物结合在一起,主要有4种关系:依赖、关联、泛化和实现。

3.UML2.0-14种图

4.UML视图

5.3.4 设计模式

设计模式是前人经验的总结,它使人们可以方便地复用成功的软件设计。

根据处理范围不同,设计模式 可分为类模式和对象模式。

根据目的和用途不同,设计模式可分为创建型模式、结构型模式和行为型模式三种。

创建型模式 主要用于创建对象。

结构型模式 主要用于处理类或对象的组合。

行为型模式 主要用于描述类或对象的交互以及职责的分配。

相关推荐
努力的小雨1 天前
我用 QClaw 做了个 Web3 陪学助手,专治 Java 程序员的“概念劝退”
经验分享·ai智能
RainCity2 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
LinXunFeng9 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
通信小呆呆13 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick13 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee13 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
SM1771521183814 天前
NSK紧凑型FA系列丝杠技术详解
经验分享·规格说明书
Alsn8614 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e14 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨14 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙