软件制造工程第二程序设计.ppt_第1页
软件制造工程第二程序设计.ppt_第2页
软件制造工程第二程序设计.ppt_第3页
软件制造工程第二程序设计.ppt_第4页
软件制造工程第二程序设计.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件制造工程 第二章程序设计 本章授课内容 基础程序设计概述程序设计原理程序设计的启发式原则程序设计方法面向对象程序设计团队程序设计书的构成和理解 程序设计概述 程序设计在软件开发中的位置 程序设计概述 概念 程序设计概要设计又称为总体设计或外部设计 详细设计又称为过程设计或内部设计 程序设计是以详细设计为基础 对程序单元内的功能模块进行细化 对功能模块的功能处理要求和实现方法给予说明 并作出程序设计书 程序设计的结果将是编程工程和测试工程的主要依据 近年来 由于很多应用系统在开发周期短 开发成本低的条件下进行设计 常常把详细设计和程序设计的阶段合为一体 程序设计概述 作业流程及描述 程序设计概述 作业流程及描述 程序设计概述 工作用表 程序设计的一个重要课题就是模块划分和模块设计 把开发的软件系统按功能逐次分割成层次结构 使每一部分完成简单的功能且各个部分之间又保持一定的联系 这种功能设计所包括的内容有 采用某种设计原理和方法 将一个复杂的系统按功能划分为成模块的层次结构 确定每个模块的功能 建立与已确定的软件需求的对应关系 确定模块间的调用关系 确定模块间的接口 设计接口的信息结构 评估模块划分的质量及导出模块结构的规则 程序设计原理 模块的概念在软件的体系结构中 模块是可组合 分解和更换的单元 程序设计单元都被看成为 模块 所谓模块就是程序对象的有名字的集合 例如 过程 函数 子程序 宏等 模块具有以下几种基本属性 接口 指模块的输入与输出 功能 指模块实现什么功能 逻辑 描述内部如何实现要求的功能所需的数据和处理流程 状态 指该模块的运行环境 即模块的调用与被调用关系 程序设计原理 程序设计原理 设计的原则 l 分解 协调的原则 2 信息隐蔽 抽象的原则 即上层模块只规定下层模块做什么和所属模块间的协调关系 但不规定怎么做 以保证模块的相对独立性和内部结构的合理性 使得模块与模块之间层次分明 易于理解 易于实施 易于维护 3 自顶向下原则 首先抓住总的功能目标 然后逐层分解 即先确定上层模块的功能 再确定下层模块的功能 4 一致性原则 要保证整个软件设计过程中具有统一的规范 统一的标准 统一的文件模式等等 5 面向用户的原则 每个模块必须功能明确 接口明确 坚决消除多重功能和无用接口 模块的概念一个模块的规模应当取决于它的功能和用途 应减少接口的代价 提高模块的独立性 模块的独立性可以由两个定性标准度量 这两个标准分别称为聚合和耦合 程序设计原理 抽象是认识复杂现象过程中使用的思维工具 即抽出事物本质的共同的特性而暂不考虑它的细节 不考虑其他因素 通过抽象 可以确定组成软件的过程实体 逐步求精是一种先总体 后局部的思维原则 先抓住主要问题并给予解决 然后分阶段逐步深入考虑问题的细节 也就是逐层分解 分而治之的方法 程序设计原理 在一节不和谐的课堂里 老师叹气道 要是坐在后排聊天的同学能象中间打牌的同学那么安静 就不会影响到前排睡觉的同学 这个故事告诉我们 如果不想让坏事传播开来 就应该把坏事隐藏起来 家丑不可外扬 就是这个道理 为了尽量避免某个模块的行为去干扰同一系统中的其它模块 在设计模块时就要注意信息隐藏 应该让模块仅仅公开必须要让外界知道的内容 而隐藏其它一切内容 信息隐蔽指在设计和确定模块时 使得一个模块内部包含的信息 过程或数据 对于不需要这些信息的其他模块来说 是不能访问的 通过信息隐蔽 可以定义和实施对模块的过程细节和局部数据结构的存取限制 程序设计原理 模块独立性指每个模块只完成系统要求的独立子功能 并且与其他模块的联系最少且接口简单 用两个定性的度量标准耦合性 coupling 和内聚性 cohesion 来衡量模块的独立性 程序设计原理 耦合性也称块间联系 指软件系统结构中各模块间相互联系紧密程度的一种度量 模块之间联系越紧密 其耦合性就越强 模块的独立性则越差 模块间耦合高低取决于模块间接口的复杂性 调用的方式及传递的信息 耦合按从弱到强的顺序可分为以下七种类型 非直接耦合 数据耦合 数据结构耦合 控制耦合 共通耦合 外部耦合 内容耦合 按上述顺序 耦合性逐渐升高 模块独立性逐渐降低 程序设计原理 内聚性又称块内联系 指模块的功能强度的度量 即一个模块内部各个元素彼此结合的紧密程度的度量 若一个模块内各元素 语名之间 程序段之间 联系的越紧密 则它的内聚性就越高 内聚按强度从低到高共分七级 偶然内聚 逻辑内聚 时间内聚 过程内聚 通信内聚 信息内聚 功能内聚 内聚性逐渐加强 功能趋于单一 模块独立性也逐渐加强 程序设计原理 模块化的设计原则改进软件结构提高模块独立性模块规模应该适中保持适当的扇入和扇出模块的作用范围应在控制范围之内力争降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测以上启发式规则多数是经验数据 对改进设计 提高软件质量 有重要的参考价值 程序设计的启发式原则 程序设计的启发式原则 改进软件结构提高模块独立性 经验表明 模块的规模要在一页以内 模块的总行数最好在30 60行 这种规模易于阅读和理解 过长的模块往往是分解不充分的表现 会增加阅读理解的难度 但小模块太多也会使模块之间联系变得复杂 增大系统在模块调用时传递信息所花费的开销 不值得单独存在 可以把它合并到上级模块中去 由于种种原因如功能和用途的约束 一个模块可能会大于一页 要以不影响程序的清晰为前提 程序设计的启发式原则 一个模块的扇入表示有多少个模块直接调用它 一个模块的扇出表该模块控制的其它模块的数量 深度表示软件结构中控制的层数 经验表明 一个设计得好的典型系统平均扇出通常是3或4 扇出的上限通常是5 9 程序设计的启发式原则 保持适当的扇入和扇出 一个模块的作用范围 或称影响范围 指受该模块内一个判定影响的所有模块的集合 一个模块的控制范围指模块本身以及其所有下属模块 直接或间接从属于它的模块 的集合 一个模块的作用范围应在其控制范围之内 且判定所在的模块应在其影响的模块在层次上尽量靠近 程序设计的启发式原则 模块的作用范围应在控制范围之内 模块接口复杂是软件发生错误的一个主要原因 应该仔细设计模块接口 使得信息传递简单并且和模块的功能一致 接口复杂或不一致 即看起来传递的数据之间没有联系 是低内聚的表现 应该重新分析这个模块的独立性 程序设计的启发式原则 力争降低模块接口的复杂程度 不要使模块间出现内容耦合从顶部进入模块并且从底部退出 软件比较容易理解 因此也比较容易维护 程序设计的启发式原则 设计单入口单出口的模块 程序设计的启发式原则 模块功能应该可以预测 如果将一个模块看做黑盒子 就是说 只要输入的数据相同就产生同样的输出 这个模块的功能就是可以预测的 具有内部状态的模块 其输出不仅与输入有关 而且还取决于模块的当前状态 其功能是不可预测的 这就增加了模块的测试和维护难度 这条原则不是绝对的 如对于实时系统来说 针对不定时的输入 系统状态要不断发生变化 这种变化又直接影响下一个输入引起的输出 对于这种不可避免的情况 要引起充分注意 要将相应模块做特殊处理 无论测试还是维护都把模块状态作为一个重要影响因素来考虑 程序设计方法 结构化方法 结构化程序设计的内容使用三种控制结构逐步求精的设计方法 程序设计方法 结构化工具 流程图盒图 N S图 PAD图HIPO图判定表判定树过程设计语言 程序设计方法 结构化工具 流程图处理用四方形图表示条件判断用菱形图表示用连接线把这些图形连接起来表示处理的流程 程序设计方法 结构化工具 盒图 N S图 盒图是Nassi和Shneiderman提出来的 又称N S图 没有箭头 不允许随意转移 在NS图中 每个 处理步骤 是用一个盒子表示的 所谓 处理步骤 可以是语句或语句序列 需要时 盒子中还可以嵌套另一个盒子 嵌套深度一般没有限制 只要整张图在一页纸上能容纳得下 由于只能从上边进入盒子然后从下边走出 除此之外没有其他的入口和出口 所以 NS图限制了随意的控制转移 保证了程序的良好结构 程序设计方法 结构化工具 PAD图PAD图是日本日立公司于1973年发明的 指问题分析图 ProblemAnalysisDiagram 它是一种自左往右展开的二维树型结构 控制流程为自上而下 从左到右的执行 由机器自动通过走树的办法生成相应的源代码 大大提高了软件的生产率 程序设计方法 结构化工具 程序设计方法 结构化工具 例 1求A B C三个数中的最大值 例 2猴子吃桃问题 有一堆桃子不知数目 猴子第一天吃掉一半 觉得不过瘾 又多吃了一只 第二天照此办理 吃掉剩下桃子的一半另加一个 天天如此 到第十天早上 猴子发现只剩一只桃子了 问这堆桃子原来有多少个 程序设计方法 结构化工具 例 1 程序设计方法 结构化工具 例 2 程序设计方法 结构化工具 HIPO图 层次图加输入 处理 输出图 HIPO图由下面三部分组成 H 分层 图 即以方框形式表示程序的主要功能 次要功能及其与模块间的关系 总览IPO图 为H图提供输入变量表 处理功能表和输出变量表 详细IPO图 为底层模块提供输入变量表 处理功能表和输出变量表 HIPO图是一种图解式设计工具 在概要设计 详细设计 程序设计 测试和维护的不同阶段 都可以使用HIPO图对设计进行描述 程序设计方法 结构化工具 HIPO图 层次图加输入 处理 输出图 程序设计方法 结构化工具 判定表在许多软件设计中 常常需要设计一个模块 根据多种条件的复杂组合 选择执行相应的动作 这种设计过程用判定表表示比较合适 判定表可作为输入数据 被直接读入机器 由 表驱动 算法程序自动处理 判定表的第一行是规则号 每一列对应一条处理规则 它根据不同的条件组合选择执行相应的动作 为了能表示出总的控制流程 单单用这个工具是不行的 还需加上其他信息 通常 判定表可以有效地用来作为其他详细设计工具的补充 判定表采用以下步骤进行处理 列出与一个具体过程 或 有关的所有处理 列出过程执行期间的所有条件 或所有判断 将特定条件取值组合与特定的处理相匹配 消去不可能发生的条件取值组合 将右部每一纵列规定为一个处理规则 程序设计方法 结构化工具 判定表举例1 程序设计方法 结构化工具 判定表举例2某航空公司规定 乘客可以免费托运重量不超过30公斤的行李 当行李重量超过30公斤时 对头等舱的乘客超重部分每公斤收费4元 对其他舱的乘客超重部分每公斤收费6元 对外国乘客超重部分每公斤收费比国内乘客多一倍 对残疾乘客每公斤收费比正常乘客少一半 程序设计方法 结构化工具 判定树判定树是判定表的变种 能清晰地表示复杂的条件组合与应做的动作之间的对应关系 判定树的优点是 由于是一种图形表示 形式简单 不需任何说明 易看出含义 易于掌握和使用 缺点是 简洁性不如判定表 相同的数据元素往往要重复写多遍 而且越接近树的叶端重复次数越多 程序设计方法 结构化工具 判定树举例 思考 将行李重量作为最后一个分支 将会是几片叶子 答案 16片叶子 程序设计方法 结构化工具 过程设计语言 PDL ProcessDesignLanguage 是一个笼统的名字 由许多种不同的过程设计语言 过程设计语言用于描述模块中算法和加工的具体细节 以便在开发人员之间比较精确的进行交流 过程设计语言的外层语法描述结构 采用与一般编程语言类似的确定的关键字 内层语法描述操作 可以采用任意的自然语句 如 英语 汉语 由于过程设计语言与程序很相似 也称为伪程序 或伪码 PseudoCode 但它仅仅是对算法的一种描述 是不可执行的 程序设计方法 结构化工具 过程设计语言 PDL ProcessDesignLanguage PDL的优点 1 可以作为注释直接插在源程序中间 这样做能促使维护人员在修改程序代码的同时也相应地修改PDL注释 因此有助于保持文档和程序的一致性 提高了文档的质量 2 可以使用普通的正文编辑程序或文字处理系统 很方便地完成PDL的书写和编辑工作 3 已经有自动处理程序存在 而且可以自动由PDL生成程序代码 PDL的缺点是不如图形工具形象直观 描述复杂的条件组合与动作间的对应关系时 不如判定表清晰简单 程序设计方法 结构化工具 过程设计语言 PDL ProcessDesignLanguage 例 统计空格seq打开文件读入字符串Totalsum 0程序体iteruntil文件结束 程序体end打印总数seq打印出空格总数打印总数end关闭文件停止统计空格end 顺序结构 AseqBlock1Block2Block3Aend选择结构 Aselectcond1Block1Aorcond2Block2Aorcond3Block3Aend 重复结构 AiteruntilcondBlock1AendAiterwhilecondBlock1Aend 程序设计方法 面向对象的程序设计 面向对象的方法开始也只是着眼于编程 后来才形成了从分析 设计到编程 测试与维护一整套的软件工程体系 即产生了面向对象分析 OOA 面向对象设计 OOD 面向对象编程 OOP 面向对象测试 OOT 程序设计方法 面向对象的程序设计 面向对象程序设计的特征面向对象的程序设计将计算看作是一个系统的开发过程 系统由对象组成 经历一连串的状态变化以完成计算任务 面向对象程序的基础构件是对象和类 从程序设计角度来看 对象是一种不信赖于外界的模块 对应着存储器的一块被划分的区域 它包含数据 在逻辑上包含作用于这些数据的过程 这些过程称为方法 面向对象程序设计的基本机制是继承性 消息和方法 还有在特定方面提供更为专门的 灵活的机制 如重置 多态等 程序设计方法 面向对象的程序设计 结构化程序设计就是把内部设计中的功能模块的设计 功能模块间接口的设计 数据库的定义等详细化的设计过程 而面向对象开发时 在OOD阶段已把各个类直到接口 方法 都已定义 程序设计的对象就如同结构化程序设计一样就是进行类内部处理的详细化设计 程序设计书的构成和理解 程序设计书的构成和理解 程序处理概要图是内部设计阶段的成果文档 是程序设计阶段的输入 他是程序设计书的重要内容 主要描述该程序单元的处理概要 输入输出文件和屏幕 报表的关连图 给出了与该程序相关的文件ID 文件名称 屏幕ID 名称 报表名称等 程序处理概要说明书也是内部设计阶段的成果文档 是程序设计阶段的输入 是程序设计书的重要内容 它对于程序处理概要图中的程序处理概要进行展开 给出了程序的各个功能模块的处理概要说明 小型的或简单的程序可以从程序功能概要说明书入手编写代码 程序设计书的构成和理解 程序功能结构图是程序设计阶段的成果文档 它是程序结构设计的图形结果 在开发周期短 程序设计时间不足的情况下 程序功能结构图可以省略 有程序功能结构图的情况下 要注意编写的程序结构是否实现了程序功能结构图的要求 程序追加处理说明书是在程序概要说明书的基础上 对程序设计阶段所增加的功能进行补充说明 在程序编码之前 一定要注意确认程序追加处理说明书的功能是否能够实现 有无设计上的问题或文字上的疏漏 程序设计书的构成和理解 工作缓冲区格式定义表给出了程序中使用的主要工作缓冲区和变量的命名 类型 长度 初期值和编辑方法等说明 在理解工作缓冲区格式定义表中的各个变量的定义时 一定要对照相关的程序设计书的内容 模块功能定义书是在程序处理概要说明书的基础上对于每个程序模块的实现方法进行了详细的说明 对于复杂的程序单元 一定要注意理解各个模块功能定义书的详细处理说明 对于程序设计阶段补充的功能模块和个别模块的补充功能 在模块功能定义书 补充 中给出了详细说明 程序设计书的构成和理解 输入数据检查处理说明书主要说明屏幕输入项目的检查条件 所有登录到数据库的数据都必须通过屏幕输入检查处理 以保证用户数据的完整性和一致性 程序设计实例 系统概要说明 本案例是一个学生成绩管理子系统 它包含学生基本成绩登录 学生平均成绩计算 班级平均成绩计算 学生成绩表生成等4个程序模块 程序设计实例 开发准备确认基本 详细设计的成本物 制定工作计划 作出开发计划中日程表和开发计划小日程表 确立开发体制 开发人员的构成和组织体制 检查所制定的工作计划和工作内容程序设计 学生成绩管理系统流程图 的处理要求 该系统由四个处理模块构成 它们是 学生基本成绩登录 学生平均成绩计算 班级平均成绩计算 学生成绩表生成 团队 团队的含义 团队是由员工和管理人员组成的一个共同体 该共同体合理利用每一个成员的知识和技能协同工作 解决问题 达到共同的目标 团队 构成团队的重要要素目标 知道要向何处去 人 人员的能力如何 技能是否互补 人员的经验如何 团队的定位 团队在企业中处于什么位置 由谁选择和决定团队的成员 团队最终应对谁负责 团队采取什么方式激励下属 作为成员在团队中扮演什么角色 是订计划还是具体实施或评估 权限 整个团队在组织中拥有什么样的决定权 比方说财务决定权 人事决定权 信息决定权 组织的基本特征 计划 目标的具体工作的程序 团队 群体群体是指两个以上相互作用又相互依赖的个体 为了实现某些特定目标而结合在一起 群体成员共享信息 作出决策 帮助每个成员更好地担负起自己的责任 团队 团队与群体团队与群体的区别 1 领导方面 作为群体应该有明确的领导人 团队可能就不一样 尤其团队发展到成熟阶段 成员共享决策权 2 目标方面 群体的目标必须跟组织保持一致 但团队中除了这点之外 还可以产生自己的目标 3 协作方面 协作性是群体和团队最根本的差异 群体的协作性可能是中等程度的 有时成员还有些消极 有些对立 但团队中是一种齐心协力的气氛 4 责任方面 群体的领导者要负很大责任 而团队中除了领导者要负责之外 每一个团队的成员也要负责 甚至要一起相互作用 共

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论