结对项目
结对成员:王春阳191
结对编程的优点:
1.可以相互督促,使得工作更有效率;
2.可以相互学习,学到对方身上的优点;
3.获得的信息量更大,可以更优地设计。
结对编程的缺点:
1.两个人需要一个磨合的过程,要找到两个人的合适时间和合适的方法。
2.有可能会起矛盾。
王春阳的优点是有责任心,有耐心,有礼貌,善于学习;我认为我的结对伙伴没有缺点。
由于我在国庆节期间回了家,没有直接面对面地和自己的结对伙伴进行交流,而是在线上交流,因此没有两个人在一起讨论的照片。
Information Hiding
我查找到的关于信息隐藏的应用有:
• 多层设计中的层与层之间加入接口层。
• 所有类与类之间都通过接口类访问。
• 类的所有数据成员都是private,所有访问都是通过访问函数实现的。在面向对象的语言中,信息隐藏主要通过类的封装来实现。添加一些控制访问的权限,例如用private,public,protected等修饰类的属性和方法。
我认为这个方法可以增加了程序的安全性,保护内部程序信息不被外部看到,降低了被误删改的概率,而接口层的设计也使得双方的程序在结合是更加方便一些。
interface design
我认为接口的设计提供了一种规范,用户接口设计给了用户输入的规范和回答内容;内外部接口使得程序与程序之间、软件与软件之间、软件与硬件之间可以很好地结合而不会出现差错。这些都是保证程序正确运行的措施。
loose coupling
即松耦合。我查到的信息是:紧耦合系统通常比较快、也安全,传输误差的风险非常低。另一方面,松散耦合系统通常比较容易出错,但比较灵活。当你在电话上通话时对方职员可能会听 错你要订购书的 ISBN编号、或者在输入时出错。如果你不记得ISBN编号,你还可以告诉对方职员,你要一本由一名有荷兰名字的人写的有关3W联盟的XML范式的新书, 该书的出版社通常将动物的图片放在书的封面上,当你这样做时,你就得到了被理解的好机会。
也就是说,紧耦合往往会使部件的维护和重复使用比较困难,因为一个部件中的修改就自动意味着其他部件中的修改。而松耦的要求低需要修改的部分也少。所以在设计接口时要尽量遵守这个原则。
契约代码
资料显示,契约式设计或者Design by Contract (DbC)是一种设计计算机软件的方法。这种方法要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。这种方法的名字里用到的“契约”或者说“契约”是一种比喻,因为它和商业契约的情况有点类似。所谓契约,也就是合约,规定两个交互物件上的权利和责任。雇佣合同规定你的工作时数和你必须遵守的行为规则,作为公司则付你薪水,双双履行义务,双双受益。用程序规定软件模块的权利和责任,以确保程序正确性。这当然是它的优点,但是缺点我目前没有发现,我认为契约变成是一整非常值得采用的方式,断言的方式非常好,但是某些语言也许不支持断言的形式,这也是我在查阅资料的过程中发现的,也许可以算作缺点。
UML
Unit Test
整体的代码覆盖率一般,form类和program, 因为一个是partial类 一个是static类 ,无法测试,其余的代码覆盖率都是90%以上。
算法实现
1. 生成算法的关键就是就是根据参数要求预先编码出计算序列,从而可以快速生成有规律的计算式。
总体思想是以个人项目为基础。因为操作数有限制范围,于是可以根据给定的range与num_title来进行计算,得出一个大致的”间隔gap“,即循环时操作数的递减值,该值保证小于range。首先以range-gap为初始值,对应运算符全排列生成一遍,继而以gap为递减值继续循环,直到生成题目数量达到要求。此外再加以函数判断,若遇到产生不符合参数设置的式子,则重新生成。
匹配算法则以前缀表达式与后缀表达式的转换再加以自定义的分数数据结构的相关操作来实现计算,从而达到匹配的目的。
2. 独到之处:预先编码计算序列,尽量在一开始就避免产生与参数不符的计算式。从而相对于随机算法而言,会减少大量无效计算式的产生,让算法的性能提高。