• 结对编程收获


    本次结对作业总算是落下了帷幕,经过将近两周的努力,我们组终于设计完成了UI界面,并且实际完成了与五组Core组之间的对接,总的来说,这次结对作业让我收获很多。作为UI 组,我使用的是Qt来进行界面设计,因为Qt可以跨平台,而且是使用C/C++语言进行开发的,因此,对于我这种只会C和一些简单的C++语言的人,是非常容易入门的。下面我就来与大家分享一下此次结对作业中我的收获与心得。

    一、UI设计方面的收获

    1.万事开头难。虽然我曾经有过UI设计的经历,但是当时我是使用matlab进行项目开发的,虽然是一样的套路,但是仍然相当于从头学起,只不过有了上次开发的经验,这次我利用Qt设计界面,上手还是挺快的。但是,在我们开始码代码之前,一个小插曲险些让我们组放弃使用Qt。记得当天是清明节假期的第一天,我和队友下载安装了Qt,我根据网上的教程编写了一个极其简单的程序,结果发现我的Qt死活运行不了,而且Qt也不自动弹出bug,由于是第一次使用,我就很不清楚是哪里出了问题,因此,前前后后卸载重装了好几遍,结果还是不行。就在我心灰意冷的时候,不小心点到了编译输出的按钮,我这才算是知道了问题的所在,修复后总算可以运行了。所以说万事开头难,当我们刚开始接触一个陌生的软件时,我们可能会遇到各种各样的问题,但是不要着急,因为凡事都需要一个适应阶段,一旦熟悉了之后,事情就会变得比较顺利了。

    2.参考优质的入门教程真的可以事半功倍。由于我和队友从来没有使用过Qt,因此在我们编程之前,我们先从网上搜了Qt的入门教程,最后找到了一个由某位学长编写的“Qt编程指南”,非常使用,里面讲解深入浅出、特别详细,最重要的是,编者将使用过程中可能遇到的问题都先指了出来,因此我和队友根据教程的内容编写一些简单的程序,基本上没有出问题。而且作者编写的这本指南时,思路特别清晰,分类十分明确。我们根据目录很快就找到了我们编程时需要用到的一些知识,所以我们就重点看了一下这些内容,花了大概一天的时间,就明确了如何利用Qt Creator设计界面,并且通过用户输入参数或点击按钮实现特定功能的基本流程。相比之下,如果我们只是自己摸索,估计很难在短时间之内搞清楚Qt的具体使用方法,下面我就贴出这本“Qt编程指南”的网址:https://qtguide.ustclug.org/,希望能对急需使用Qt进行GUI设计的人有所帮助。

    3.1+1>2。说实话,之前我从来没有进行过两人组队的任务,这是头一次。但是这一次结对编程的效率远远高出我的预料。在刚开始的时候,是由我做驾驶员,我的队友冯富禹同学做领航员,在UI界面上添加必要的控件,并且编写基本的槽函数(需要实现的功能);后期由冯富禹做驾驶员,我做领航员,添加附加功能(如记录错题的功能)并且将我们设计的UI的界面进行美化。因为UI界面的设计需要考虑到用户体验,因此我们思考了好多对用户友好的功能,比如用户可以通过Reset键随时实现题目的重置,在设置参数时如果有了新的想法可以通过Cancel键清空已经设置好的参数,在未做完题目时也可以提前交卷并给出正确的评分。我和队友合力提出了这些想法并且通过代码实现了相关功能,如果仅凭我一人之力是很难顾及到这么多方面的。同时,两个人组队编程让我有机会体验到了驾驶员和领航员这两个不同的角色,在驾驶员编程时领航员会及时指出驾驶员的错误,这样大大减少了我们程序出现的bug,因此,这次我们在编写UI时用于debug的时间是相当少的。

    二、与Core组对接时的收获

    1.UI组应提前告知Core组所需要的接口参数,这样就能降低两组对接时的难度。由于开始时没有意识到这个问题的重要性,因此,我没有提前告知Core组我们传给Core组的接口参数,这就导致了不同的Core组的接口设计得大相径庭,我们在对接不同的Core组时常常需要对我们的界面进行较大的调整,这就导致我们的对接效率比较低,最后只是完成了5组的对接。如果在Core编写代码之前我们就给出具体的接口参数说明,Core组提供的接口应该就会大同小异,会给我们UI组对接带来巨大的方便。

    2.学会了如何调用dll文件。本次编程我们需要通过向项目中添加dll文件的方式才能使用Core组提供的各种功能函数,于是我们就学习了调用dll文件的方法,出于便捷的原因,我们采取的是隐式调用dll文件的方法。具体方法如下:

    我们需要三个文件,头文件(.h)、导入库文件(.lib)、动态链接库(.dll),具体步骤如下:

    (1)、首先我们把 .h 与 .lib/.a 文件复制到程序当前目录下,然后再把dll文件复制到程序的输出目录,

    (2)、下面我们在pro文件中,添加 .lib 文件的位置: LIBS+= -L D:/hitempt/api/ -l myDLL

    ​ -L 参数指定 .lib/.a 文件的位置

    ​ -l 参数指定导入库文件名(不要加扩展名)

    ​ 另外,导入库文件的路径中,反斜杠用的是向右倾斜的

    (3)、在程序中include头文件

    3.学会了如何打包文件。我们在网上教程的指导下学会了如何使用Enigma将文件打包成exe文件,真正意义上的实现了代码的封装。

    4.我觉得对接不仅仅是调用一下Core组的函数,然后能够运行就万事大吉了,还需要UI组对对接好的程序进行测试,我们在对接好每一组Core后,都会装作什么都不懂的用户,对界面上的各种控件进行“惨无人道”的测试,来检验程序是否会崩溃,就这样我们发现了Core组的好多问题,但是因为时间有限,我们也只是做了一些我们想到的测试。通过测试,我发现对非法输入检测做得特别好的Core组的程序很少出现程序崩溃的情况,因此,我也感觉到要想带来良好的用户体验,就要想到各种可能出问题的情况,然后加以预防。最后,我希望各个Core组如果有时间的话,可以把数组是否越界的检测加上,因为我测试了好多组的代码,如果输入的问题(操作数)数量个数过大,程序直接就崩溃了

    最后,我想说的是本次结对编程的结果让我比较满意,我们两个人在遇到问题时能够合力面对并解决,每取得一些进展我们都可以分享喜悦,这种体验确实前所未有。我已经记不清为了这个项目熬过多少次夜了,也记不得我们曾经多少次想要退缩,但是所有努力都没有白费!OUR EFFORT FINALLY PAY OFF!!!展示一下我们的UI界面:

  • 相关阅读:
    Java-LockSupport
    Kafka Eagle 安装
    Kafka shell
    python pip 使用
    Kafka 集群部署
    Kafka 概述
    DockerFile 简单使用
    《深入理解Java虚拟机》读书笔记
    linux安装redis
    Java多线程基础知识例子
  • 原文地址:https://www.cnblogs.com/rjgcqth/p/8886794.html
Copyright © 2020-2023  润新知