第6章:结构化开发方法

news2024/11/19 15:39:30

第6章:结构化开发方法

系统设计基本原理

1、抽象 抽象是一种设计技术,重点说明一个实体的本质方面,而忽略或者掩盖不是很重要或非本质的方面。

模块化

模块化是指将一个待开发的软件分解成若干个小的、简单的部分一模块,每个模块可独立地开发、测试,最后组装成完整的程序。模块化的目的是使程序的结构清晰,容易阅读、理解、测试和修改。

模块设计的原则是对修改封闭,对扩展开放。如果一个模块可以作为一个独立体被其它程序调用,则称模块具有封闭性。如果一个模块可以被扩充,则称模块具有开放性。一个模块直接调用其它模块的个数称为模块的扇出系数;反之,一个模块被其它模块调用时,直接调用它的模块个数称为模块的扇入系数。经验表明,一个设计成功的系统的平均扇入、扇出系数通常是3或4,一般不应超过7,否则出错的概率增大。

软件设计的主要任务是设计软件的结构、过程和模块,其中软件结构设计的主要任务是确定模块间的组成关系。

1、模块化设计要求高内聚、低耦合,模块独立体现的就是高内聚低耦合。 2、在结构化设计中,系统由多个逻辑上相对独立的模块组成,在模块划分时需要遵循如下原则: (1)模块的大小要适中。系统分解时需要考虑模块的规模,过大的模块可能导致系统分解不充分,其内部可能包括不同类型的功能,需要进一步划分,尽量使得各个模块的功能单一;过小的模块将导致系统的复杂度增加,模块之间的调用过于频繁,反而降低了模块的独立性。不是越小越好。 (2)模块的扇入和扇出要合理。模块的扇入指模块直接上级模块的个数。模块的直属下级模块个数即为模块的扇出。 (3) 深度和宽度适当。深度表示软件结构中模块的层数,如果层数过多,则应考虑是否有些模块设计过于简单,看能否适当合并。宽度是软件结构中同一个层次上的模块总数的最大值,一般说来,宽度越大系统越复杂,对宽度影响最大的因素是模块的扇出。在系统设计时,需要权衡系统的深度和宽度,尽量降低系统的复杂性,减少实施过程的难度,提高开发和维护的效率。需要控制模块接口的复杂性。3、尽力使模块的作用域在其控制域之内。模块控制域:这个模块本身以及所有直接或间接从属于它的模块的集合。模块作用域:指受该模块内一个判定所影响的所有模块的集合。

信息隐蔽

信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少地显露其内部的处理。信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。

模块独立

模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系简单 衡量模块独立程度的标准有两个:耦合和内聚。

耦合是指模块之间联系的紧密程度。耦合度越高,则模块的独立性越差。

内聚是指模块内部各元素之间联系的紧密程度。内聚度越低,则模块的独立 性越差。因此,模块独立就是希望每个模块都是高内聚、低耦合的。

模块化的目的是使程序的结构清晰,容易阅读、理解、测试、修改。 模块的独立程序由两个定性标准度量:内聚和耦合。耦合衡量不同模块彼此 间相互依赖的紧密程度。内聚衡量一个模块内部各个元素彼此结合的紧密程度。 高内聚,低耦合是一个好的模块的标准,是模块设计的追求。

耦合

耦合按从强到弱的顺序分为以下几种: 1、内容耦合,一个模块直接修改或作为另一个模块的数据,或者直接转入 另一下模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模 块。 2、公共耦合,两个以上的模块共同引用一个全局数据项就称为公共耦合。 3、控制耦合,一个模块在界面上传递一个信号(如开关值、标志量等)控制 另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。 4、标记耦合,模块间通过参数传递复杂的内部数据结构,称为标记耦合。 此数据结构的变化将使相关的模块发生变化。 5、数据耦合,模块间通过参数传递基本类型的数据,称为数据耦合。 6、非直接耦合,模块间没有信息传递时,属于非直接耦合。 如果模块间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,坚决避免使用内容耦合。

内聚

内聚按强度由低到高有以下几种类型: 1、偶然内聚,如果一个模块的各成分之间毫无关系,则称为偶然内聚。 2、逻辑内聚,内个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。 3、时间内聚,如果一个模块完成的功能必须在同一时间内执行,但这些功 能只是因为时间因素关联在一直,则称为时间内聚。 4、过程内聚,如果一个模块内部的处理成分是相关的,而且这些处理必须 以待定的次序执行,则称为过程内聚。 5、通信内聚,如果一个模块的所有成分都作同一数据集或生成同一数据集, 则称为通信内聚。

6、顺序内聚,一个模块的各个成分和同一个功能密切相关,而且一个成分 的输出作为另一个成分的输入。 7、功能内聚,模块的所有成分对于完成单一的功能都是必须的,则称为功 能内聚。

模块内聚类型

模块间的耦合和模块的内聚是度量模块独立性的两个准则。内聚是模块功能强度的度量,即模块内部各个元素彼此结合的紧密程度。一个模块内部各个元素之间的紧密程度越高,则其内聚性越高,模块独立性越好。

模块内聚类型主要有以下几类: 偶然内聚/巧合内聚:指一个模块内的各处理元素之间没有任何联系。 逻辑内聚:指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。时间内聚:把需要同时执行的动作组合在一起形成的模块。 过程内聚:指一个模块完成多个任务,这些任务必须按指定的过程执行。 通信内聚:指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据。 顺序内聚:指一个模块中的各个处理元素都密切相关于同一个功能且必须顺序执行,前一个功能元素的输出就是下一功能元素的输入。 功能内聚:指模块内的所有元素共同作用完成一个功能,缺一不可。

结构化分析方法

结构化分析方法概述

数据流图

数据字典(DD)

结构化设计方法

结构化设计主要包括: ①体系结构设计:定义软件的主要结构元素及其关系。 ②数据设计:基于实体联系图确定软件涉及的文件系统的结构及数据库的表结构。 ③接口设计:描述用户界面,软件和其他硬件设备、其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口。 ④过程设计:确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法。

系统总体结构设计

系统结构设计应遵循以下原则: 分解一协调原则, 自顶向下原则。 信息隐蔽、抽象的原则 致性原则。 明确性原则。 模块之间的耦合度尽可能小,模块的内聚度尽可能高 模块的扇入系数和扇出系数要合理。 模块的规模适当

子系统划分要遵循以下原则 子系统要具有相对独立性。 子系统之间数据的依赖性尽量小。 子系统划分的结果应使数据冗余较小 子系统的设置应考虑今后管理发展的需要 子系统的划分应便于系统分阶段实现: 子系统的划分应考虑到各类资源的充分利用

模块是组成系统的基本单位,它的特点是可以组合、分解和更换。系统中任何个处理功能都可以看成是一个模块。根据模块功能具体化程度的不同,可以分为逻辑模块和物理模块。

一个模块要具备以下4个要素: 输入和输出:模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那里取得输入,进行加工后再把输出返回给调用者。 处理功能:指模块把输入转换成输出所做的工作 内部数据:指仅供该模块本身引用的数据。 程序代码:指用来实现模块功能的程序。

数据流图

数据流图一基本慨念

1)数据流图或称数据流程图,是一种便于用户理解、分析系统数据流程的图形工具。它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。

数据流图是一种图形化表示数据在系统内部或系统之间流动的图形工具。它展示了数据如何从一个地方流向另一个地方,在系统中传递、存储、处理和转换的过程。

数据流图通常包括以下几个主要元素:

  1. 实体(Entity):代表系统中存储或产生数据的源或目的地,如数据库、文件、传感器等。

  2. 过程(Process):代表对数据执行的操作或处理过程,如数据的转换、计算、过滤等。

  3. 数据流(Data Flow):代表数据在系统内部或系统之间流动的路径。

  4. 数据存储(Data Store):代表数据的持久化存储,通常用于存储和检索数据。

  5. 控制流(Control Flow):代表控制数据流的顺序和条件。

2)数据字典 数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典用于对数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。

数据字典有4类条目:数据流条目、数据存储条目、加工条目和数据项条目。数据字典管理主要是指把字典条目按照某种格式组织后存储在字典中并提供排序、查找、统计等功能。

数据字典(Data Dictionary)是一个结构化的文件或数据库,用于描述系统中使用到的数据项以及这些数据项之间的关系。数据字典通常包含了对数据项的定义、属性、数据类型、取值范围、关联关系等详细信息。

数据字典的作用包括但不限于以下几个方面:

  1. 数据定义和标准化:数据字典提供了对系统中各个数据项的准确定义,可以帮助确保数据的一致性和标准化。

  2. 数据管理和维护:数据字典记录了系统中所有使用到的数据项,以及它们的属性和关联关系,方便对数据进行管理和维护。

  3. 数据共享和交流:数据字典为不同团队或人员提供了一个统一的数据信息来源,促进数据的共享和交流。

  4. 数据分析和设计:数据字典可以作为系统分析和设计的基础,帮助分析人员理解系统中的数据结构和关系。

  5. 数据质量和准确性控制:数据字典可以帮助识别数据质量问题,提高数据的准确性和完整性。

在数据字典中,通常包含了以下信息:

  • 数据项的标识符和名称

  • 数据项的描述和定义

  • 数据项的数据类型和长度

  • 数据项的取值范围和约束条件

  • 数据项的关联关系和依赖关系

数据字典是系统分析和设计中重要的工具之一,它有助于帮助团队成员对系统中的数据有一个清晰的了解,促进项目的顺利进行和数据管理的规范化。

外部实体与系统的数据交互是不变。系统更加的细化。大的加工细分成小的加工

数据流图一应注意的问题

(1)适当地为数据流、加工、数据存储、外部实体命名,名字应反映该成分的实际含义,避免空洞的名字。 (2)画数据流而不要画控制流。 (3)每条数据流的输入或者输出都是加工 (4)一个加工的输出数据流不应与输入数据流同名,即使它们的组成成分相同。 (5)允许一个加工有多条数据流流向另一个加工,也允许一个加工有两个相同的输出数据流流向两个不同的加工

(6)保持父图与子图平衡。也就是说,父图中某加工的输入/输出数据流必须在它的子图的输入输出数据流在数量和名字上相同。值得注意的是,如果父图的一个输入(或输出)数据流对应子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是 平衡的。 (7)在自顶向下的分解过程中,若一个数据存储首次出现时只与一个加工有关,那么这个数据存储应作为这个加工的内部文件而不必画出。

(8)保持数据守恒。也就是说,一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工产生的数据中获得。

(9)每个加工必须既有输入数据流,又有输出数据流。

(10)在整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但在某一张子图中,可能是只有读没有写,或者是只有写没有读。

找缺失的数据流: 1、父图与子图之间的平衡 2、子图内平衡

特别注意加工要有输入输出

通过顶层图与0层图对比,在顶层图外部实体与系统的数据交互,有几个输入几个输出,在0层图中是对应的

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

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

相关文章

reggie外卖优化

文章目录 一、redis缓存1.1 缓存验证码1.2 缓存菜品数据 二、spring-cache 一、redis缓存 1.1 缓存验证码 不用sesiion,而使用redis来存放验证码。 首先在用户请求验证码,将验证码保存在sesion中,当登录成功之后,将redis中的验证…

人工智能概论 | 基于A*算法的8数码问题求解

大学四年的全部课程和考试都已经结束啦! 最近闲来无事,随便发发自己的实验报告,供后面的学弟学妹们参考~ 目录 实验1 基于A*算法的8数码问题求解 1.1 程序总体流程 1.2 关键代码展示 1.3 输出结果展示及分析 1.3.1 总步数展示 1.…

ENVI5.6使用笔记

目录 1. ENVI安装扩展2. ENVI绘制高光谱3D数据立体图3. 对本次工作存档,下次打开软件可直接续档4. 对图像进行分类 1. ENVI安装扩展 从ENVI App Store下载商店envi_app_store.zip,解压得到ENVI_App_Store.sav,将其复制到ENVI的扩展文件夹下&…

如何优化网站SEO排名?

选择那些容易排名的关键词。使用工具找到那些竞争少但有流量的词语。其次,内部链接非常重要。通过合理的内部链接,可以提升各个页面的权重。 增加FAQ部分能帮助你捕捉更多的长尾关键词流量。争取出现在精选摘要的位置,可以直接提升你的曝光率…

从全连接到卷积

一、全连接到卷积 1、卷积具有两个原则: 平移不变性:无论作用在哪个部分,它都要有相同的作用,而不会随着位置的改变而改变 局部性:卷积核作用处,作用域应该是核作用点的周围一小部分而不作用于更大的部分 …

仓库管理系统27--项目完结

原创不易,打字不易,截图不易,多多点赞,送人玫瑰,留有余香,财务自由明日实现 1、列表分页 这里我们以物资列表分页为例来讲讲如何实现分页,wpf中没有现成封装好的分页,需要自己封装…

提升Unity WebGL游戏启动速度

一、查看启动耗时 通过修改unity-namespace.js中hideTimeLogModal为false,显示timelog开发者可以看到小游戏目前的启动首屏时长: 将其设置为false后,启动小程序后就会显示启动耗时 要知道各个阶段的含义,我们必要理解启动流程。 …

CDC模型

引言 聚类是一种强大的机器学习方法,用于根据特征空间中元素的接近程度发现相似的模式。它广泛用于计算机科学、生物科学、地球科学和经济学。尽管已经开发了最先进的基于分区和基于连接的聚类方法,但数据中的弱连接性和异构密度阻碍了其有效性。在这项…

基于Java英语学习网站设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

玩玩快速冥(LeetCode50题与70题以及联系斐波那契)

一.算法快速幂 今天刷到两个题,比较有意思,还是记录一下. 先来讲讲50题. LeetCode50(Pow(x,n)) 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 这道题一看很平常啊,不就一直乘嘛,循环走一次就够了.但是很抱歉,单纯的想…

计算机网络知识普及之四元组

在涉及到TCP/UDP等IP类通信协议时,存在四元组概念 这里只是普及使用 先来一些前置知识,什么是IP协议? IP协议全称为互联网协议,处于网络层中,主要作用是标识网络中的设备,每个设备的IP地址是唯一的。 在网…

ASO优化:如何提高应用的可见性

在竞争激烈的应用市场中ASO优化成为了提高应用可见性的重要手段。以下是一些提高应用可见性的方法: 1. 选择合适的关键词 找出和您应用高度相关并且具有一定搜索量的关键词,确保关键词与应用的核心功能和用户搜索意图匹配。比如:当您的应用是…

【Rust入门】生成随机数

文章目录 前言随机数库rand添加rand库到我们的工程生成一个随机数示例代码 总结 前言 在编程中,生成随机数是一种常见的需求,无论是用于数据分析、游戏开发还是模拟实验。Rust提供了强大的库来帮助我们生成随机数。在这篇文章中,我们将通过一…

1.4 ROS2集成开发环境搭建

1.4.1 安装VSCode VSCode全称Visual Studio Code,是微软推出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、GIT 等特性,支持插件…

谈谈浏览器的事件机制:捕获、冒泡

浏览器事件的传播有三个阶段:捕获阶段,目标阶段,冒泡阶段 第一部分称为捕获阶段,该阶段包括从舞台到目标节点的父节点范围内的所有节点。第二部分称为目标阶段,该阶段仅包括目标节点。第三部分称为冒泡阶段。冒泡阶段包…

安装Gitlab+Jenkins

GItlab概述 GitLab概述: 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。 GitLab拥有与…

工业一体机根据软件应用需求灵活选配

在当今工业领域,数字化、智能化的发展趋势愈发明显,工业一体机作为关键的设备,其重要性日益凸显。而能够根据软件应用需求进行灵活选配的工业一体机,更是为企业提供了高效、定制化的解决方案。 一、工业一体机的全封闭无风扇散热功…

【软件测试】性能测试 | 概念 | 常见术语 | 性能指标 | 分类 | 流程

性能测试 文章目录 性能测试一、什么是性能测试1.生活中遇到的软件的性能问题2.性能测试定义3.性能测试和功能测试有什么区别4.什么样的表现属于软件性能好、什么样的表现不好5.影响一个软件性能因素有哪些 二、为什么进行性能测试三、性能测试的常见术语以及性能测试的衡量指标…

深入了解自动化:聊聊什么项目适合做自动化测试?

自动化测试 什么是自动化测 什么是自动化测试? 随着软件产业的不断发展,市场对软件周期的要求越来越高,于是催生了各种开发模式,如大家熟知的敏捷开发,从而对测试提出了更高的要求。此时,产生了自动化测试…

双指针系列第 8 篇:盛水最多的容器。几句话讲明白!

Leetcode 题目链接 思路 取首尾双指针和水量如下所示&#xff0c;设高度函数为 h ( i ) h(i) h(i)&#xff0c;在下图中 h ( l ) < h ( r ) h(l) < h(r) h(l)<h(r)。 观察以 l l l 为左边界所能构成的其他水量&#xff0c;与矮的右边界搭配结果如下。 与高的…