“聂健 + 《软件工程(C编码实践篇)》
MOOC课程http://mooc.study.163.com/course/USTC-1000002006 ”
软件工程的理解及学习软件工程(C编码实践篇)的心得:
记得第一次做线上作业的时候,第一次接触到github,就出现了不少问题。 虽然现在来看,只是敲几行命令的简单操作,但是在初次接触的时候确是一件很麻烦的事。自己是转专业的学生,只是在大一的时候上过简单的C语言课程。在代码书写的时候没有太多的书写规范意识:想到哪写到哪,代码命名一般选取单个字母简单命名。在两个月的线上课程学习过程中,也学到了很多。开始有了代码的规范意识,工程意识。当然在学习的时候也是存在不少困难,难以跟上节奏,不过最终坚持学习。对软件工程有一个大概的了解。
实验报告:
实验一:写一个hello world小程序
报告链接:https://www.shiyanlou.com/courses/reports/1290426
内容简介:
第一次实验内容是在linux系统编写一个hello world程序,并将代码上传到github中去,在这个过程就感觉就比较陌生。花了几天终于完成好。
实验二:命令行菜单小程序V1.0
报告链接:https://www.shiyanlou.com/courses/reports/1291540
内容简介:
实现一个命令行的菜单小程序,执行某个命令时调用一个特定的函数作为执行动作,实现的命令个数不少于8个;
类似ftp的help目录或者bash的help目录;
程序循环、接收用户的命令,如help、others等命令;
可以广泛通用的命令行菜单子系统组件,可方便地定制而嵌入到其他系统;
这次实验需要注意书写规范,代码也慢慢开始变的长。比如缩紧4个空行。大括号配对等问题。
实验三:内部模块化的命令行菜单小程序V2.0
报告链接:https://www.shiyanlou.com/courses/reports/1293434
内容简介:
遵守代码风格规范,参考借鉴代码设计规范的一些方法;
代码的业务逻辑和数据存储使用不同的源文件实现,即应该有2个.c和一个.h作为接口文件。
这次开始使用结构体数组来实现链表功能。需要一定的c语言功底了。才能进行比较好的完成功能,而由于基础薄弱,所以过程比较坎坷。
实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
报告链接:https://www.shiyanlou.com/courses/reports/1295328
实验内容:
用可重用的链表模块来实现命令行菜单小程序,执行某个命令时调用一个特定的函数作为执行动作;
链表模块的接口设计要足够通用,命令行菜单小程序的功能保持不变;
可以将通用的Linktable模块集成到我们的menu程序中;
接口规范;
本次实验中使用了类似多态的思想来对链表进行查找等方式。对前一次实验进一步改进。
实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
报告链接:https://www.shiyanlou.com/courses/reports/1298696
内容简介:
给lab5-1.tar.gz(在实验楼Linux虚拟机环境下~/se_files/目录下)找bug,quit命令无法运行的bug
利用callback函数参数使Linktable的查询接口更加通用
注意接口的信息隐藏。
实验六:函数的可重入性(reentrant)及线程安全浅析;
实验内容简介:
这次任务的过程是进行测试,没有实验作业。由于自己的粗心,做错了一道会的题目,感觉还是很心疼的。不过通过这次小测试,对函数的可重入的基本概念理解的更为深刻,多线程编程在现代的编程中是一过很常见的事情,几乎没有商业程序不需要用到多线程。经过本部分课程的学习能过为以后的学习以及工作生涯打下良好的基础。
实验七:将menu设计为可重用的子系统
报告链接:https://www.shiyanlou.com/courses/reports/1304020
内容简介:
为menu子系统设计接口,并写用户范例代码来实现原来的功能;
使用make和make clean来编译程序和清理自动生成的文件;
使menu子系统支持带参数的复杂命令,并在用户范例代码中自定义一个带参数的复杂命令;
可以使用getopt函数获取命令行参数。
这次实验的过程中需要用到Mackfile来实现命令,这是一个在linux系统下很实用的脚本,为开发者带来方便。同时在设计接口的过程中,需要注意信息的隐藏。既不要设计的太具体也不要太抽象。
总结:
(1)实现是对linux系统更为熟悉,熟悉了该系统的三大模式,一般模式,编辑模式,命令模式。输入vi便可以进入到一般模式,在按i可以进入到编辑模式,按Esc退回到一般模式,在按shift+;可以进入到命令模式。输入wq可以写并退出。以及学习一些gcc、tar解压缩、在vim中的拷贝以及粘贴操作。并学会在该系统下上传文件到github中去。
(2)对github的使用和功能有一定的了解。这个应用会有来自世界的许多程序员的支持。将自己书写的优秀代码上传上去。对以后的学习和开发过程带来需要帮助。学习别人的代码如何书写,以及如何实现的。
(3)最重要的是,通过孟宁老师的视频可以学习很多软件设计的思想。
代码设计规范:
KISS:一个函数或方法只做一件事。
using dessign to fame the code
不要和陌生人说话原则。对传递来的参数进行错误判断。
合理通过control structures,data structured来简化代码
一定要有错误处理。
软件设计的六个原则:
模块设计 接口 信息隐藏 增量开发 抽象 一般化
各个原则又有许多的具体思想。比如在模块化中,耦合性和内聚性是对模块设计的评定标准。接口又有五中分类,该课程中强调了callback function的使用,以及如何更通用,参数化上下文, 移除前置条件,简化后置条件等。
(4)在课程中,学习了线程和进程的概念。以及如何在程序中的具体实现。了解了函数的可从入性,线程安全等方面问题。可重入的函数不一定是线程安全的,这需要在以后的代码设计中警惕。
网友评论