一.我和小伙伴的合照
结对人员:13061163 赵庶宏
13061196 付帅
是不是感觉我俩很有爱?其实,这都是被逼的,dealline是第一生产力!!!!
付帅的优点有:
很拼!很负责,在自己负责的部分中,能按时的完成;
基础比较扎实;
比较喜欢钻研,接受新知识能力比较强。
缺点是:
可能是过于劳累,有时候逻辑有点混乱。
我的优点:
知识涉猎广泛,能把多种知识融会贯通;
能够发现很多细节问题;
学习中效率较高。
缺点:
有时候自己编码的时候,不够细心,老犯低级错误。
二.结对编程的优点
1.两个人一起编程,可以提高每个人的效率。
本来一个人写代码的时候,因为每个人对问题的敏感度不同,或者编程风格不同,可能会忽略某些bug,而两个人结对编程,一个人写,一个人在旁边看,这相当于同一块代码被检查了两次,
很大程度上提高了代码的质量和编程的效率,而且,这也是写的代码更简洁;
2.结对编程,可以快速提高个人编程水平。
因为一个人在cording的同时,另一个人在旁边“指导”,这样,两个人可以互取所长,取长补短,可以从交流中发现对方的优点,同时也可以发现自己的缺点,这样可以很快的发现自己的不足,同时予以
改正,可以在很短的时间里,提高自己的cording水平。
3.可以提高代码质量。
两个人同时编程,一块代码至少经过两次检查,并且融合了两个人的“精华”(暂且这么说吧,其实是两个臭皮匠。。。。。),代码会更加的简洁,质量也会更高。
4.可以提高个人与他人沟通交流的能力。
因为两个人一起写代码,会一直在沟通,两个人都要用简洁的语言表达自己的观点,使对方明白自己的想法,所以,这也在很大程度上,提高了一直被诟病的程序员的沟通能力,会提高个人的一部分
表达能力。
三.怎样利用这些好的设计方法
Information hiding:信息隐藏原则保证所封装的数据的安全性,即外部不能直接对内部的数据进行修改。为了更好的利用这一个方法,可以做一下应用:
1 多层设计中的层与层之间加入接口层;
2 所有类与类之间都通过接口类访问;
3 类的所有数据成员都是private,所有访问都是通过访问函数实现的;
interface design:接口的设计是为了统一某种标准,比如说在编写程序时,有一组类,他们都有类似的行为,我们可以对这种行为定义一个接口,这些类去实现这个接口就可以了,
当我们在实际使用时就不必再考虑具体的实现,从而减少了编程复杂度。
Loose coupling:松耦合的基本概念是:允许改变或者当问题发生在“电线的一端时”来避免影响到其他的端点。也就是说,改变或者供应者或者服务的问题不能影响到用户----或者用户的问题
不应影响到供应者或者服务。在编写代码时,要注意降低模块(类)之间的依赖性,当一个模块(类)作出修改时,与之相关的模块(类)不必做过多修改且功能能够正常运行。通过提供API
来供外部调用,类与类之间建立接口类来实现相互的调用,从而降低类与类之间的依赖性。
在我们的程序中,设计了3个接口(文件接口,算式条件接口,计算接口),只提供这三个接口供外部使用,这样可以将内部的实现细节隐藏起来,
外部调用时也不需要清楚内部的具体实现情况,只需要调用对应的API接口即可。并且外部想修改内部的类属性时,不能够直接对其赋值,需要调用setting接口实现间接的赋值。
四.Design by Contract&&Code Contract
契约式设计的提出,主要基于软件可靠性方面的考虑。可靠性包括正确性和健壮性,正确性指软件按照需求规格执行的能力,健壮性指软件对需求规格中未声明状况的处理能力。
健壮性主要与异常处理机制相关 。正确性一方面包括对象元素内部运行的正确性,另一个重要方面是与其它对象元素交互时的正确性。
优点是:
提高了代码的可复用性,在考虑是否可以使用某一函数时,只需考察其契约是否满足需求,而不需要考虑其内部的具体实现。
缺点是:
对于程序语言有一定的要求,契约式编程需要一种机制来验证契约的成立与否。而断言显然是最好的选择,但是并不是所有的程序语言都有断言机制。那么强行使用语言进行
模仿就势必造成代码的冗余和不可读性的提高。比如.NET4.0以前就没有assert的概念,在4.0后全面引入了契约式编程的概念,使得契约式编程的可用性大大提高了。此外,契约式编程并未
被标准化,因此项目之间的定义和修改各不一样,给代码造成很大混乱,这正是很少在实际中看到契约式编程应用的原因
在我们的程序中,设计了3个接口(文件接口,算式条件接口,计算接口),只提供这三个接口供外部使用,而且我们规定了向这三个接口传参的类型及规格,这样,就能保证所传入的
参数都在控制范围。
五.覆盖率
覆盖率 95.72% ,其实也并不高。。。。。由于时间紧迫,只做到这里。。。。
六.UML
关系依赖图:
七.关键算法
我们的算法最关键的就是在生成算式的时候,直接生成后缀表达式,并且所有数字都按降序排列,这样在查重的时候,会相当的方便,而且还不会产生重复的算式,而且加括号与不加括号
都可以随意选择;还有就是在计算的时候,转成中缀表达式以后,在重新转换成后缀表达式,这两次的转换是因为不加括号生成的后缀表达式和其转换成的中缀表达式的值是不一样的,这是我们算法
的关键所在,其他地方也有一些比较独特的地方,就不都说了。
八.感想
经过这次的结对编程作业,我真的感受到了很多。最大的感受就是:程序员真(不)是(是)伟(人) 大(干)的职业!还是说点正能量的,我确实学到了很多的知识,没有deadline的敦促,
是不会在这么短的时间里完成的,还有就是要非常感谢我的小伙伴——付帅,我从他身上学到了很多,坚持,不拖沓,等等,最重要的是,我们一起找bug的时候很开心(你信吗?呵呵),两个人为了
一个分号,一个逗号,一个负号都得调很长时间,等找到错误,我两真的是被自己蠢哭了,但也没办法,还得继续调。。。。。虽然这里面有无数的槽点,但我们两个确实学到了很多,怎样在最短的时间
里确定分工,怎么协调两人的进度,怎么把两个人的成果结合在一起,从中发现对方的优点,提高自己!