杨堃 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
经过三个月的学习,在老师的引导下,一步一步将一个so easy的命令行菜单小程序(skinny system)逐渐充实生长为一个具有可重用性的命令行菜单模块(full-fledge)成熟系统。
一个软件模块从skinnysystem到full-fledge的过程是一个不断修改,不断演化的过程。在这个开发流程中,我们要考虑诸多方面:代码的风格规范、模块化的设计、可重入函数的设计、线程安全的问题等等。只有处理好这每一方面的问题,才能够设计出优秀的代码结构。
结合软件工程这门课,以及实验楼上的亲自操作,我可以很快的把所学到的东西融入实践之中,而这又进一步加深了我对软件设计整个开发流程的理解。现对所学总结如下:
-
代码风格规范是一段代码是否优秀的最直观体现。简明、易读、无二义性是基本原则;缩进4个空格、行款100字符、类名、变量名的见名知意等是在编码过程中需要注意的细节。
-
一个代码的好坏,表现在代码是否具有良好的复用性,可靠性以及错误处理。而在这之中,模块化的设计思想是优化代码的关键武器。分离关注点,将代码分为业务逻辑层和数据存储层能够更好的实现包容变化。
-
接口定义了软件单元对外提供的服务,是实现代码高内聚,低耦合的关键。设计一个通用的接口要注意:参数的上下文信息、移除前置条件、简化后置条件。
-
Call-back函数调用机制是我在这次学习过程中最大的一个收获点,从前一直是采用call-in的函数调用机制。这次通过学习,深刻理解了call-back回调函数的机制以及具体的使用方法,它是实现kiss(keep it simple & stupid)的重要途径。
-
函数的可重入性和线程安全是一段代码能够多线程运行的重要保证,通过pthread_mutex添加互斥锁可以有效的将不可重入函数转变为可重入函数,为线程安全提供实现基础。
以下是多次实验的实验报告及相关代码,在这里做个整理,方便以后的学习:
-
实验一:
实验报告:https://www.shiyanlou.com/courses/reports/642481
实验代码:http://git.shiyanlou.com/sa615379/shiyanlou_cs122/src/master/hello.c
-
实验二:
实验报告:https://www.shiyanlou.com/courses/reports/643695
实验代码:http://git.shiyanlou.com/sa615379/shiyanlou_cs122/src/master/lab2/menu.c
实验报告:https://www.shiyanlou.com/courses/reports/655049#
实验代码:http://git.shiyanlou.com/sa615379/shiyanlou_cs122/src/master/lab3
4. 实验四:
实验报告:https://www.shiyanlou.com/courses/reports/681715
实验代码:http://git.shiyanlou.com/sa615379/shiyanlou_cs122/src/master/lab4
5. 实验五:
实验报告:https://www.shiyanlou.com/courses/reports/696366
实验代码:http://git.shiyanlou.com/sa615379/shiyanlou_cs122/src/master/lab5/lab5.1
6. 实验六:
实验报告:https://www.shiyanlou.com/courses/reports/746980
实验代码:http://git.shiyanlou.com/sa615379/shiyanlou_cs122/src/master/lab7