结对项目博客
2015-10-06 23:24
281 查看
我的队友是谢金洛。
(一)照至少一张照片, 展现两人在一起合作编程的情况。说明结对编程的优点和缺点。结对的每一个人的优点和缺点在哪里 (要列出至少三个优点和一个缺点)。
![](http://images2015.cnblogs.com/blog/808052/201510/808052-20151006215745878-542250275.jpg)
结对编程的优点:
(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
缺点:可能产生只有一个人工作,而另一个人无事可做的局面,也会造成项目进展速度缓慢。
我的优点:算法思路巧妙,程序风格好,善于沟通;
缺点:如果有bug会很烦躁。
谢金洛的优点:喜欢钻研算法,结构清晰,变量命名符合逻辑;
缺点:不喜欢写注释,对别人来说可能比较难读懂。
(二)看教科书和其它资料中关于 Information Hiding, interface design, loose coupling 的章节,说明怎样利用这些好的设计方法。
Information Hiding:信息隐藏指的是隐藏函数内部细节,仅对外公布你可以传给我的参数个数、类型以及我能返回给你什么。这种设计方法很好地解决了多人协作编程时由于每个人想法不一造成难以合作的难题,每个人的思想都可以在函数内部实现,而通过规范的接口来互相调用。
Interface design:接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式。面向接口编程是软件工程领域常用的设计手段,特别是在大型团队项目中,接口的设计至关重要,往往接口的设计就决定了程序的很大一部分工作量。在团队编程的过程中,首先需要定义各个模块的接口,然后再开始团队编程。有了接口,我们就可以在项目开始前规划好程序的结构,这样每个人负责的那一部分工作都可以同步进行。而且当把每个人工作综合起来的时候由于规范的接口存在将变得十分容易。
Loose coupling:一个软件是由多个子程序组装而成,而一个程序由多个模块(方法)构成。 而内聚就是指程序内的各个模块之间的关系紧密程度,耦合就是各个外部程度(子程序)之间的关系紧密程度。耦合是对某个元素与其他元素之间来凝结、感知、和依赖的度量,这里说的元素可以是功能、对象(类),也可以指系统、子系统、模块。它取决于每个模块之间的接口的复杂程度,调用模块的方式——即有哪些信息通过接口。松耦合要求最小化依赖,实现可伸缩性、灵活性和容错。可以通过:通过应用设计模式实现“低耦合”、合理的职责划分、使用接口而不是继承来降低耦合。
(三)看 Design by Contract, Code Contract 的内容,描述这些做法的优缺点, 说明你是如何把它们融入你的作业中的。
契约式编程就是在编程开始之前,先定下一个虚拟的契约,这个契约规定了类的规格包括前置条件、后置条件以及不变式。
这个做法的优点就是可以让编程变得可靠、可验证。
(四)通过截屏显示你是如何用VS 的unit test 来保证你写的类的质量的。显示unit test 对你的写的类(class) 的覆盖率
![](http://images2015.cnblogs.com/blog/813357/201510/813357-20151007161944549-389958611.png)
![](http://images2015.cnblogs.com/blog/813357/201510/813357-20151007162006128-395360651.png)
![](http://images2015.cnblogs.com/blog/813357/201510/813357-20151007162914253-1177922426.png)
我的没有查看测试覆盖率的功能,于是用阿基的vs来查看的。
用cpp写的,人们都用c#写的,所以根本不能问别人。然后网上说的也不能用。
/*向附加库目录中添加待测试函数的.obj文件目录
如E:\VS2012\Algorithms4\Algorithms4\Debug
向附加依赖项中仅添加待测试函数的.obj文件名,这里是algs4.obj。
设置好后就能够正常运行测试。*/就是这么设置的,结果根本不能正常运行。
以上不是正文所以划去。
(五)画出UML 图显示各个实体之间的关系 (画一个图即可)
![](http://images2015.cnblogs.com/blog/813357/201510/813357-20151007161906924-1441685959.png)
(六)说明你的算法的关键 (不必列出源代码), 以及独到之处
算法实现:
算法有两大部分,第一是生成表达式,第二是匹配式子与结果,这两部分都分别封装成了函数——generate,match。算法中有两个主要的类,分别是分数类(Fraction)和表达式类(Expression)。
分数类的属性有分子、分母、运算符(在有些时候,需要把运算符和分数存在一个数组中),方法有加减乘除,化简,判等,转化为字符串。
表达式类的属性有是否有括号、分数数组、运算符数组、运算符数目,方法有随机生成表达式、从字符串读取表达式、计算表达式、化简运算符数组、表达式判等、转化为字符串。
还有四个异常类,分母为零、产生负数、格式错误、产生分数。
独到之处:
计算表达式时候,从中缀表达式转为后缀表达式,从而计算出结果;
判断表达式是否相同时,判断标准为如果所有运算数和所有运算符和结果都相同,就认为是相同的式子,这样运算量相对小,而准确率很高。
在表达式字符串中,负数的两边用括号括起来,而在结果中,负数两边没有括号。根据字符串构建函数时,先判断两个括号之间如果没有运算符,则将这两个符号删去。
如果输入不合法或者有格式不对的表达式,则会在当前目录生成error.txt文件,其中输出错误信息。如果正确则不产生此文件。
(一)照至少一张照片, 展现两人在一起合作编程的情况。说明结对编程的优点和缺点。结对的每一个人的优点和缺点在哪里 (要列出至少三个优点和一个缺点)。
![](http://images2015.cnblogs.com/blog/808052/201510/808052-20151006215745878-542250275.jpg)
结对编程的优点:
(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
缺点:可能产生只有一个人工作,而另一个人无事可做的局面,也会造成项目进展速度缓慢。
我的优点:算法思路巧妙,程序风格好,善于沟通;
缺点:如果有bug会很烦躁。
谢金洛的优点:喜欢钻研算法,结构清晰,变量命名符合逻辑;
缺点:不喜欢写注释,对别人来说可能比较难读懂。
(二)看教科书和其它资料中关于 Information Hiding, interface design, loose coupling 的章节,说明怎样利用这些好的设计方法。
Information Hiding:信息隐藏指的是隐藏函数内部细节,仅对外公布你可以传给我的参数个数、类型以及我能返回给你什么。这种设计方法很好地解决了多人协作编程时由于每个人想法不一造成难以合作的难题,每个人的思想都可以在函数内部实现,而通过规范的接口来互相调用。
Interface design:接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式。面向接口编程是软件工程领域常用的设计手段,特别是在大型团队项目中,接口的设计至关重要,往往接口的设计就决定了程序的很大一部分工作量。在团队编程的过程中,首先需要定义各个模块的接口,然后再开始团队编程。有了接口,我们就可以在项目开始前规划好程序的结构,这样每个人负责的那一部分工作都可以同步进行。而且当把每个人工作综合起来的时候由于规范的接口存在将变得十分容易。
Loose coupling:一个软件是由多个子程序组装而成,而一个程序由多个模块(方法)构成。 而内聚就是指程序内的各个模块之间的关系紧密程度,耦合就是各个外部程度(子程序)之间的关系紧密程度。耦合是对某个元素与其他元素之间来凝结、感知、和依赖的度量,这里说的元素可以是功能、对象(类),也可以指系统、子系统、模块。它取决于每个模块之间的接口的复杂程度,调用模块的方式——即有哪些信息通过接口。松耦合要求最小化依赖,实现可伸缩性、灵活性和容错。可以通过:通过应用设计模式实现“低耦合”、合理的职责划分、使用接口而不是继承来降低耦合。
(三)看 Design by Contract, Code Contract 的内容,描述这些做法的优缺点, 说明你是如何把它们融入你的作业中的。
契约式编程就是在编程开始之前,先定下一个虚拟的契约,这个契约规定了类的规格包括前置条件、后置条件以及不变式。
这个做法的优点就是可以让编程变得可靠、可验证。
(四)通过截屏显示你是如何用VS 的unit test 来保证你写的类的质量的。显示unit test 对你的写的类(class) 的覆盖率
![](http://images2015.cnblogs.com/blog/813357/201510/813357-20151007161944549-389958611.png)
![](http://images2015.cnblogs.com/blog/813357/201510/813357-20151007162006128-395360651.png)
![](http://images2015.cnblogs.com/blog/813357/201510/813357-20151007162914253-1177922426.png)
我的没有查看测试覆盖率的功能,于是用阿基的vs来查看的。
用cpp写的,人们都用c#写的,所以根本不能问别人。然后网上说的也不能用。
/*向附加库目录中添加待测试函数的.obj文件目录
如E:\VS2012\Algorithms4\Algorithms4\Debug
向附加依赖项中仅添加待测试函数的.obj文件名,这里是algs4.obj。
设置好后就能够正常运行测试。*/就是这么设置的,结果根本不能正常运行。
以上不是正文所以划去。
(五)画出UML 图显示各个实体之间的关系 (画一个图即可)
![](http://images2015.cnblogs.com/blog/813357/201510/813357-20151007161906924-1441685959.png)
(六)说明你的算法的关键 (不必列出源代码), 以及独到之处
算法实现:
算法有两大部分,第一是生成表达式,第二是匹配式子与结果,这两部分都分别封装成了函数——generate,match。算法中有两个主要的类,分别是分数类(Fraction)和表达式类(Expression)。
分数类的属性有分子、分母、运算符(在有些时候,需要把运算符和分数存在一个数组中),方法有加减乘除,化简,判等,转化为字符串。
表达式类的属性有是否有括号、分数数组、运算符数组、运算符数目,方法有随机生成表达式、从字符串读取表达式、计算表达式、化简运算符数组、表达式判等、转化为字符串。
还有四个异常类,分母为零、产生负数、格式错误、产生分数。
独到之处:
计算表达式时候,从中缀表达式转为后缀表达式,从而计算出结果;
判断表达式是否相同时,判断标准为如果所有运算数和所有运算符和结果都相同,就认为是相同的式子,这样运算量相对小,而准确率很高。
在表达式字符串中,负数的两边用括号括起来,而在结果中,负数两边没有括号。根据字符串构建函数时,先判断两个括号之间如果没有运算符,则将这两个符号删去。
如果输入不合法或者有格式不对的表达式,则会在当前目录生成error.txt文件,其中输出错误信息。如果正确则不产生此文件。
相关文章推荐
- ubuntu装jdk
- Tomcat连接池的配置
- Java web 图片上传(文件上传)
- 从今天开始,每天写一篇博客
- 个人博客作业_week3
- jquery easyui DataGrid
- 排序算法的C语言实现
- [iOS开发项目-7] 超级猜图
- PHP 字符串编码的转换
- 约瑟夫环(N个人围桌,C语言,数据结构)
- 【期望dp】Lightoj 1027 A Dangerous Maze
- DIV CSS布局中绝对定位和浮动用法
- Java产生随机数
- C# 线程管理
- 例题5.24 少林决胜 UVa11383
- HMC5883L 电子指南针
- Java内部类
- 结对编程作业
- Swift中的init方法
- PHP http_build_query()方法