结对编程全部结束,我是core组的,所以写一下在编程和对接过程的一些收获
一、开始时的考虑:这个程序要求实现三种模式:整数、小数和分数,由于没有硬性的规定,所以我把分数和证书合在一起做,当除法结果是整数时为整数运算,否则为分数运算。然后还要有不同的操作符种类,支持括号或者不支持,由于这个程序不仅要产生算式还要计算结果,而有括号和没有括号的算式在计算上有很大区别,有括号的可以在产生时进行计算,没有括号的需要另外写计算的函数,所以在程序中使用了两个函数来分别产生带括号和不带括号的。最后是关于小数的问题,由于无论使用哪一个系统函数都无法实现把小数按照设定的位数转换成字符串(可能是我没有找到,自己也不想写一个转换函数,人懒没办法…),所以只写了支持小数点后0到4位的。
二、具体实现:在程序运行过程中根据传入的参数来确定产生哪种模式的算式,比如若zerodiv是true则表示支持整数运算,无论精度是多少都没有作用,若zerodiv是false精度是0则表示支持分数运算,操作数都是整数而结果可能不是整数,若zerodiv是false而精度不是0则表示支持小数运算,用这两个参数来选择哪种模式,而是否有括号则需要选择不同的函数。在算式产生过程中所有操作数、运算符和运算符个数都是用随机数产生。
三、封装和对接过程:开始时打算使用dll来封装,之前也有做dll的一点经验,可能是因为之前的dll程序比较简单,没有太多外部包含的东西,所以基本没有问题,但是在这次封装时出现了比较玄学的问题,把头文件和c程序都放到dll里面封装,头文件的路径也设置好了,但是在生成解决方案时却报错说找不到头文件,反复设置了许多次都没有解决,新建dll重新做之后还是没有解决这个问题,可能是因为我添加头文件的方式不对,以后再具体学习一下封装的方法。所以在最后我们采用了.h文件的方式,虽然代码可能被修改但是实际对接时却方便了许多。
在与UI组对接时由于我们采用头文件的方式,UI组只需要将对应的头文件和c程序包含进去就可以使用,所以有的组对接的特别顺利,很好的实现了功能,但是有的组对接时出现了一点问题,由于我们传出去的是文件或者是字符串向量,在UI组使用时可能接口设置的有差别,有时候不能完整的显示算式,比如有一个组在显示时只显示了运算符,操作数没有显示出来,后来发现是因为数据类型没有对应上,在修改之后就可以正常使用了。由此可见接口的统一特别重要,可以避免许多的麻烦,而且在调试时也会缩小范围,但是我们开始时没有考虑到这一点,导致了许多不该有的问题,所以在具体开始编程之前需要全面的考虑可能出现的问题,减轻之后的负担。
四、经验总结:一、结对编程的意义:结对编程主要是通过两个人合作来实现事半功倍的效果,两个人可以交流而一个人不行,交流可以使两个思维产生更多的灵感,不断的产生新想法来更好的解决问题,而两个人一起编程也可以避免因为手误而产生的bug,减少以后调试的时间。二、接口设计的重要性:一个项目包含两部分,一个是内部实现方法,一个是内外的接口,这两部分都很重要,一个好的接口可以简化使用,更好的体现功能,也可以将内部的实现隐藏起来,保护程序不被修改,但是在这次作业中我们忽视了接口的统一,导致在对接时产生了许许多多的问题,解决这些问题花费了对接的大部分时间,所以以后需要在接口方面多加考虑。
总之这次结对编程收获还是很大的,学到了封装、对接和一点QT的知识。