本周结对编程追加作业:记录收获。坦白说,我的收获多而杂,一时不知从何说起,以下试图从各方面简要谈谈。

一、编程能力收获

  从编程能力方面,我收获的主要是类的设计思路和算法设计。在作业要求blog的指引下,我和同伴一同思考、选用类,最终决定采用我提议的方案,类中的变量名、变量数量都是由我提议和设计完成的,主要基于要求的功能的实现。变量以外,还需要设计类的函数,这就涉及到算法层面。一开始,我对于生成运算式方面非常生疏,翻了半天谭浩强红皮书,又在团队作业的小组中讨论了一阵,终于决定采用树的形式生成,辅以栈形式实现。相关函数及代码可以参考我的作业报告博客,都附有一定的注释。

  除了主干程序外,还有单元测试的设计。由于运用VS单元测试框架时还比较生疏,我和同伴一起找了一些文档查阅,实现了比较基础的单元测试,但覆盖率没达到百分百。这主要是因为一些涉及全局变量、类变量的函数的单元测试函数编写方法我们没能掌握,只能使用断点debug方式代替单元测试,某种意义上做到了全覆盖。只能说单元测试之路任重而道远,在将来的团队项目中一定要好好落实真正的单元测试。

  这次编程暴露出我数据结构方面的薄弱,选用完数据结构后,相关算法的编写也花了很多功夫,和同伴一起找了许多网站和资料作为参考,磕磕碰碰才最终完成,这使我对树结构、栈结构的操作和使用更加熟悉,也锻炼了我对于编程细节、逻辑严密性的把控,全方位提升了我的编程能力,但愿我能牢记这些相关知识,灵活运用在以后的学习工作中。

附图:类设计与类函数的部分截图

二、接口相关收获

  之前从未将一个程序发布成dll,因而这第一次宝贵的经历自然伴随着各种困难。其一,按照网上的教程,我只能从零编写出非常基础的dll,却无法将已经编写好的cpp文件转换成dll。最终,在团队组的同学们的建议下,我和同伴终于找到了方便可行的转化方法。其实说来也简单,只要在头文件顶部添加预编译,在需要输出的函数前加上编译头即可,完全没必要像网上教程一般新建一个dll工程、预编译头等等繁杂操作。

  以上就是关于接口的全部收获?当然不可能。这仅仅是开始。我们还没来得及沉浸于dll导出成功的喜悦,就被对接的UI组问翻了:为什么给的头文件里这么多内容?函数接口能不能多支持一些格式?

  我们下载了群里其他组的配套头文件,发现其中仅仅含有需要输出的函数,而我们的头文件可谓无所不包:类定义,类中函数的定义,五脏俱全。于是我们恍然大悟,又设计了一个func.h文件,将需要导出的函数封装在其中,其他的信息则无需提供给UI。同时,我们改善了接口种类,原先UI需要先生成一个questionCore 类的变量,再调用变量.setting函数进行设置,再调用变量.getfile函数获得结果,非常复杂,且每个参数都需要设置;改善后,我们只提供三类setting函数,分别支持string输入、bool输入、文件输入,且自带输出,UI组只需选用其中的一个setting函数,就能直接得到结果,且对于不想设置的选项,可以输入-1、“”来取用默认值,非常方便。

  这次接口的设计波折给了我很大启发:接口的设计要尽量简单化、多元化、智能化,编写的dll要力求实现“完美黑盒”,给用户提供最便捷、最舒适的体验。

附图:原先设计的接口,只提供一种类型的设置函数,且需要繁复的调用手续。

附图:改进后的设计接口,只提供三种setting方案,方便快捷,支持使用默认设置。

三、交流相关收获

  结对作业的一大命题便是交流。我和队友的交流还算融洽。虽然他没有上过数据结构课,对树、栈等数据结构不太理解,但经过简单讲解以后他能很快follow上,并且提出了许多好的意见,比如筛选不合法式子的判断准则、括号添加和删除的功能等。在与队友的交流合作中,我学到了如何将自己的设计思路传达给同伴,学到了通过画图方式展示函数的架构(在队友的强烈建议下),也学到了意见出现分歧时应该如何协商解决。

  除此之外,还有不同组间的交流。由于每组都要相互对接,我们与不同的UI组间基本都要打交道。第一次面对面对接时,由于我们没有说清楚功能,UI组调用方式出错导致迟迟不出结果,经过我们共同调试、发现问题,最终得以顺利对接。后来对接时,我们积极吸取了各UI组的建议,并结合群内做得比较好的UI组的接口设计作为参照,不断更新我们的对接功能,让我们的程序变得更易于使用。这些交流合作中,我学到了如何给自己的产品打广告,如何从他人的建议、示范中提升自我,如何给他人提建议,帮助他人完善功能。

  

附图:在与UI11组的对接中,我们发现界面的分辨率存在问题,导致显示不全,于是及时向他们反馈、建议,得到解决。

  总而言之,本次结对编程给了我诸多益处,接下来的团队项目中,我一定要好好总结、做得更好。

结对编程收获-Core10组-PB16110698的更多相关文章

  1. 结对编程收获——UI真的没有那么简单

    结对编程收获——UI真的没有那么简单                                                      詹元成 初看作业要求,心里还有一点欣喜,不就是做一个UI ...

  2. 现代软件工程HW2:结对编程-生成五则运算式-Core10组 [PB16110698+PB16120162]

    作业具体要求点 这里 Core组要求: 1.Calc() 这个Calc 函数接受字符串的输入(字符串里就是算术表达式,例如 “5*3.5”,“7/8 - 3/8 ”,“3 + 90 * 0.3”等等) ...

  3. 结对作业收获_core组

    收获:编码之前必须的思考是逃不掉的,而且这一步是磨刀不误砍柴工,而且会加速以后的步骤 分析: 首要重要的事情是:需要完成的功能,理清逻辑关系.我们要随机产生一定要求的算式,并且计算出算式的值. 其次的 ...

  4. 结对编程(Python实现)

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

  5. UI-12组结对编程作业总结

    UI-12组结对编程作业总结 源码Github地址 https://github.com/tilmto/TILMTO/tree/master/Arithmetic 作业摘要 本次结对编程作业分为以下两 ...

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

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

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

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

  8. 结对编程项目总结(core2组)

    结对编程项目总结(core2组) 作业---四则运算(Core 第二组)   ----by 吴雪晴 PB16061514 齐天杨 PB16060706 一.项目简介 项目的任务为制作一个给(貌似是?) ...

  9. 佛系结对编程---四则运算(Core 第四组)

    ----by core 第四组 ( 邹卫其 范力 ) 一. 项目介绍 1. 能自动生成小学四则运算题目并给出答案,生成题目时可以选择下列参数:   1)生成题目数量   2)每道题目中运算数数量   ...

随机推荐

  1. Cuckoo架构

    cuckoo在部署阶段,只在Guest系统里塞了一个agent,这个agent在运行阶段负责与Host端程序进行通信,从Host端接收sample, 整个客户端程序,以及配置文件. 在Host端主要的 ...

  2. OMG that's another blog!

    目录 1.Beginning 2.then 1.Beginning we'v learnt how to ask file from our own computer and tried to bui ...

  3. 如何用json 与jsonp 的区别去回答你的面试官?

    常常 有面试官这样问我们,虽然用过无数次,但是回答不上岂不是尴尬,那我们浅析一下它们的区别? 1. json JSON是一种基于文本的数据交换格式,用于描述复杂的数据,举个例子: var nax=[ ...

  4. python生成阿里云云直播推流播流地址

    申请一个阿里云账号,进入控制台,添加云直播工能,就可以获得相关数据, 直接上代码,阿里云接口文档https://cloud.tencent.com/document/product/267/7977 ...

  5. JavaScript中的面向对象编程,详解原型对象及prototype,constructor,proto,内含面向对象编程详细案例(烟花案例)

    面向对象编程:   面向:以什么为主,基于什么模式 对象:由键值对组成,可以用来描述事物,存储数据的一种数据格式 编程:使用代码解决需求   面向过程编程:         按照我们分析好的步骤,按步 ...

  6. Java泛型中extends和super的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  7. MYSql 存储过程自定义跳出

    MYSql存储过程自定义跳出 我们有时会在存储过程中进行一些判断,当判断条件达成时候我们有时会直接跳出存储过程. 但是存储过程不支持return直接返回的操作, 所以我们只能采用另一种方法,'leav ...

  8. Cacti 添加 CPU 监听

    Cacti版本: 0.8.8a 將 http://forums.cacti.net/about29832-0-asc-135.html 网址的template下载,有1,2,4,8,12,16核心的t ...

  9. vue 学习四 了解组件

    1组件的注册 全局注册 import Vue from 'vue'; import com from './component1'; Vue.component("com_name" ...

  10. 过滤掉map集合中key或value为空的值

    package cn.com.utils; import org.apache.commons.lang3.StringUtils; import java.util.Collection; impo ...