软件构造 课堂笔记5
2017-09-22 21:53
711 查看
本文主要来源于ppt,省略了一部分我觉得没用的地方
一个子程序仅执行一项操作
顺序内聚性
子程序内包含需要按特定顺序执行的操作,这些步骤共享数据 ,只有全部执行完毕后才完成一项完整的功能
例:
这就是顺序内聚,可以改成功能内聚
通信内聚性
在一个子程序中,两个操作只是使用相同数据,而不存在其它任何联系
例:
两个操作: 1. 获取姓名 2. 修改电话号码
相同数据: 比如说通过用户id查找用户,那么相同数据就是用户id
临时内聚性
因为需要同时执行的原因才被放入同一个子程序
例:
可以修改成这样:
当子程序中的操作是按某一特定顺序进行的,就是过程内聚性
过程内聚性VS顺序内聚性
顺序内聚性中的顺序操作使用的是相同数据
过程内聚性中的操作使用的并不是相同数据
例如:
过程内聚性
功能内聚性
逻辑内聚性
若干操作被放入一个子程序中,通过传入的控制标志选择执行其中的一项操作
例:
如果把里面的语句换成函数,那么是可以的,但是语句是不行的
如果代码仅由一系列if或case语句,以及调用其他子程序的语句组成,那么通常也是可以的,如果只发布命令,不做任何处理,成为“事件处理器”
偶然内聚性
对参数采用某种表示输入、修改、输出的命名规则
如加上i_、m_、o_前缀
使用所有的参数
不要把参数用做工作变量 // 不要为了省内存就直接把变量拿来存储其他的值,万一需要用到的时候找不到
在接口中对参数的假定加以说明
同时在子程序的内部和调用子程序的地方说明
断言assertion比注释好
子程序设计
可取的内聚性(由高到低)
功能内聚性一个子程序仅执行一项操作
顺序内聚性
子程序内包含需要按特定顺序执行的操作,这些步骤共享数据 ,只有全部执行完毕后才完成一项完整的功能
例:
// 根据出生日期计算退休时间 func1() { 1. 根据出生日期计算员工**年龄** 2. 根据**年龄**计算退休时间 }
这就是顺序内聚,可以改成功能内聚
// 根据出生日期计算员工年龄 func2() { 根据出生日期计算员工年龄 } // 根据出生日期计算退休时间 func3() { func2(); 根据年龄计算退休时间 }
通信内聚性
在一个子程序中,两个操作只是使用相同数据,而不存在其它任何联系
例:
// 从用户记录中获取用户的姓名和电话号码 GetNameAndChangePhoneNumber();
两个操作: 1. 获取姓名 2. 修改电话号码
相同数据: 比如说通过用户id查找用户,那么相同数据就是用户id
临时内聚性
因为需要同时执行的原因才被放入同一个子程序
例:
StartUp() { 读取一个配置文件 初始化一个临时文件 建立内存管理 显示初始化屏幕 }
可以修改成这样:
GetConfig() { 读取一个配置文件 } InitTemp() { 初始化一个临时文件 } MemManage() { 建立内存管理 } InitDisplay)() { 显示初始化屏幕 } StartUp() { GetConfig(); InitTemo(); MemManage(); InitDisplay(); }
不可取的内聚性
过程内聚性当子程序中的操作是按某一特定顺序进行的,就是过程内聚性
过程内聚性VS顺序内聚性
顺序内聚性中的顺序操作使用的是相同数据
过程内聚性中的操作使用的并不是相同数据
例如:
过程内聚性
PrintReport() { 1. 打印销售收入报表操作 2. 打印支出报表操作 3. 打印雇员名单报表操作 4. 打印客户名单报表操作 }
功能内聚性
FileOperation() { 1. 打开文件操作 2. 读文件操作 3. 处理文件内容操作 4. 输入结果操作 5. 关闭文件操作 }
逻辑内聚性
若干操作被放入一个子程序中,通过传入的控制标志选择执行其中的一项操作
例:
InputData(用户名,雇员时间卡信息,库存数据) { if(用户名) { 对用户名进行处理 } else if(雇员时间卡信息) { 对雇员时间卡信息进行处理 } else if(库存数据) { 对库存数据进行处理 } else { 进行其他操作 }
如果把里面的语句换成函数,那么是可以的,但是语句是不行的
如果代码仅由一系列if或case语句,以及调用其他子程序的语句组成,那么通常也是可以的,如果只发布命令,不做任何处理,成为“事件处理器”
偶然内聚性
如何使用子程序参数
按照 输入——修改——输出 的顺序排列参数对参数采用某种表示输入、修改、输出的命名规则
如加上i_、m_、o_前缀
使用所有的参数
不要把参数用做工作变量 // 不要为了省内存就直接把变量拿来存储其他的值,万一需要用到的时候找不到
在接口中对参数的假定加以说明
同时在子程序的内部和调用子程序的地方说明
断言assertion比注释好
相关文章推荐
- 软件构造 课堂笔记1
- 软件构造 课堂笔记3
- 软件构造 课堂笔记6
- 软件构造 课堂笔记2
- 软件构造 课堂笔记4
- 软件构造 课堂笔记8 脑补版
- 软件构造系列学习笔记(3.1)—————数据类型和类型检查
- 第二章--第一节:软件的生命周期和配置管理(软件构造学习笔记)
- 软件构造系列学习笔记(5.1)————可复用性的度量,形态和外部观察
- 嵌入式软件开发培训笔记——Java第三天(方法重载、对象的构造与初始化过程分析、封装等)
- 软件需求工程 课堂笔记8
- 第一章--第一节:软件构建的多维视图(软件构造学习笔记)
- 软件构造系列学习笔记(5.3)————可复用性的设计模式
- 软件需求工程 课堂笔记9
- 编译原理与编译构造 课堂笔记9
- 第一章--第二节:软件构造的质量目标(软件构造学习笔记)
- 软件构造系列学习笔记(3.2)————设计规约
- [版本构造]ASProtect初探---软件防护系列学习笔记
- 第二章--第二节:软件构建的过程、系统和工具(软件构造学习笔记)
- 软件需求工程 课堂笔记4