软件构造 课堂笔记5
本文主要来源于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比注释好
软件构造 课堂笔记5相关推荐
- 软件构造学习笔记ATD
在面向对象的编程中,ADT的编写十分重要,与传统的c语言不同,面向对象的编程更加商业化一点,所以保密需要做好,有点商业机密的感觉.如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示,避 ...
- 软件构造学习笔记-第九周、第十周
因为本周五开始五一假期,所以只有一节软件构造课.因为内容还属于创建模式.结构模式.行为模式.将该堂课的内容整合到本博客中.本周的重点是程序开发模式,在写代码之前首先充分考虑采用哪种模式更有利于开发.维 ...
- 软件构造学习笔记-第八周
本周重点是Liskov可替换原则.它要求父类和子类的行为一致性,子类要有更强的不变量.更弱的前置条件.更强的后置条件.在该原则的要求下,每个子类都可以对父类进行替换.这在开发过程中会带来极大的便利,在 ...
- 软件构造学习笔记(九)面向复用的软件构造技术
目录链接 Part I What is Software Reuse? Part II How to measure "reusability"? Part III Levels ...
- 哈工大软件构造2022笔记(持续更新----1)
Class 1 第0节的主要内容是讲课程要求: 实验占35分,个人博客占5分,期末考试占60分(闭卷) 在cms中加入课程:链接在老师发的ppt里面有,这里就不展示了. 实验要求: 在Java+Ecl ...
- 2020.03.04软件构造听课笔记
以下为2020年3月4日的软件构造听课中记录的知识点: 测试是负能量的表现:破坏.证错 再好的此时也无法证明系统里不存在错误 一个好的测试的特征: 1.能发现错误: 2.不冗余: 3.最佳特性最佳方案 ...
- 2020.04.15软件构造听课笔记
面向复用编程:开发出可以复用的软件 基于复用编程:利用已有的可复用软件搭建应用系统 复用的特点: 很大的适应性 降低成本和开发时间 充分的测试->高可靠 标准化.一致化 针对性不强->性能 ...
- 哈工大软件构造学习笔记1 Views and Quality Objectives of Software Construction
先要搞清楚软件构造的对象是什么,如何刻画,在关注如何构造. 1,Five key quality objectives of software construction 软件构造的五个关键质量目标 容 ...
- 哈工大2022春软件构造学习笔记1
课程概述 第一部分:软件构造基础 第二部分:ADT+OOP 第三部分:面向可复用性和可维护性的软件构造 第四部分:面向健壮性与正确性的软件构造 第一章 软件构造的多维度视图和质量目标 软件构造的多维度 ...
最新文章
- 贝叶斯统计的无信息先验和共轭先验
- Stanford UFLDL教程 从自我学习到深层网络
- 一站式学习Redis 从入门到高可用分布式实践(慕课)第六章 Redis开发运维常见问题...
- log4j2 无日志记录_在Log4j2中更好地执行非日志记录器调用
- Java 8:再见手册SQL,您好!
- HD-SDI光端机是什么?其性能特点和技术参数有哪些?
- python综合管理系统_Python-20 (信息系统-框架/循环/增删/综合应用)
- uniapp接收服务器消息,【教程】uniapp websocket实现消息推送
- kali linux2.0下MariaDB修改密码
- 我们去的地方一定会有屎
- 转:Mysql explain
- UVA10193 All You Need Is Love【进制+GCD】
- 第1章 神经网络的思想
- 微型计算机原理及应用课后习题答案,微型计算机原理及应用课后习题答案.doc...
- Kubernetes的Serializer解析
- R语言检验独立性:卡方检验(Chi-square test)和费舍尔Fisher精确检验分析案例报告
- AutoCAD 2021-2022
- 华为p50pro会搭载鸿蒙吗,华为P50Pro概念图:1亿像素4摄+鸿蒙OS,正反双屏尤其耀眼...
- 技术开放、平等普惠,蚂蚁金服ATEC科技大会闪耀狮城新加坡
- prev_permutation函数
热门文章
- mysql 整理碎片_mysql 如何去整理表数据,碎片整理
- python三维向量运算_设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘...
- 谷歌要求员工少讨论政治
- 统计学⑤——假设验证
- IP地址 子网掩码 网络号 主机号 网络地址 主机地址以及ip段/数字-如192 168 0 1/24是什么意思
- 前端学习 -- 什么是api
- C链表:“数形结合”让调试更快纠错
- Buf网络缓冲区(C++)
- 那些值得收藏的神奇的网站,使用RSS阅读器订阅喜欢的网站 --授人以鱼不如授人以渔...
- Python编辑器sublime text3环境配置