《高级软件工程》实验作业总结-SA20225179-何百涛
《高级软件工程》实验作业总结-SA20225179-何百涛
一、实验总结
1. 编译神器VSCode
在windows下安装了VSCode,并且根据教程完成了C/C++开发环境的配置,并且安装了相关组件。熟悉了VSCode的基本操作以及快捷键,还熟悉了用VSCode写C/C++代码并进行代码调试。对于VSCode的感受是其轻量级,进程隔离的插件模型,十分方便与强大。而且使用git功能十分方便。
2. 五大场景玩转git
在windows下安装了git,分别在git bash上和VSCode中熟悉了如何使用git,熟悉了如何使用git命令,完成了五个场景的实现。并且在本地记录了关于git的使用笔记。
感受:git是一个版本控制的一个十分实用且常用的工具,而且其与GitHub的交互也十分方便。
3、正则表达式的使用
根据正则表达式 – 语法 | 菜鸟教程 (runoob.com)学习了正则表达式,并且尝试在VSCode中使用正则表达式的字符匹配进行搜索。
学习了使用vim文本编辑器,并在本地记下了使用vim的各种操作的笔记:
感受:正则表达式是一个十分有用的工具,在字符匹配,字符搜索及替换十分方便,在应用开发也有应用场景,如注册账号密码对输入的限定等。当然,格式太多,繁杂,记忆需要一定时间。vi、vim文本编辑器是在没有图形界面时,只能用命令行进行文本编辑,写代码时的一个十分必要的工具,也是一些专业大牛软件工程师十分喜欢的编辑器,在熟悉一些基本命令后,使用起来也是比较方便的。
4、menu菜单实现
学习了PPT的内容以及观看了对应的孟老师的视频,学习了开发一个应用程序的过程以及编程规范,了解如何实现命令菜单,了解了如何从一个小的tiny system开始慢慢成长为一个full-fledge的成熟系统的思想,了解了如何进行模块化,也了解到如何使用callback机制。颇有收益。
5、利用VSCode的drawio插件绘制UML例图
感受:VSCode不愧是宇宙第一IDE,可以安装drawio插件进行UML设计,流程图设计等,而且里面的作图元素众多,可以生成png、svg等格式,十分方便
6、实验验证软件编码中的一些特殊机制
#include<iostream> #include<vector> #include<algorithm> using namespace std; //-----回调函数 int Hello() // Callback Function { printf("Hello, this is Hello \n"); return 0; } void Handle(int (*Callback)()) { cout << "Entering Handle Function." << endl; Callback(); cout << "Leaving Handle Function." << endl; } //------多态 class A { public: A(){} virtual void foo() { cout<<"This is A."<<endl; } }; class B: public A { public: B(){} void foo() { cout<<"This is B."<<endl; } }; class C: public A { public: C(){} void foo() { cout<<"This is C."<<endl; } }; /* ------异步调用 function f1(func){ setTimeout(function(){ for(var i=0;i<100;i++){ console.log(i); } func(); },0); } function f2(){ console.log("f2"); } f1(f2); console.log("程序末尾"); */ /* ------ 闭包 function makeFunc() { var name = "Mozilla"; function displayName() { alert(name); } return displayName; } var myFunc = makeFunc(); myFunc(); */ int main() { //--------回调函数 printf("Entering Main Function. \n"); Handle(Hello); printf("Leaving Main Function. \n"); // -------多态 A *a = new B(); a->foo(); a = new C(); a->foo(); // ------- lamda函数 vector<int> vec({3, 5, 6, 1, 2, 4, 9, 8, 7}); int sum = 0; sort(vec.begin(), vec.end(),[&sum](int x, int y)-> bool{ return x > y;} ); for_each(vec.begin(),vec.end(),[](int x){cout << x << "\t"; } ); cout << endl; return 0; }
实验中,验证了C++中的多态、回调函数、以及lambda函数机制
由于本人并没有学习过JavaScript,因此对JavaScript中的异步调用以及闭包,并没有进行验证。
而在Go语言中,也有闭包的概念,因此使用了go语言进行验证:
package main import "fmt" func getSequence() func() int { i:=0 return func() int { i+=1 return i } } func main(){ /* nextNumber 为一个函数,函数 i 为 0 */ nextNumber := getSequence() /* 调用 nextNumber 函数,i 变量自增 1 并返回 */ fmt.Println(nextNumber()) fmt.Println(nextNumber()) fmt.Println(nextNumber()) /* 创建新的函数 nextNumber1,并查看结果 */ nextNumber1 := getSequence() fmt.Println(nextNumber1()) fmt.Println(nextNumber1()) }
二、课程思考与建议
课程内容十分全面,在课程的前几章比较实用,对以后工作有一定用处。课程的后面几章,较为抽象,但谈到的问题在本人在软件开发或者做项目过程中也是会经常遇到的问题,关于软件中的特殊机制以及设计模式这些知识也是我以前所没有接触到,或者是接触到但不理解的,学习这些知识收益匪浅。而且老师在将软件工程过程中所引入的哲学思考,十分开拓人的思维,使本人对软件工程有新的认识,在方法论上有很大的指导意义。