结对编程收获
娄雨禛 PB16060356
一、UI设计部分
我们的UI设计本着“易用、至简”的原则,在界面设计上下尽了工夫。底层设计主要由康鑫实现,外部包装主要由我实现。我们两个的配合非常好,问题也都互相交流。希望这样的合作能继续进行下去。
在UI设计的过程当中,我们碰到过以下几个问题,它们有的已经找到原因被解决,有的虽然被解决却没有找到根本的原因。
1.在对接过程中,我们用的是DLL隐式调用。DLL对我们来说是完全陌生的,也是从头学起。在Qt添加DLL文件进行编译时,有时会碰到许多莫名其妙的错误一直存在,比如“找不到core.lib”,而我们的确吧这个文件加入进来了。这个时候,唯一可行的解决方案是,将DEBUG文件夹整个删除,然后重新编译生成文件夹,再添加DLL文件。网上也有很多人碰到这样的问题,我们只是用这个看似很玄乎的做法,却并不知道背后的原因,有待以后继续探究。
2.Qt有很多插入图片的方式,这在一开始学习起来被误以为很简单。然而在实际操作过程中,我们发现,由于自己不清楚车如图片的底层传递调用,对路径名的稍加改动就会导致图片插入失败。
3.由于Qt本身编码的问题,一开始采用“UTF-8”的编码,导致无法输出中文字符。在更改了编码之后,就能够正常显示中文字符了。不过,我们的UI界面还是决定采用全英文的模式。
4.在我们的UI中频繁地用到了窗口之间的切换,这用到了Qt中的信号槽功能——一端发出信号,一端接收信号。在实际编写过程中我们遇到过某个窗口提前结束时在后台又发出信号,从而误操作的问题。在反复排查之后,我们发现这是由于我们的程序有多个分支,而我们只在大部分的分支中加入的停止语句,有一个分支没有及时加入停止语句。
对UI设计的一些总结
1.界面设计不是一件一劳永逸的事情,也不是一件可以一蹴而就的事情。良好的界面必定需要被不断打磨,从而变得更好。
2..一定要先实现基本的程序框架后再进行界面打磨。因为底层框架是核心,一般不会大改,界面则需要不断优化调整。如果界面设计太早进行,后面很可能翻盘重来。
二、对接部分
经过实际操作,不同的CORE组对接难度差别相当之大。 CORE组的对接接口没有在一开始被统一定义,造成了我们在一一调用时必须采取完全不同的接口调用。
有的CORE组给出的接口简洁易用,这里表扬一下CORE2、CORE3、CORE4、CORE15组,与他们的对接很顺利。
还有一些CORE组的对接很难进行,这里就不说了。
对接需要进行以下几步操作:
1. 把 .h 与 .lib/.a 文件复制到程序当前目录下,然后再把dll文件复制到程序的输出目录。
2. 在 pro 文件中,添加 .lib 文件的位置: LIBS+= -L <目录名> -l <DLL名称>。
-L 参数指定 .lib/.a 文件的位置
-l 参数指定导入库文件名(不要加扩展名)
3. 在程序中 include 头文件。
在这15组CORE当中,存在着三种接口模式:
1.lib + dll + h + string/str[]
和我们对接的第一组CORE就采用了这种模式。大部分CORE也采用了这种模式。
2.lib + dll + h + txt
这种模式也比较常见,在调用完成后会自动生成一个txt文件,然后通过它进行数据传递。
3. h
这种方式能够进行较为简便的对接,但没有实现良好的封装,因为在h文件中暴露了太多的源代码,不建议CORE组采用。
三、感想
1. 敏捷原则
由于对Qt完全陌生,上手研究花了好一番功夫。这其中包括C++相关语法的学习和Qt软件本身语法的学习。其实对软件本身的学习也是实际使用过程中很重要的部分,这个过程不容小视,但我们也需要尽可能压缩这一部分的实践,从而把精力更有效地投入到实际编程创作上来。在实际开发过程中,要采取“敏捷”原则,学一点做一点,这样才能尽可能不在软件本身上化过多的工夫,从而耽搁了工程的实际进行。
2. 某些不明所以然的问题
在对接过程中,我们用的是DLL隐式调用。DLL对我们来说是完全陌生的,也是从头学起。在Qt添加DLL文件进行编译时,有时会碰到许多莫名其妙的错误一直存在,比如“找不到core.lib”,而我们的确吧这个文件加入进来了。这个时候,唯一可行的解决方案是,将DEBUG文件夹整个删除,然后重新编译生成文件夹,再添加DLL文件。网上也有很多人碰到这样的问题,我们只是用这个看似很玄乎的做法,却并不知道背后的原因,有待以后继续探究。
3. 先分后合、驾驶员+领航员
在结对编程过程中,我们先是分开来各自编程,而在中后期进入“驾驶员+领航员”的合作编程模式。这是因为,一开始我们对Qt开发环境都不熟悉,即使两个人一起编程,效率也不会很高。而在中后期,两个人都对这个环境有了一些了解,这样,转而进入合作编程模式,就能互相弥补对方想法的不足之处,进行更高质量代码的编写。
4. 优势互补
本次结对编程,我们得到了一个人编程体会不到的“优势互补”的感觉。也就是说,当我们面对一个程序问题的实现方式时,两个人会分别说出自己对这个问题的看法,然后进行比较,分析两种方法孰优孰劣。如果其中一个人对某一些语句的书写很熟练而另一者不是很熟练,那么熟练者主动书写代码,另一人在旁边积极提出有益的建议。这样,就较少出现个人编程过程中常有的“阻塞”情形,从而提升了编程的效率。
5. 有效减少偷懒
结对编程有效减少了个人编程中容易发生的偷懒现象。对方总是会问自己这几天的进度怎样,自己就不好意思偷懒,而是全部精力投入到自己的任务之中。
6. 团队意识
通过结对编程的训练,我渐渐领悟到了团队的作用。团队绝不仅仅是人数的增加,而更在于其提供了知识的分享和交互的平台。通过团队进行交流,有效实现了知识之间的互补,从而使大家都有更高效的收获。