结对编程收获
Posted Trinidad_ZZX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对编程收获相关的知识,希望对你有一定的参考价值。
结对编程收获
——我和我的伙伴分到了Core组,他负责生成编写四则运算表达式函数,而我负责编写计算函数以及整体框架和接口
这一次结对编程不仅学到了不少编程技术,更在交流合作中发现了自己以往的问题,因为我一直以来是一个偏爱独来独往的人,宁愿在合作中多干活,也不愿意别人对我的构想指手画脚,不过这一次是无法避免的了。
编程收获:
1、实战经验:
这是一次难得的C++实战经验,或者说是一次面向对象语言的实践,C++更抽象一层的数据类型及其方法将我从以往繁重的体力活(用C语言编写)中解救出来,我也充分地利用了它不同于C的特性,将整个小项目的结构都编写得比较优美(至少是学习计算机语言以来)。(最后附上核心内部接口与外部接口)
2、开发流程:
接口处理:
1、前后接口讨论的重要性:
诚如上文所言,在最初的讨论中所有成员都应该参加,但是这次并没有邀请UI组(甚至最开始的时候还没有考虑到要联系UI组,因为接口函数看上去已经确定了)。也如后来UI同学在群里抱怨的,虽然逻辑上各组之间差异不大,但是他们最初想得太美好了,接口参数表、返回值、甚至编写语言的不同让UI组的工作一下子重了不少。我们在之后的第二天找到了UI组的同学,不过他们讨论的积极性也不高,所谓的对接组内讨论也不了了之。
2、人性化、例程:
这一次我们的接口设计是比较成功的,因为据反馈有好几组UI都对我们的接口表示满意,我想这一方面得益于我在对接口设计时充分考虑到(a)尽可能少的调用函数完成尽可能多的事情(b)C语言仍然是所有同学熟练掌握的语言,并且它几乎成为各种编程语言会优先支持的外部语言;另一方面我也不厌其烦地在每一个版本中编写Test工程对dll进行测试,更对接口编写实际的使用例程并且不断进行更新,这样充分考虑用户感受使我们赢得了赞誉。
代码展现:
1、留给UI组的接口
extern "C" __declspec(dllexport) void SettingCal(int numOfOperand, int numOfQuestion, double rangeOfQuestion, bool addition, bool subtraction, bool multiplication, bool division, bool power, bool brackets, int precision, bool properFraction, bool decimalFraction); extern "C" __declspec(dllexport) void GenerateAndCalc(); extern "C" __declspec(dllexport) const char* getExpression(int count); extern "C" __declspec(dllexport) const char* getAnswer(int count); extern "C" __declspec(dllexport) int numOfQuestion();
2、内部的代码框架
struct ReversePolishType { stack<double> OPTR; //操作数栈 stack<char> OPND; //操作符栈 }; struct fractionType {//假分数形式 int numerator; //分子 int denominator; //分母 }; struct RPT_FractionType {//真分数的逆波兰式表示 stack<fractionType> OPTR; stack<char> OPND; }; class OperationClass { private: //B同学: int numOfQuestion; //题目的数量 int numOfOperand; //操作数的数量 double rangeOfQuestion; //题目中的数值范围 //运算符的种类 bool addition; bool subtraction; bool multiplication; bool division; bool power; bool brackets; int precision; //精度 bool properFraction; //是否支持真分数 bool decimalFraction; //是否支持小数 //都不支持说明支持整数 //计算整形、小数形式的算式 static ReversePolishType ReversePolishNotation(string Input)throw(...); //计算整形、小数形式的算式:根据string生成逆序波兰式 static double CalReversePolishNotation(ReversePolishType expression)throw(...); //计算整形、小数形式的算式:根据逆波兰式计算结果 //计算分数形式的算式 static RPT_FractionType RPN_FractionType(string Input)throw(...); //计算分数形式的算式:根据string生成逆序波兰式 static fractionType CRPN_FractionType(RPT_FractionType expression)throw(...); //计算分数形式的算式:根据逆波兰式计算结果 //分数形式的加、减、乘、除、乘方 static fractionType fraAdd(fractionType a, fractionType b)throw(...); static fractionType fraSub(fractionType a, fractionType b)throw(...); static fractionType fraMul(fractionType a, fractionType b)throw(...); static fractionType fraDiv(fractionType a, fractionType b)throw(...); static fractionType fraPow(fractionType a, int b)throw(...); //A同学: string generate()throw(...); string generate1()throw(...); string generate2()throw(...); string generate3()throw(...); string generate0()throw(...); public: OperationClass(); //无参构造方法 //提供给UI的属性、方法 //对象的属性 vector<string> expression; //存储生成的表达式 vector<string> answer; //存储表达式的计算结果 void Setting(int numOfOperand, int numOfQuestion, double rangeOfQuestion, bool addition, bool subtraction, bool multiplication, bool division, bool power, bool brackets, int precision, bool properFraction, bool decimalFraction);/*设置属性:操作数数量, 题目数量,数值范围,加法?减法?乘法?除法?乘方?(真分数?or小数?最后两项只可选其一,否则抛出异常)*/ void GenerateAndCalc(); void Generate(); //生成表达式,并存储在string当中 void CalcAllExpression(); //对题目表达式依次进行计算,将结果string数组返回 //获得对象的属性 int getNumOfQuestion(); //获取题目数量设定值 //B同学提供给A同学的方法 //计算表达式expression //返回double类型的答案 double CalcDouble(string expression)throw(...); //整数/小数形式表达式:对输入表达式字符串进行运算,然后以数值形式返回 double CalcFrationDouble(string expression)throw(...); //分数形式表达式:对输入表达式字符串进行运算,然后以数值形式返回 //返回string类型的答案 string Calc(string expression)throw(...); //整数/小数形式表达式:对输入表达式字符串进行运算,然后以数值形式返回 string CalcFration(string expression)throw(...); //分数形式表达式:对输入表达式字符串进行运算,然后以数值形式返回 };
以上是关于结对编程收获的主要内容,如果未能解决你的问题,请参考以下文章