软件工程导论——5程序实现

在这里插入图片描述

程序设计语言的发展

第一代语言:机器语言

– 机器指令代码、不同机器的机器语言不同 – 二进制形式
– 使用绝对地址
– 运行效率高、但是出错率高、可读性差

第二代语言:汇编语言

– 符号指令对应于机器指令
– 存储空间由机器安排
– 不同类型处理器具有不同汇编语言

第三代语言:高级程序设计语言

– 从20世纪50年代开始
– Fortran、Basic、 Pascal、 C、C++、C#、Java等

第四代语言:4GL

– 数据库领域
– 查询语言和报表生成器:SQL
– 图形语言:SQL Windows
– 应用生成器:Power Builder
– 形式化规格说明语言:Z、NPL、SPECINT

程序设计规范

源程序文档化

标识符的命名:

• 文件、模块、变量、常量、函数等的命名
• 反映它所代表的东西,见名知意,英文单词或其组合 (每个单词首字母大写或用下划线连接)
• 精炼和意义明确,最小长度下的最大信息
• 例子:
– name, address
– number_of_reservations, postal_address
– getName, setName
• 不好的命名:a, iii,postaladdress

变量的命名:

• 给名字加注释
• 一个变量一种用途
• 避免局部变量和全局变量同名
• 变量声明放在代码块的开头
• 尽量在变量声明时初始化

程序注释

• 序言性注释:标题、版本、功能、算法、接口、编程者、日期、版权信息等
• 功能性注释:程序体内
• 一般用自然语言
• 注释不宜过多,也不宜过少
• 不要注释含义已经很清楚的代码
Total = amount + total; //add amount to total
这个注释好吗?
• 保持注释和代码一致,修改代码时同时修改注释
• 注释应当准确无二义性

代码版式

• 空格
– 关键字和括号之间
– 参数列表中逗号之后
– 二元运算符之间
– 语句中的表达式之间
• 例子
(a< -17) ANDNOT (B < =49) ORC
=> ( a < -17 ) AND NOT ( B <= 49 ) OR C

数据说明标准化

– 数据说明的次序规范化,使数据容易查找,如:
① 常量说明
② 简单变量说明
③ 数组说明
④ 公用数据块说明
⑤ 文件说明
– 当多个变量在一条语句中声明时,可按字母排序
– 对于复杂数据结构,使用注释

语句结构简单化

– 程序编写简单、清楚(换位思考)
– 清晰第一、效率第二(除非有特殊要求)
– 尽量采用顺序、选择和循环三种基本结构
– 避免大量的循环嵌套和条件嵌套
– 使用库函数
– 避免goto语句

输入输出规范化

– 对所有输入数据进行检验,保证输入数据的有效性
– 检查输入项的各种重要组合的合理性
– 输入格式和步骤尽量简单
– 尽量允许自由格式输入
– 允许默认值
– 以交互方式进行输入时,要在屏幕上使用提示符以及输入提示,并指明输入项的种类和取值范围,同时在输入过程中和输入结束时,在屏幕上给出状态信息
– 输出数据尽量表格化和图形化

面向对象程序设计规范

1.提高可重用性

– 提高方法的内聚:一个方法只完成一项功能
– 减小方法的规模
– 保持方法的一致性:功能相似的方法具有一致的名称、 参数、返回值、使用条件等
– 策略与实现分开
– 全面覆盖:对输入条件中所有可能出现的组合均写出相 应的处理
– 利用继承机制:提取公用部分形成公共代码

2.提高可扩充性

– 封装类的具体实现,对外只提供公有的接口 – 一个方法只包含对象模型中的有限内容
– 精心确定对外接口/公有方法

3.提高健壮性

– 检查输入数据,预防用户的操作错误
– 检查参数的合法性
– 优化性能之前先进行性能测试

程序复杂度度量

• 程序复杂度关系到软件开发成本、开发周期、软件 内的潜伏错误、以及软件的可理解性
• 目标:降低复杂度

McCabe方法

– 根据控制流图中的环路复杂性来度量复杂度
① 退化的程序流程图,仅描述程序内部的控制流程
② 将程序流程图中的每个处理符号都退化成一个结点
③ 分支的汇聚处应该有一个汇聚结点
④ 如果判断中的条件表达式是复合条件表达式,则改为 嵌套的简单条件表达式
⑤ 将程序流程图中连接处理符号的流线变成连接结点的有向弧
在这里插入图片描述
在这里插入图片描述
• 优点:
– 容易使用
• 缺点:
– 对于不同种类的控制流的复杂性不加区分
– 简单if语句与循环语句复杂性同等看待
– 嵌套if语句与简单case语句复杂性同等看待
– 具有多行的顺序程序与一行语句的复杂性同等看待

Halstead方法

– 根据运算符和操作数的总数度量复杂度
• 运算符:
– 算术运算符、逻辑运算符、关系运算符
– 赋值符、分隔符(,;:)、括号
– 数组操作符、子程序调用符、循环操作符
– 成对运算符,如begin…end、for…to、
repeat…until、while…do、if…then…else、() 、{}等,作为单一运算符
• 操作数
– 变量名和常量
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值