你的位置:首页 > ASP.net教程

[ASP.net教程]软件工程(C编码实践)学习总结及心得


徐礼超  原创作品转载请注明出处:http://www.cnblogs.com/xulichao

《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006

一、实验一:写一个Hello word小程序

实验过程:

  1. 进入实验目录 主要使用的命令:更改目录cd ; 查看当前目录ls ; 新建目录mkdir
  2. 进入vi编辑器 主要使用的命令:进入vi hello.c ; 插入 i ; 出去 esc ; 保存退出 :q/:wq
  3. 编译运行代码 主要使用的命令:编译生成可执行文件gcc -o hello hello.c
  4. 用git提交代码 主要使用的命令:git add ; git push

实验总结:

 

  1. 掌握了linux基本命令,包括cd、ls、mkdir等命令
  2. 掌握了vim基本命令,包括vi使用,一般模式、编辑模式、命令模式等模式切换
  3. 掌握了markdown的书写,包括标题,插入链接、插入图片、两次enter

实验报告:https://www.shiyanlou.com/courses/reports/644985

实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab1

 

二、实验二:命令行菜单小程序

实验过程:

1.参照视频中的具体实验过程

2.进入实验楼,在目录下创建lab2

3.编写程序代码,并完成实验报告

实验总结:

  • 缩进4个空格
  • 变量命名采用lowCamel风格
  • 类型/类/函数名用Pascal风格
  • 类型/类/变量名用名词或名词组合
  • 函数名用动词或动宾短语
  • 行宽小于100字符
  • 括号清楚地表示逻辑优先级
  • 所有{和}独占一行,且成对对齐
  • 不要把多个语句和多个变量定义放在同一行
  • 注释、文件名、路径等用英文ASCII字符,不要用中文和特殊字符
  • 不要解释程序如何工作(How),要解释程序做什么(What),为什么这么做(Why),需要特别注意的地方

实验报告:https://www.shiyanlou.com/courses/reports/661548

实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab2http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab2

 

三、实验三:内部模块化的命令行程序内部模块化的命令行程序

实验过程:

  1. KISS(keep it simple and stupid)一个函数或者方法只做一件事
  2. Using design to frame the code 设计与实现保持一致
  3. Including pseuducode
  4. 不要和没陌生人说话
  5. 合理运用Control Structure和Data Structure简化代码
  6. 一定要有错误处理 goto 语句的用法 用数据结构简化代码

实验总结:这次的实验感觉总体难度较之前有提高,刚开始的代码的编写遇到很多错误,包括在Linux C的一些基础知识,比如函数指针等,但是这些都是可以百度到答案的,我们要耐心的根据提示的错误信息找出错误的代码,加以修正。

实验报告:https://www.shiyanlou.com/courses/reports/686392

实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab3

 

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

实验过程:

  1. 用可重用的链表模块来实现命令行菜单小程序,执行某个命令时调用一个特定的函数作为执行动作
  2. 链表模块的接口设计要足够通用,命令行菜单小程序的功能保持不变
  3. 可以将通用的Linktable模块集成到我们的menu程序中
  4. 接口规范

实验总结:本次实验最大收获的是学会了将数据结构抽出来独立成一个通用模块的技巧,老师演示的linktable模块,与具体的数据类型无关是一个通用的链表模块,我们要用到模块时,再具体定义数据类型。这样就可以在C语言没有泛型的情况下尽最大可能复用数据结构的代码,这是非常厉害的技巧。本次实验的收获是这四次实验以来最大的。

实验报告:https://www.shiyanlou.com/courses/reports/701963

实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab4

 

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

实验过程:

  • 找BUG

关于quit不能执行的bug出在:在设计函数SearchLinkTableNode时,其中的查找条件

       while(pNode != pLinkTable->pTail)应改为while(pNode != NULL)

       因为在初始化时quit正好处在plinkTable->pTail位置,不满足循环条件。

  • 学习callback机制

      学习利用callback函数参数使Linktable的查询接口更加通用。

  • 信息隐藏

        当我们向用户提供接口的时候,要学会注意接口信息的隐藏,只提供给对方必要的信息,而不能完全暴露自己的信息,以免被别人攻击,修改自己内部信息而造成不可预估的后果。

实验总结:

  1. 有关args的使用有点晕晕的,并没有完全理清楚其中的机制,特别是后来在testlinktable.c程序中遇到了点麻烦,由于多了一个参数,但这个参数并没有使用,所以有点怪怪的。
  2. 关于cp命令也有点问题,我把lab5.1拷贝进入了lab5中,其实我是想把它作为lab5的;还有,怎么修改文件名。

实验报告:https://www.shiyanlou.com/courses/reports/715603

实验代码:http://git.shiyanlou.com/chaoge282/shiyanlou_cs122/src/master/lab5

 

六、实验六:小测验(略)

 

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

实验过程:

  • Makefile工程文件

执行从all之后开始 makefile也是工程文件,也需要维护 可以手工写makefile,也可以用automake clean也是默认需要的,删除备份文件

  1. make == make all
  2. make clean 支持带参数的复杂命令的方法
  • menu子系统设计接口
  1. 由于menu函数是提供给用户使用的,它只需要向外提供一个执行命令的方法和一个初始化方法。
  2. 它并不需要其他的比如create delete insert等支持多种类型的操作。
  3. 故只需要暴露需要的部分给用户上层使用menu即可。
  4. 代码支持命令行参数输入,有些类似于main函数的argc argv的实现

实验总结:

  1. 熟悉了Makefile,懂得如何写程序更加有套路,编译程序更方便。
  2. 这次学会如何将menu设计为可以重用的子系统,也知道了利用命令行参数argc/argv来处理命令参数。
  3. 大概了解了函数getopt的用法,虽然基本实现了复杂命令参数,但是getopt函数里的定义的几个全局变我并不太清楚其功能,在后续的编码中,应该继续完善。

实验报告: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主程序设计成接口,让其能重用,这整个过程就在改变着我们原有的程序设计思维,让我们认识到软件是高于程序的存在,真的受益匪浅!!