结对编程收获——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就可以显示中文了

总结

这次结对编程还是收获颇丰的,每一次作业,自己能有很多提高,就是最好的收获。

结对编程收获——UI真的没有那么简单的更多相关文章

  1. 结对编程收获-Core10组-PB16110698

    本周结对编程追加作业:记录收获.坦白说,我的收获多而杂,一时不知从何说起,以下试图从各方面简要谈谈. 一.编程能力收获 从编程能力方面,我收获的主要是类的设计思路和算法设计.在作业要求blog的指引下 ...

  2. 结对编程——带UI的小初高数学学习软件

    一.简介 本次项目要求: 1.所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限): 2.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: ...

  3. 结对编程(Python实现)

    一.Github地址:https://github.com/nullcjm/mypage 项目搭档:3117004662梁子豪 3117004648陈俊铭 二.PSP表格: PSP2.1 Person ...

  4. 结对编程总结(胡超慧&&王宇)

    在分析完需求的几秒中内,我和搭档就蒙了,因为之前并没有做过UI,因此这次的项目对于我们来说无疑是一个陌生的挑战. 为了最大程度实现曾经代码的复用,我们最开始考虑使用可以支持C++的QT来进行相关的设计 ...

  5. 第四周作业&&结对编程

    1. 结对编程. 本周开始,和我结对编程的小伙伴是齐嘉亮(博客:http://www.cnblogs.com/zhengrui0452/). 因为这周需要发布四人团队项目的alpha版本,刚好我和亮哥 ...

  6. 结对编程的感想&收获

    关于结对编程的感想.感受,见我的另一篇随笔——<构建之法>结对编程   感想 下面我来谈谈本次结对编程的收获以及发现的问题 收获 ①这是我人生中第一次做UI界面设计,刚拿到这个题目还是比较 ...

  7. 安卓APP开发简单实例 结对编程心得

    开始说起搞APP开发,自己和小伙伴的编程水平真的很低,无从下手,只有在网上找点案列,学习着怎样开发,结对编程还是面临着许多问题的,大家的水平有所差异和编程风格不同,我们用eclipse做了一个仿微信登 ...

  8. 结对编程——四则运算器(UI第十组)

    博客目录: 一.问题描述                   二.设计思路                   三.UI开发过程                       四.对接过程       ...

  9. 结对编程项目复盘:带UI的小初高数学学习软件

    实现个人项目时,由于我当时的Java GUI编程基础还比较薄弱,所以我选择通过命令行实现,并将编程开发的重点放到了算法效率上去.没能设计出用户体验更佳的UI成为了我在个人项目阶段最大的遗憾. 在这次结 ...

随机推荐

  1. cygwin的用途

    cgywin简介 打开cygwin的官方网站(www.cygwin.com),一行英文非常醒目:Get that Linux feeling – on Windows! 简而言之,cygwin是一个在 ...

  2. android pull 解析器解析xml文档

    person.xml <?xml version="1.0" encoding="UTF-8"?> <persons> <pers ...

  3. 比较map的value

    Collection<CardInfo> values = splitCardInfo.getCardType().values();Iterator<CardInfo> it ...

  4. 力扣 ——4Sum (四数之和)python 实现

    题目描述: 中文: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 targe ...

  5. linux CentOS7 nginx nginx-rtmp-module搭建直播

    直播配置 1. 安装 Nginx 依赖软件 yum -y install gcc gcc-c++ autoconf automake make yum -y install zlib zlib-dev ...

  6. Quartz -----定时任务框架

    一.什么是Quartz     由java开发用来执行定时任务,类似于java.util.Timer.   但是相较于Timer,quartz增加了很多功能:                  持久性 ...

  7. atomic 原子操作的类

    import java.util.concurrent.atomic.AtomicInteger; /** * 原子操作的类 atomic */ public class VolatileDemo { ...

  8. nmap使用笔记

    扫描全端口判断服务 nmap ip -T4 -Pn -sV -p 1-65535 扫描端口并且标记可以爆破的服务 nmap ip --script=ftp-brute,imap-brute,smtp- ...

  9. Hibernate的优点与缺点

    Hibernate优点: 1.对象化.人员以面相对象的思想来操作数据库.Hibernate支持许多面向对象的特性,如组合,继承,多态等. 2.更好的移植性.对于不同的数据库,开发者只需要使用相同的数据 ...

  10. Git分支,合并,切换分支的使用

    1.创建合并分支 在我们每次的提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD指针严格来说不是指向提交 ...