您的位置:首页 > 其它

软件构造 课堂笔记5

2017-09-22 21:53 711 查看
本文主要来源于ppt,省略了一部分我觉得没用的地方

子程序设计

可取的内聚性(由高到低)

功能内聚性

一个子程序仅执行一项操作

顺序内聚性

子程序内包含需要按特定顺序执行的操作,这些步骤共享数据 ,只有全部执行完毕后才完成一项完整的功能

例:

// 根据出生日期计算退休时间
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比注释好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: