结对项目博客

我的队友是张启东

 

(一)照至少一张照片, 展现两人在一起合作编程的情况。说明结对编程的优点和缺点。结对的每一个人的优点和缺点在哪里 (要列出至少三个优点和一个缺点)。

结对编程的优点:

(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。

(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。

(3)在心理上,  当有另一个人在你身边和你紧密配合, 做同样一件事情的时候,  你不好意思开小差, 也不好意思糊弄。

(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。

结对编程的缺点:

(1)需要2个人,可能浪费劳动力

(2)需要2个人水平相近才能达到最佳效果,否则可能效率下降

我的优点:

(1)喜欢钻研算法

(2)程序结构清晰

(3)能长时间工作,而且越深入越效率越高

我的缺点

(1)不喜欢写注释,对别人来说可能比较难读懂

队友的优点:

(1)算法思路巧妙

(2)程序风格好

(3)善于沟通

队友的缺点:

(1)遇到bug会很烦躁

 

(二)看教科书和其它资料中关于 Information Hiding, interface design, loose coupling 的章节,说明怎样利用这些好的设计方法。

Information Hiding:信息隐藏指的是隐藏函数内部细节,仅对外公布你可以传给我的参数个数、类型以及我能返回给你什么。这种设计方法很好地解决了多人协作编程时由于每个人想法不一造成难以合作的难题,每个人的思想都可以在函数内部实现,而通过规范的接口来互相调用。

Interface design:接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式。有了接口,我们就可以在项目开始前规划好程序的结构,这样每个人负责的那一部分工作都可以同步进行。而且当把每个人工作综合起来的时候由于规范的接口存在将变得十分容易。

Loose coupling:一个软件是由多个子程序组装而成,而一个程序由多个模块(方法)构成。 而内聚就是指程序内的各个模块之间的关系紧密程度,耦合就是各个外部程度(子程序)之间的关系紧密程度。耦合是对某个元素与其他元素之间来凝结、感知、和依赖的度量,这里说的元素可以是功能、对象(类),也可以指系统、子系统、模块。它取决于每个模块之间的接口的复杂程度,调用模块的方式——即有哪些信息通过接口。可以通过:通过应用设计模式实现“低耦合”、合理的职责划分、使用接口而不是继承来降低耦合。

 

(三)看 Design by Contract, Code Contract 的内容,描述这些做法的优缺点, 说明你是如何把它们融入你的作业中的。

契约式编程就是在编程开始之前,先定下一个虚拟的契约,这个契约规定了类的规格包括前置条件、后置条件以及不变式。

这个做法的优点就是可以让编程变得可靠、可验证。

 

(四)通过截屏显示你是如何用VS 的unit test 来保证你写的类的质量的。显示unit test 对你的写的类(class) 的覆盖率

(五)画出UML 图显示各个实体之间的关系 (画一个图即可)

 

(六)说明你的算法的关键 (不必列出源代码), 以及独到之处

 

算法实现:
算法有两大部分,第一是生成表达式,第二是匹配式子与结果,这两部分都分别封装成了函数——generate,match。算法中有两个主要的类,分别是分数类(Fraction)和表达式类(Expression)。
分数类的属性有分子、分母、运算符(在有些时候,需要把运算符和分数存在一个数组中),方法有加减乘除,化简,判等,转化为字符串。
表达式类的属性有是否有括号、分数数组、运算符数组、运算符数目,方法有随机生成表达式、从字符串读取表达式、计算表达式、化简运算符数组、表达式判等、转化为字符串。
还有四个异常类,分母为零、产生负数、格式错误、产生分数。
独到之处:
计算表达式时候,从中缀表达式转为后缀表达式,从而计算出结果;
判断表达式是否相同时,判断标准为如果所有运算数和所有运算符和结果都相同,就认为是相同的式子,这样运算量相对小,而准确率很高。
在表达式字符串中,负数的两边用括号括起来,而在结果中,负数两边没有括号。根据字符串构建函数时,先判断两个括号之间如果没有运算符,则将这两个符号删去。
如果输入不合法或者有格式不对的表达式,则会在当前目录生成error.txt文件,其中输出错误信息。如果正确则不产生此文件。

posted @ 2015-10-06 22:27  BUAA谢金洛  阅读(234)  评论(1编辑  收藏  举报