一、结对编程:
结对编程的优点:
1.在写代码过程中,有人进行实时的“复审”,能够有效减少逻辑错误。
2.测试时,多一个人就多一个思路,可以更好地找到很多边界情况进行测试。
3.能够互相学习,开拓事业。
缺点:
1.两人的时间凑到一起并不容易,很难完全按照结对编程的工作模式进行工作。
2.分工的话必然会造成工作量上的差异,容易引起一些问题。
3.个人的编程习惯可能会有差异,相互适应的过程中会花费掉一定的实践。
我的同伴的优点:
1.性格挺好,易于沟通。
2.认真完成分工。
3.没有什么不良嗜好以及个人卫生习惯问题,坐在一起编程比较舒适。
我的同伴的缺点:
1.代码风格不太好,看着比较不舒服,不过很快就克服了。
二、关于Information Hiding, interface design, loose coupling
1.Information Hiding:信息隐藏原则,只向外界展示一个类的部分信息,把需要隐藏的设为Private,不让外界访问。由于各个模块之间功能相对独立(模块化编程的要求),所以我们不需要向外界展示出实现细节。
2.Interface design:模块化编程的各个模块之间通过接口相连,我们需要定义好接口,才能使得各个散落的模块之间成为一个整体。而且,在实现之前正确定义好模块之间的接口,有助于帮助理清思路,迅速高效地实现模块。
3.loose coupling
所谓松耦合,就是模块之间耦合度不大,各自完成各自的工作,这就要求我们在设计之初,就要对各个模块所要完成的功能有一个清楚合理的规划。并且在测试的时候,较好地进行单元测试,以达到松耦合高内聚的要求。
三、契约式编程
其实上个学期在面向对象课程上我们就已经实践过这样的设计思路。无奈当时课业任务繁重,大多数同学都是在全部完成后,匆匆地将这部分的内容通过注释的形式补上提交作业,而没有去实践。
坦率地讲,这次作业我也没有采用这样的方式进行设计,但是通过重新思考,我认为这种设计方式有以下两个优点:
1.从用户角度:
用户可以更简单地进行使用,因为前置条件明确了输入需要满足的条件,这也就是用户的职责所在。
2.从设计者角度:在设计前置条件的时候能够主动地去思考有哪些边界条件或者非法的输入,也就更加有助于设计者主动地去思考如何处理这些情况,减少程序的谬误。
四、
五、单元测试及代码覆盖率
六、算法实现
关键在于,将运算符和数字统一定义成同一个类(成为element),然后通过一些属性进行界定,并且有几种独立的构造函数。这样使得计算层面较为简单(转后缀进行计算)。对一些输入的判断采用了正则的方式。