徐礼超 原创作品转载请注明出处:http://www.cnblogs.com/xulichao
《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
一、实验一:写一个Hello word小程序
主要是熟悉实验楼环境,初步了解代码规范,熟悉linux基本命令,包括cd、ls、mkdir等命令,vim基本命令,包括vi使用,一般模式、编辑模式、命令模式等模式切换,markdown的书写,包括标题、插入链接、插入图片、两次enter等。
实验报告:https://www.shiyanlou.com/courses/reports/644985
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab1
二、实验二:命令行菜单小程序
实现了命令行的小程序,最主要的学习到很多代码规范,包括:
- 缩进4个空格
- 变量命名采用lowCamel风格
- 类型/类/函数名用Pascal风格
- 类型/类/变量名用名词或名词组合
- 函数名用动词或动宾短语
- 行宽小于100字符
- 括号清楚地表示逻辑优先级
- 所有{和}独占一行,且成对对齐
- 不要把多个语句和多个变量定义放在同一行
- 注释、文件名、路径等用英文ASCII字符,不要用中文和特殊字符
- 不要解释程序如何工作(How),要解释程序做什么(What),为什么这么做(Why),需要特别注意的地方
实验报告:https://www.shiyanlou.com/courses/reports/661548
三、实验三:内部模块化的命令行程序内部模块化的命令行程序
将程序内部进行模块化,设置接口,使程序更加逻辑清楚
- KISS(keep it simple and stupid)一个函数或者方法只做一件事
- Using design to frame the code 设计与实现保持一致
- Including pseuducode
- 不要和没陌生人说话
- 合理运用Control Structure和Data Structure简化代码
- 一定要有错误处理 goto 语句的用法 用数据结构简化代码
实验报告:https://www.shiyanlou.com/courses/reports/686392
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab3
四、实验四:用可重用的链表模块来实现命令行菜单小程序
将数据结构抽出来独立成一个通用模块的技巧,
linktable模块与具体的数据类型无关,是一个通用的链表模块,我们要用到模块时,再具体定义数据类型。这样就可以在C语言没有泛型的情况下尽最大可能复用数据结构的代码,这是非常厉害的技巧
- 用可重用的链表模块来实现命令行菜单小程序,执行某个命令时调用一个特定的函数作为执行动作
- 链表模块的接口设计要足够通用,命令行菜单小程序的功能保持不变
- 可以将通用的Linktable模块集成到我们的menu程序中
- 接口规范
实验报告:https://www.shiyanlou.com/courses/reports/701963
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab4
五、实验五:用callback增强链表模块来实现命令行菜单小程序
学习利用callback函数参数使Linktable的查询接口更加通用。
当我们向用户提供接口的时候,要学会注意接口信息的隐藏,只提供给对方必要的信息,而不能完全暴露自己的信息,以免被别人攻击,修改自己内部信息而造成不可预估的后果。
有关args的使用有点晕晕的,并没有完全理清楚其中的机制,特别是后来在testlinktable.c程序中遇到了点麻烦,由于多了一个参数,但这个参数并没有使用,所以有点怪怪的。
实验报告:https://www.shiyanlou.com/courses/reports/715603
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab5
六、实验六:小测验(略)
七、实验七:将menu设计为可重用的子系统
将menu设计为可以重用的子系统,利用命令行参数argc/argv来处理命令参数,由于menu函数是提供给用户使用的,它只需要向外提供一个执行命令的方法和一个初始化方法。
Makefile,这个我是新学到的,真的很好用,程序更加有套路,编译程序更方便,相信以后会越来越多的用到,。
大概了解了函数getopt的用法,虽然基本实现了复杂命令参数,但是getopt函数里的定义的几个全局变我并不太清楚其功能,在后续的编码中,应该继续完善
- Makefile工程文件
- make == make all
实验报告:https://www.shiyanlou.com/courses/reports/748120
实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab7
心得体会:
历经11周,软件工程(c编码实践篇)这门课程终于圆满结束了(此处应该有掌声~)
学习完这门课,我对软件设计开发有了一个新的认识,以前总认为软件就是写程序,开发软件项目就是大家一起写程序,然后拼在一起实现最后的功能,但现在,我才知道我对软件有多么肤浅的认识,软件开发远比单单写程序来的高端,来的复杂。下面就从本实验说起。
实验是从最熟悉的hello word写起,当然,这个实验主要是让我们先了解实验环境,了解代码规范的一些基础内容,为后面的学习打基础。接着一步一步做实验,不知不觉将命令行菜单的一个小程序慢慢地变成了一个命令行的小系统,在这个过程中,尽管老师一直强调我们主要考察代码规范,可是我学到的又岂止是代码规范,还有很多能一直受用的知识,linux命令,markdown的书写,4空格缩进,变量名和函数名各种风格,{和}独占一行,且成对对齐,如何简化代码,如何保持设计与实现一致,如何设计规范的接口,如何让模块通用,如何提供皆空的同时隐藏信息,如何用makefile编译工程文件等等。。。。。这对以前只注重功能实现的我来说无疑是一个很好的学习过程和提高过程。
软件=程序+软件工程!!构建之法如是说,我深表赞同,一个好的程序我觉得不仅代码够规范,可读性够强,还要能可再利用,写程序之前应该先好好设计程序,怎么能让这个程序既实现功能,又美观,可读性强,同时以后遇到相似的问题还能继续用,现在回头想想,我们本次的实验解决的就是这个问题,在做实验的过程中老师提的要求就是在规范我们的程序设计,从一开始只是实现命令行输出功能,中间贯穿实验的代码格式和规范,到最后将menu主程序设计成接口,让其能重用,这整个过程就在改变着我们原有的程序设计思维,让我们认识到软件是高于程序的存在,真的受益匪浅!!