8面向对象软件实现.ppt_第1页
8面向对象软件实现.ppt_第2页
8面向对象软件实现.ppt_第3页
8面向对象软件实现.ppt_第4页
8面向对象软件实现.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

第八章软件实现 什么是软件编码 软件编码是一个复杂而迭代的过程 包括程序设计和程序实现 软件编码要求正确地理解用户需求和软件设计思想正确地根据设计模型进行程序设计正确地而高效率地编写和测试源代码软件编码是设计的继续 会影响软件质量和可维护性 软件编码的工作 程序设计理解软件的需求说明和设计模型补充遗漏的或剩余的详细设计设计程序代码的结构设计审查检查设计结果记录发现的设计缺陷 类型 来源 严重性 编写代码应用编码规范进行代码编写所编写代码应该是易验证的 代码走查确认所写代码完成了所要求的工作记录发现的代码缺陷 类型 来源 严重性 编译代码修改代码的语法错误测试所写代码对代码进行单元测试调试代码修改错误 编码过程与文档流 程序员的秉性 具备诚实的品性勤奋的程序员在调试无穷多的Bug时 已经深深地体会了 诚实 的意义信奉简单实用主义程序员的基本工作是将复杂的问题转化为计算机能处理的一些简单的程序喜欢技术挑战程序员喜欢接触新技术 愿意攻克技术难题高水平的程序员喜欢与高水平的程序员一起工作这种喜好可能导致程序员干活偏离项目真正的需求 程序员应具备的能力 基础知识英语的功底数学基础 算法分析与设计 计算机科学基础知识基本技能认识事务的能力 抽象 模型 结构 层次 做事的逻辑性和条理性沟通技能 演讲技巧和团队协作能力学习新知识和新技术的能力 职业化训练和实践经验 如何做好程序员 职业道德上班时间不干与工作无关的事情你如何看待上班玩游戏 下班后待在公司里干与工作无关的事情行不行 不损害集体利益常见的损害行为 泄密 盗取成果怎样减少无意的泄密 不干危害社会的事情你如何看待黑客行为 问题 在大学生涯中 如何培养这些素质 工作态度认真负责在办公室老实上班 工作时间比别人长 是 认真负责 吗 怎样是真正意义的 认真负责 服务意识程序员要为后续阶段和产品质量的工作提供服务你对用户提出的要求应采取什么态度 团队协作如何在团队中发挥自己的作用 问题 在课程实验中 你对上述要求有体会吗 高效率地工作合理安排一天的时间你怎样安排一天的时间 如何保证精力充沛的 开会如何看待会议 怎样使得会议效率高 处理电子邮件电子邮件是很好的通信工具 但使用不当可能损害工作效率你认为以什么方式处理电子邮件比较好 随时记录你是否有随时记录问题和灵感的习惯 学无止境不断学习新技术 主动 学习是很关键的学习的内容完全依赖个人的喜好吗 提高综合才能缺乏表达能力和管理能力是软件开发人员的通病应该真正学会软件工程的思想向错误和失败学习抓住一切机会 勇于实践随时有面对无知和承认错误的勇气 善于总结和提高 举例 微软公司对员工的要求 个人素质方面聪明有自我发展能力足够自信有很强的工作驱动能力 知道如何开展工作沉着与镇定有创新精神对待产品和技术热爱技术 热心解决问题针对变化和创新 有良好的适应和管理能力 注重客户的反馈所有员工都要以客户为中心开展工作员工代表公司的形象团队合作方面有团队精神具备良好的交流能力善于与人相处 8 1实现的基本活动 程序设计语言不支持关联概念 需要转换为对象引用 许多程序设计语言不支持契约 需要转换为处理异常 修改接口的规格说明 以适应客户新的需求 具体活动 优化 包括减少关联 以提高查询速度 增加冗余关联以提高效率实现关联将契约映射到异常将类模型映射到某一存储模式 8 2程序设计语言 1程序设计语言的分类从软件工程的角度 根据程序设计语言发展的历程 可以把它们大致分为4类 1 从属于机器的语言 第一代语言 2 汇编语言 第二代语言 3 高级程序设计语言 第三代语言 4 第四代语言 4GL 第四代语言 4GL 4GL用不同的文法表示程序结构和数据结构 但是它是在更高一级抽象的层次上表示这些结构 它不再需要规定算法的细节 4GL兼有过程性和非过程性的两重特性 程序员规定条件和相应的动作这是过程性的部分 并且指出想要的结果 这是非过程部分 然后由4GL语言系统运用它的专门领域的知识来填充过程细节 Martin把第四代语言分为以下几种类型 查询语言 用户可利用查询语言对预先定义在数据库中的信息进行较复杂的操作 程序生成器 只需很少的语句就能生成完整的第三代语言程序 它不必依赖预先定义的数据库作为它的着手点 其它4GL 如判定支持语言 原型语言 形式化规格说明语言等 2程序设计语言的选择为某个特定开发项目选择程序设计语言时 既要从技术角度 工程角度 心理学角度评价和比较各种语言的适用程度 又必须考虑现实可能性 有时需要作出某种合理的折衷 通常考虑的因素有 1 项目的应用范围 2 算法和计算复杂性 3 软件执行的环境 跨平台可移植性 4 性能上的考虑与实现的条件 5 数据结构的复杂性 6 软件开发人员的知识水平和心理因素等 项目的应用范围是最关键的因素 针对计算机的4个主要应用领域 为语言做一个粗略的分类 在科学与工程计算领域内 C C 但FORTRAN仍然是应用最广泛的语言 商业数据处理领域中 通常采用COBOL RPG语言编写程序 当然也可选用SQL语言或其它专用语言 在系统程序设计和实时应用领域中 汇编语言或一些语言 如BLISS PL S Ada C c等 在人工智能领域以及问题求解 组合应用领域 主要采用LISP和PROLOG语言 10 3程序效率 1讨论效率的准则2算法对效率的影响3影响存储效率的因素4影响输入 输出的因素 1讨论效率的准则 程序的效率是指程序的执行速度及程序所需占用的内存的存储空间 讨论程序效率的几条准则为 1 效率是一个性能要求 应当在需求分析阶段给出 软件效率以需求为准 不应以人力所及为准 2 好的设计可以提高效率 3 程序的效率与程序的简单性相关 例 表达式X A I 1 A I 写成AI A I X AI 1 AI简单变量的运算比下标变量的运算要快 这样做 虽然效率要高一些 但引进了临时变量 把一个计算公式拆成了几行 增加了理解的难度 不如在一个算式中表达较为安全可靠 2算法对效率的影响 源程序的效率与详细设计阶段确定的算法的效率直接有关 在详细设计翻译转换成源程序代码后 算法效率反映为程序的执行速度和存储容量的要求 转换过程中的指导原则是 1 在编程序前 尽可能化简有关的算术表达式和逻辑表达式 2 仔细检查算法中的嵌套的循环 尽可能将某些语句或表达式移到循环外面 3 尽量避免使用多维数组 4 尽量避免使用指针和复杂的表 5 采用 快速 的算术运算 6 不要混淆数据类型 避免在表达式中出现类型混杂 7 尽量采用整数算术表达式和布尔表达式 8 选用等效的高效率算法 例 用 if char 0 char 0 if char 9 应改成if char 0 char 9 if char a if char z printf Thisisaletter else printf Thisisnotaletter 这里的else到底是否定的哪一个if 不同的读者可能会产生不同的理解 出现了二义性问题 3影响存储效率的因素 在大中型计算机系统中 存储限制不再是主要问题 对内存采取基于操作系统的分页功能的虚拟存储管理 给软件提供了巨大的逻辑地址空间 这时 存储效率与操作系统的分页功能直接有关 将程序功能合理分块 使每个模块或一组密切相关模块的程序体积大小与每页的容量相匹配 可减少页面调度 减少内外存交换 提高存储效率 仅在必须的时候 生成对象 4影响输入 输出的因素 输入 输出可分为两种类型 一种是面向人 操作员 的输入 输出 一种是面向设备的输入 输出 提高输入 输出效率的指导原则 1 输入 输出的请求应当最小化 2 对于所有的输入 输出操作 安排适当的缓冲区 以减少频繁的信息交换 3 对辅助存储 例如磁盘 选择尽可能简单的 可接受的存取方法 4 对辅助存储输入 输出 应当成块传送 5 对终端或打印机输入 输出 应考虑设备特性 尽可能改善输入 输出的质量和速度 6 任何不易理解的 对改善输入 输出效果关系不大的措施都是不可取的 7 好的输入 输出程序设计风格对提高输入 输出效率会有明显的效果 10 4软件编码规范 程序实际上也是一种供人阅读的文章 程序员在编写程序时 应当意识到今后会有人反复地阅读这个程序 并沿着你的思路去理解程序的功能 阅读程序是软件开发和维护过程中的一个重要组成部分 而且读程序的时间比写程序的时间还要多 因此应使程序具有良好的风格 参见 java编程语言代码规范 软件编码规范与特定语言相关的描写如何编写代码的规则集合现实软件全生命周期的70 成本是维护软件在其生命周期中很少由原编写人员进行维护目的提高编码质量 避免不必要的程序错误增强程序代码的可读性 可重用性和可移植性 编码规范的要求 基本要求程序结构清析且简单易懂 单个函数的行数一般不要超过100行 特殊情况例外 算法设计应该简单且直接了当 代码要精简 避免出现垃圾程序 尽量使用标准库函数 类方法 和公共函数 类方法 最好使用括号以避免二义性 可读性要求 可读性第一 效率第二 源程序文件应有文件头说明 函数应有函数头说明 主要变量 结构 联合 类或对象 定义或引用时 注释要能够反映其含义 常量定义有相应说明 处理过程的每个阶段都有相关注释说明 在典型算法前都有注释 一目了然的语句不加注释 应保持注释与代码完全一致 利用缩进来显示程序的逻辑结构 缩进量统一为4个字节 不得使用Tab键的方式 对于嵌套的循环和分支程序 层次不要超过五层 问题 以下示例有什么问题 如何修改 if cond1 文件命名与组织 文件结构说明版权和版本信息的文件头注释package和import语言类和接口说明语句参看 JavaTM编程语言代码规范1999年4月20日修订版 代码的版式 1适当的空行空行通过隔断逻辑上相关的代码 增强了代码的可读性 如下情况应该使用两个空行 源文件中节与节之间类与接口定义之间如下情况应该使用一个空行 方法之间方法内的局部变量与方法中的第一个语句之间块注释或单行注释之前方法内的逻辑部分之间为了提高可读性 2代码行与空格一行代码只写一条语句 避免使用复杂的语句行如下情况应该使用空格 关键词后的小括号应该用一个空格隔开参数列表的逗号后应该有空格 除二进制操作符外的所有操作符都应该用空格将其与操作数隔开 for语句中的表达式应该用空格隔开强制转换后应该紧跟一个空格 3分行与对齐避免行的长度超过80个字符 因为很多终端和工具不能很好的处理它们 当一个表达式不适合在一行时 断行一般根据这些常规原则 在逗号后断行 在操作符前断行 宁可选择高层次断行 而不选择低层次 将新行与表达式同一层次的上一行开头对齐 如果上面的规则会导致混淆代码或代码右边距挤压 只需缩进8个空格代替 someMethod longExpression1 longExpression2 longExpression3 longExpression4 longExpression5 var someMethod1 longExpression1 someMethod2 longExpression2 longExpression3 4命名规则通用规则标识符明明应当直观 最好采用英文单词或组合过长的单词应当采用合理的缩写或专业术语的缩写不要出现仅靠大小写来区分的相似标识符不要出现局部变量和全局变量同名变量名应当使用 名词 或 形容词 名词 函数名应使用 动词 或 动词 名词 其他命名规则 5声明尽量在声明局部变量时 初始化它们 唯一不初始化局部变量的理由是局部变量的初始值首先取决于一些计算 块的开头只放声明 块是由大括号包围的任何代码 不要等要用到的时候才声明变量 建议每行一个声明 这样可以有效的进行注释 6注释程序可以有四种风格的实现注释 块注释 单行注释 尾端注释和行末注释书写注释应该注意以下问题 不能过多含义清楚的代码不需要注释修改代码同时修改注释 保持一致准确易懂 防止二义性注意注释的位置变量定义和分支 循环语句必须注释 结构化要求 禁止使用GOTO C语言 语句 用IF语句来强调只执行两组语句中的一组 禁止ELSEGOTO和ELSERETURN 避免从循环中引出多个出口 应保留函数 方法 只有一个出口 正确性与容错性要求 对所有的用户输入 必须进行合法性和有效性检查 所有变量在调用前必须被初始化 改一个错误时可能产生新的错误 因此在修改前首先考虑对其它程序的影响 单元测试也是编程的一部分 提交联调测试的程序必须通过单元测试 单元测试时 必须针对类里的每一个public方法进行测试 测试其正确的输入 是否得到正确的输出 错误的输入是否得到相应的容错处理 如异常捕捉处理 返回错误提示等 可重用与可移植性要求 重复使用的且完成相对独立功能的算法或接口 应该考虑封装成公共的控件或类 如时间 日期处理 字符串格式处理 数据库连接 文件读写等 以提高个人是系统中程序的复用或协同开发过程中程序的可重用 相对固定和独立的程序实现方式和过程 应考虑做成程序模板 增强对程序实现方式的复用 如对符合一定规范的XML数据的解析等过程 对于JAVA程序来说 应当尽量使用标准的JDK提供的类 避免使用第三方提供的接口 以确保程序不受具体的运行环境影响 而且和平台无关 具备良好的可移植性 对数据库的操作 使用符合JAVA语言规范的标准的接口类 例如JDBC 避免使用第三方提供的产品 除非程序是运行于特定的环境下 并且有很高的性能优化方面的要求 程序中涉及到的数据库定义和操纵语句 尽量使用标准SQL数据类型和SQL语句 避免使用第三方的专用数据库所提供的扩展SQL语句或SQL函数 除非此扩展部分已成为一种事实上的标准 10 5代码检查 问题 编译没有错误是否说明程序没有错误 如何发现程序中的逻辑错误或语义错误 错误的严重性严重的 需求没有满足很小的 不影响运行和维护中等的 除了以上两种情况 错误类型 逻辑问题遗漏的事件或步骤 重复的逻辑 忽视的前提条件 不必要的函数 误解 忽视的条件测试 检查错误的变量 不正确的循环等计算问题不充分的或不正确的等式表达式 精确性的损失 符号约定错误例如 浮点数运算10 0 0 1通常不等于1 0 987654304 987654301 3但计算机处理的结果是 0 9876543108 0 9876543108 0 0 接口 时间问题不正确的中断处理 不正确的I O时间分配 不匹配的子程序数据处理问题不正确的数据初始化 不正确的数据访问或数据存储 不正确的数据标量值或单位 不正确的数据维数不正确的数据范围数据问题不正确或缺少敏感数据 不正确或缺少操作数据 不正确或缺少表中的嵌入数据 不正确或缺少外部数据 不正确或缺少输出数据 文档问题模糊说明等文档的质量可适用的标准不匹配等之前修改引起的错误互操作性问题与其他软件或构件不兼容 代码检查清单 代

温馨提示

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

评论

0/150

提交评论