结对编程——带UI的小初高数学学习软件(又名 与搭档斩妖除魔历险记)

初遇结对编程,对其中的点滴真的是可以说完全不了解。结对编程?如何去做?怎么去做?又会有什么结果?一切,起于未知。而在从个人项目到结对编程项目转换的初始,就开始体会到结对编程项目的细微好处了。首先是相互之间了解代码,在这个过程中,我们开始了解对方的思路,开始明确对方的想法与解题方法。有的地方,我们不谋而合,有的地方,他更胜一筹,有的地方,我可能有些特色,有的地方,我们都互有缺陷……没有人的代码是完美的,也没有人的代码一处不错,我们都互有优缺点,我们都互有需要学习和可以被学习的地方……我们,互相在学习与探讨中成长。了解搭档代码的过程,对自己有着很好的提升作用。之于我,在理解的过程中明白了自己的不足,明白了自己对需求理解的不透彻,也明白了不同人对于同一需求的不同理解……而这一切,不过是结对编程初起步。我们才刚刚开始。

项目的开启,源于一个词——复用。从功能实现上来说,Partner C的个人项目代码对功能实现的解读对我真的是启发很大。之前的解读博客提及他的题库思路很惊艳,所以我们选择他的代码作为复用的基础和框架。在复用的过程中,我们也认识到分模块编写代码及简约一个函数中包含内容的重要性与必要性。代码复用,简单来说就是,你把一个功能写成一个模块, 以便当再次需要相同功能的时候,可以直接使用,而不用重新开发。函数,继承等,大抵都是运用了这种思想。而代码重用,也是面向对象编程的一个突出部分,当然,亦是面向对象与面向过程两种编程的不同所在。

下面将从结对编程过程中遇到的主要困难进行思考:

1.题库

题库思想非常符合复用的要求,题库生成后再从其中抽取题目组成相应试卷,相较于当次运行总程序当次生成题目的思想来说,节约了许多资源,加快了运行效率,作为一个完整的模块也十分方便调用。

但原始的题库代码并非完美无缺,我们花了和大的力气去完善题库代码,让它能够更好地适应需求。题目生成的代码在我个人项目的基础上进行了汇总和合并,主要运用了栈的数据结构。先对算式string进行改写,将所有的运算符改写为char型,尝试switch(char),对数字进行相应操作,要注意双目运算和单目运算的差别。读取和存储算式用了一个数字栈和一个符号栈,运算时对符号进行了优先级排序,优先级从高到低为:( )> sin=cos=tan=√=^2 > / > * > - > +,原先我们是将乘除赋予了相同的优先级,忽略了栈后进后出的特点,除法存在被除数和除数的区别,几次调试后发现了这个漏洞,进行了修改,加减也是如此。栈需要一个栈顶只能来控制运算,最为重要的就是栈顶指针的沿用和清零实际,只能说是实践出真知。

2.UI

我们选择了 QT进行开发,由于主代码是C++所以QT平台能够提供一个较好的UI实现。这也是一个QT速成的励志故事。

QT提供了较为挺人性化的跨平台开发方法,但是短时间上手也让我们掉了不少头发。入门教程之后,我们开始尝试第一个自建项目。项目主要是三部分头文件.h,函数调用.cpp,UI界面。因为QT有自己的编程逻辑,所以我们花了挺大的力气将我们的代码分化成界面模式。UI界面先是用图形界面构建大致框架和组件,将需要后继操作的组件转到槽,之后将相应函数完善。这期间真是特别锻炼了面向对象的思维,oop勇敢飞,程序猿(媛)永相随。也是有了一些摸索界面之间的关闭与转到连接,函数调用等的心得。探索UI界面的背景、字体、按键、标签、输入框、密码是否可视等,也是十分有趣的过程。

3.短信

前两部分大致完成后,我们进入了一个全新的领域,注册短信的发送。之前并没有想到提供的众多接口之中就是没有C++,搜寻了很多云服务,真的是找不到,我们只好另想办法。Java接口还算比较容易实现,也有完善的jdk,我们就决定用C++通过system帮助调用jar,jar完成与服务器的连接。语言不同,环境相异,这样的调用真的长知识。

4.打包

在最初运行QT项目的时候就有关于运行环境的报错,明明电脑中有相应的dll文件却识别不了。完善环境后,打包是我们纠结了很久的问题。尽管将dll文件放入了项目所在文件夹,但是打包后到一个没有安装QT的电脑上,就无法运行,显示也不是缺少dll文件或者无法识别的问题。其实这过程中我一直对QT32位64位的各个控制台版本存疑,但没有想到那个方向,之后多次核对QT版本是才发现当初建项目时默认了qt 5.13.1 MSVC 2017 32bit版本,所以将项目打包时需要利用这个控制台完善项目运行环境。从之前800M的压缩包到之后的24M,坎坷可想而知。

一点心路历程:

我们在结对编程的过程中学习了很多,补充了许多知识。我也借机和搭档多多学习,从而掌握一些关于项目的思考。从需求文档的解读,到题库的使用,再到CPP向QT的转换;从面向过程编码,到面向对象思维,我们经历了很多,也从中和网上的大神们,和自己的搭档学习了很多。在这次结对编程的过程中,我们从头开始,一切基于个人项目,或者对其进行扩展与重构,或者对其进行改写,甚至重写,我们了解了其中的几个研发职位的职能,基于实践去加深了解与印象,让自己在“做中学”,为自己未来的发展奠基。两人之间的合作,相互之间的帮助,向对方不断学习,在完成项目的过程中不断完善自己。心态很重要,前期的我真的有些焦虑,希望多多经历和成长吧,充实自己的工具箱,也拥有更加沉稳踏实的心态。

猜你喜欢

转载自www.cnblogs.com/doudoudoujiang/p/11605065.html
今日推荐