高级软件工程(C编码实践篇)学习心得

来源:互联网 发布:windows nt系统 编辑:程序博客网 时间:2024/06/05 16:12

刘青+ 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006 

实验报告链接

实验一:写一个hello world小程序

实验二:命令行菜单小程序V1.0

实验三:内部模块化的命令行菜单小程序V2.0

实验四:用可重用的链表模块来实现命令行菜单小程序V2.5

实验五:用callback增强链表模块来实现命令行菜单小程序V2.8

实验七:将menu设计为可重用的子系统

课程学习总结

一:课程简介

学习git的使用方法,注册github账号,创建自己的仓库。安装ubuntu虚拟机,了解linux终端的命令cd、ls、mkdir等等,熟悉在linux环境下运用vim编写代码。

二:代码风格规范

学习缩进、命名、注释等代码编排的风格规范。代码风格的原则:简明、易读、无二义性。类型/类/函数名用Pascal风格、变量命名采用lowCamel风格、缩进4个空格,括号清楚地表示逻辑优先级,函数名用动词或动宾短语,类型/类/变量名用名词或名词组合,所有大括号独占一行,且成对对齐,注释、文件名、路径等用英文ASCII字符不要用中文和特殊字符不要把多个语句和多个变量定义放在同一行等等。

三:基本的模块化设计
将程序内部进行模块化,设置接口,使程序更加逻辑清楚;KISS:一个函数或一个方法,只做一件事。扩展开来,在设计上,一个系统、一个子系统、一个模块、一个类等也只做一件事; 设计与实现保持一致;不要和陌生人说话:一个对象应当对其他对象有尽可能少的了解;运用Control Structure和Data Structure简化代码;一定要有错误处理。

四:可重用模块的接口设计
可重用模块的接口设计,要达到高内聚低耦合的设计目标,以方便重复使用;常见接口设计规范有:参数化上下文,生死相依原则,移除前置条件,简化后置条件等,还需编写开发者指南,供用户阅读使用;关于接口通用,并不是越通用越好,因为过于通用需要考虑很多情况,导致模块臃肿、效率低下,因此应该不要太具体也不要太简略。


五:可重用模块的接口设计(callback函数)
可以用callback函数实现多态以便接口更加通用,实现信息隐藏,使接口更加通用而避免考虑许多情况,用户使用起来也更简洁。但callback的做法是把某些实现丢给了用户,也算造成了一些不必要的麻烦,应该尽量少用。注意信息隐藏,一般地说,定义和实现需要隐藏,而声明和接口暴露给用户。

六:函数的可重入性(reentrant)及线程安全浅析
可重入函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入函数不能由超过一个任务所共享,除非能确保函数的互斥。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。线程安全:在代码中使用一个互斥量实现线程安全。可重入的函数不一定是线程安全的;不可重入的函数一定不是线程安全的。

七:子系统的可重用设计
将menu设计为可以重用的子系统,利用命令行参数argc/argv来处理命令参数,由于menu函数是提供给用户使用的,它只需要向外提供一个执行命令的方法和一个初始化方法。通过将其中的两个功能变成函数放在menu.c中,然后在test.c中使用函数添加节点,很好的实现了可重用。makefile:直接make,不用gcc。

学习心得总结

最大收获
开学以来,跟随孟宁老师的线上线下课程,学习到了许多的软件工程方知识,对软件工程有了一个系统性的了解,为以后的深入学习打下基础。从最初的hello world小程序来熟悉实验环境与过程,到最后实现一个可重用的menu小程序,在一个个作业的实现过程中,不仅锻炼自己代码书写的规范, 掌握到代码的书写原则,更开始以软件工程的思维来构建一个代码,熟悉了模块化设计思想,这些对我之后的学习和实践都有着深刻的指导意义。
选修孟宁老师的高级软件工程,我对软件开发的理解更加深入。一个好的程序不仅代码规范,美观,易读,更重要的是要可重用。在我们开始写一个程序前,必须先进行设计,主要考虑怎样让这个程序在功能健全的同时兼具代码的美观和易读,同时当功能需求变化时以最少的代码更改量来修改程序。我现在意识到,软件工程对于程序的重要性是不可或缺的。


最大遗憾
对我来说,最大的遗憾就是课时太短,在对软件工程的逐渐认识之中戛然而止,意犹未尽,课后任需要深入的学习。
最后,感谢孟宁老师费尽心思的用不同于传统的方式教授我们知识,同时感觉两位助教学长的辛勤付出。