基本的模块化设计
程序 = 数据结构 + 算法
软件 = 程序 + 软件工程
经过基本Modularity (also called separation of concerns)设计的代码
模块化的思想和命令行菜单的实现范例(开源社区中常见的写法)
基本模块化的写法
代码设计中的一些常见方法
- KISS(keep it simple & stupid)
- using design to frame the code(matching design with implementation)
including pseuducode - 不要和陌生人说话原则
- 合理利用Control Structures、Data Structures来简化代码
- 一定要有错误处理
“开-闭原则” 对于扩展是开放的,对于修改是封闭的。
模块复用和系统复用
软件的功能性需求和非功能性需求
非功能性需求,比如说提高软件的效率。
- 软件的业务逻辑,业务逻辑层
- 对菜单数据的存储,数据存储层
功能相关 menu
数据操作相关
将系统模块放在不同的源文件里面
把程序拆分成三个文件
linklist.h
linklist.c
menu.c
menu program放在menu.c
数据结构和操作放在linklist.h中
具体函数的实现放在linklist.c中
可重用模块的接口设计
通用Linktable模块的接口设计
将通用的Linktable模块集成到我们的menu程序中
定义接口 - “天王盖地虎,宝塔镇河妖”黑社会接头也设计接口的!
- 接口规范
- 内聚和耦合
- 通用原则
通用链表模块的接口设计
模块化的好处:包容变化
拿来主义 VS 从头干起
参数化上下文
开发者指南
将通用的LinkTable集成到我们的menu程序中
本地化外部接口(Localize input and output)
代码风格规范,对于我个人觉得以下部分需要多注意:
代码缩进4个空格
代码给谁看?程序员
代码风格规范在团队协作和交流中有重要作用。
行宽以前80,现在100
代码风格的原则:简明、易读、无二义性
不要把多条语句和多个变量定义放在同一行
注释使用英文,不要用中文,保持源代码是ASCII字符格式文件。
模块化思想 :
”开-闭”原则,对扩展是开放的,对修改是封闭的。
业务逻辑层和数据存储层。
将系统模块放在不同的源文件。
代码设计中的一些常见方法:
KISS(keep it simple & stupid)
using design to frame the code(matching design with implementation)
including pseuducode
不要和陌生人说话原则
合理利用Control Structures、Data Structures来简化代码
一定要有错误处理
接口的五个要素:
Purpose 比如函数名表明了接口的目的
Preconditions 比如接口函数调用前已经做好了哪些准备
Protocols 比如参数和返回值的类型,指针指向的数据格式等
Postconditions 比如返回值、printf函数接口的效果是屏幕显示了字符串
Quality attributes 比如接口函数的执行时间限制在1s内
前置条件和质量属性是接口的两个隐含属性。
可重入和线程安全
可重入函数和不可重入函数,以及它们和线程安全之间的关系
Makefile工程文件
make 从Makefile的第一个目标all开始执行
Makefile文件不支持空格代替Tab键
Makefile工程文件也是代码,也要考虑可维护性。