结对编程收获——UI真的没有那么简单
结对编程收获——UI真的没有那么简单
詹元成
初看作业要求,心里还有一点欣喜,不就是做一个UI嘛,拖拖按钮差不多就解决了(之前也确实做过一些简单的UI)。
但做到第三天的时候,开始感概——UI真的没有那么简单。
以下是我对本次结对编程、接口处理、技术学习的收获。(有兴趣的读者可以先阅读我们的UI界面博客 http://www.cnblogs.com/ustctp/p/8847361.html)
一、结对编程
(1)前期沟通很重要
因为我和伙伴并不是在同一个班或同一个寝室,两人一开始并没有合上拍。
我们就选用MFC还是QT、用哪种语言开发、谁做领航员谁做驾驶员等问题存在一定的讨论。这样的结果导致项目拖了两三天还没有开工。
后来觉得这样不行,我专门去了他寝室讨论了一个小时,就全部规划好PSP和具体分工,使得后面的结对编程效率一直很高,双方分工特别明确。
(2)各取所长效率高
由于结对编程组织性强,因此可以有效地利用各种资源,进行最佳的组合。比如在此次结对编程中,我的小伙伴有Java的GUI开发经验,而我对C++相对较熟,
我们得到了一个人编程体会不到的“各取所长”的优势。也就是说,当我们面对一个程序问题的实现方式时,如果其中一个人对某一些语句的书写很熟练而另一者不是很熟练,
那么熟练者可以快速书写代码,另一人在旁边积极提出有益的建议。这样,就较少出现个人编程过程中常有的“阻塞”情形,从而提升了编程的效率。
也正因如此,通过结对编程,我们俩的磨合速度很快,而且也很好的促额团队中的沟通交流。
(3)团队合作收获多
如果是一个团队进行软件开发,那么可以将软件的开发分为若干个部分,而每个部分由若干个2人小组共同开发。当然也不是所有的开发流程都需要结对编程,如果子项目的难度较低,
那么单人开发即可。比如我们的团队项目主要分为前端开发和后端开发,那么前端开发和后端开发中较难的开发部分可以用结对编程进行解决,而相对较简单的开发部分就由个人能力相对较强的同学完成。
二、接口处理
(1)处理好“三”组=处理好全部组
由于最初设计时没有明确的标准,导致一个组一个标准,可能有的UI组会说 “标准相近的还好说,标准差别较大的组对接起来真的是想死的心都有了。”当初老师没有规定标准,其实是想让大家尽快抢夺标准的制定权,这在实际的工业界也是一样的。在我扎扎实实对接了全部15组core后,抛开个别组API写得不是特别友好外,真的是只要对接好3组,其余就是流水线工作了。
以下就是三“种”API方式
1.lib +dll +h+string模式
这种模式是最标准的对接方式,我们只需要配置好lib、dll、h,、传参形式后,将string中的内容读入我的QT变量中便可完成。
2.lib +dll +h+txt模式
这种模式是也比较常见的对接方式,我们需要配置好lib、dll、h,、传参形式,打开txt中的内容,读文件中数据进入我的QT变量中可完成。
3.h模式
也有少数几个组采用这种对接方式,并不推荐这种方式,暴露了源代码。不过这种对接倒是最简单的,只需添加头文件,定义一下传参即可。
在我完成这三种模式的对接接口后,剩下的12组对接起来就比较快了。所以我想说处理好三组=处理好全部组。UI对接并没有想象中那么麻烦。
(附QT标准对接步骤)
1.把 .h 与 .lib/.a 文件复制到程序当前目录下,然后再把dll文件复制到程序的输出目录
2.在pro文件中,添加 .lib 文件的位置: LIBS+= -L D:/hitempt/api/ -l myDLL
-L 参数指定 .lib/.a 文件的位置
-l 参数指定导入库文件名(不要加扩展名)
3.在程序中include头文件
(2)对接的一些建议
一个良好的接口应该在一开始就设计好,然后大家统一好标准:给用户哪些部分,是用什么形式封装,传递参数的定义等诸如此类。
虽然说对接好三组就能完成全部对接,但对于UI组来说,因为API的五花八门,在此提出一些对接的建议。
core组在提交dll时一定要确保自己多次检查后程序无误,不然ui组总会怀疑自己的操作出了问题从而浪费大量时间用来查错;
三、技术学习
总的来说,这次结对编程学到了许多知识,“QT七天——从入门到精通”。
下面是我对QT的一些理解
(1)qt creator报错 error: C1083: 无法打开包括文件:“Untitle”: No such file or directory
这其实并不是代码错误,而是编译器本身的问题,采用如下方法解决。
清理下项目。
菜单——build——run qmake
一定要执行qmake,不能只清理项目!!!!
(2)定时器 QTime类
用好这个类并不是特别简单的,但有没有快速上手的办法呢,有的
微机原理大家都学过,通过观察可以发现,这个定时器和其中的定时中断有异曲同工的地方。
会写定时中断,仿照一下,确实能快速使用好QTime。
(3)成员变量和局部变量
对可能会修改的对象定义为成员变量,对只用一次的对象设为局部变量;所有MainWindow 类内定义的对象全部建立在堆上,所有主函数新定义的对象全部建立在栈上,
这样使用bug率最低。
(4)中文字符
其实也是编码方式的问题,解决如下
改变字符编码
// 采用文字编码转换类QTextCodec QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8")); //如果是Qt4版本的,还可以设置tr进行中文转换 QTextCodec::setCodecForTr::QTextCodec::codecForName("utf-8")); //Windows下,一般情况下设置gb18030就可以显示中文了
总结
这次结对编程还是收获颇丰的,每一次作业,自己能有很多提高,就是最好的收获。