软件构造 课堂笔记5
程序员文章站
2022-03-10 14:15:25
...
本文主要来源于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比注释好
上一篇: [软件构造] 03 OOP中的Liskov替换原则(LSP)
下一篇: 03、构造器详解
推荐阅读
-
哪种猫猫由于生理构造容易有泪痕 1月5日支付宝蚂蚁庄园课堂答案
-
如何免费激活微软Office软件?小米笔记本教你5步搞定
-
软件构造3.2设计规约笔记
-
东北大学——软件需求分析与系统设计——第七章笔记整理(2020年5月整理)
-
【课堂笔记精选】为了能够用“Unity”软件做游戏,我要从最基础的开始复习JavaScript
-
HTML5第7次课堂笔记(图片验证码的应用,xmlhttprequest对象的使用,跨域)
-
如何免费激活微软Office软件?小米笔记本教你5步搞定
-
【课堂笔记精选】为了能够用“Unity”软件做游戏,我要从最基础的开始复习JavaScript
-
东北大学——软件需求分析与系统设计——第七章笔记整理(2020年5月整理)
-
HTML5第7次课堂笔记(图片验证码的应用,xmlhttprequest对象的使用,跨域)