结对项目博客

我的结对伙伴是马瑶华,来自130617班,学号13061183

一、结对编程的优缺点

  优点:

  1. 程序员互相帮助,互相教对方,可以得到能力上的互补。
  2. 可以让编程环境有效地贯彻Design。
  3. 增强代码和产品质量,并有效的减少BUG。
  4. 降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。
  5. 在编程中,相互讨论,可能更快更有效地解决问题。

  缺点:

  1. 对于有不同习惯的编程人员,可以在起工作会产生麻烦,甚至矛盾。
  2. 有时候,程序员们会对一个问题各执己见(代码风格可能会是引发技术人员口水战的地方),争吵不休,反而产生重大内耗。
  3. 两个人在一起工作可能会出现工作精力不能集中的情况。程序员可能会交谈一些与工作无关的事情,反而分散注意力,导致效率比单人更为低下。
  4. 结对编程可能让程序员们相互学习得更快。有些时候,学习对方的长外,可能会和程序员们在起滋生不良气氛一样快。比如,合伙应付工作,敷衍项目。
  5. 面对新手,有经验的老手可能会觉得非常的烦躁。不合适的沟通会导到团队的不和谐。
  6. 新手在面对有经验的老手时会显得非常的紧张和不安,甚至出现害怕焦虑的的精神状态,从而总是出现低级错误,而老手站在他们后面不停地指责他们导致他们更加紧张,出现恶性循环。最终导致项目进展效率低下,并且团队貌合神离。
  7. 有经验的人更喜欢单兵作战,找个人来站在他背后看着他可能会让他感到非常的不爽,最终导致编程时受到情绪影响,反而出现反作用。

二、结对伙伴的优缺点:

  优点:

  1.编程能力强,对于自己并不熟悉的语言也能很快上手

  2.性格好,因为我的编程水平比较弱渣,所以马瑶华总是非常认真的教我应该怎么去做这个项目

  3.对于自己的任务非常负责,责任心非常强

  缺点:

  有时候会犯懒不愿意做事情。

三、程序分析

独特之处:

1.在算法效率上,我们一开始想得比较多。我们认为难点主要就集中在如何确保每次生成的表达式是唯一的,也就是说表达式都是不重复的。因为要求是a+b和b+a视作同样的表达式,所以逐字比对是不可行的。而且在一些极端情况,比如生成1万个表达式,难道每次生成一个就和以前的比对吗?那么仅仅是最后一个生成的表达式就要至少比对1万次。我们认为这样做虽然能满足所有的题目要求,但是效率无疑是不高的。我们想了一个方法,在每次生成的时候仅经过少量的比对,就能确定生成的表达式是唯一的。首先一个表达式里有符号和数字,符号只有加减乘除括号,如果两个表达式的符号的种类或数量不一样,那么两个表达式一定是不同的。目前所生成的表达式可以按照符号来归类存储,每次新生成表达式,先按照符号种类索引,如果符号种类相同再比对数字。这样的方法使得比对次数减少了很多。

2.UI设计简洁易用

3.代码分页,结构清楚。

计算部分为一个单独的类Calculate,计算方法为Calculate.Calc

4.有注释

3.原则分析

(1)Information Hiding(信息隐藏)

  信息隐藏是结构化设计与面向对象设计的基础。在结构化中函数的概念和面向对象的封装思想都来源于信息隐藏。

  David Parnas在1972年最早提出信息隐藏的观点。他在其论文中指出:代码模块应该采用定义良好的接口来封装,这些模块的内部结构应该是程序员的私有财产,外部是不可见的。       Fred Brooks在《人月神话》的20周年纪念版中承认了当时自己对Parnas的批评是错误的。他说道:“我确信信息隐藏--现在常常内建于面向对象的编程中--是唯一提高设计水平的途径”。 一些信息隐藏原则的应用:      1、 多层设计中的层与层之间加入接口层;      2 、所有类与类之间都通过接口类访问;      3 、类的所有数据成员都是private,所有访问都是通过访问函数实现的;Via:http://blog.csdn.net/acloudhuang/article/details/6635230)

  在写面向对象类型的软件或者程序的时候,要考虑到用户的使用问题,也要注意自己的代码保密问题,这个原则的使用能够很好的维护这个问题。

(2)interface design(接口设计)

  清晰是第一步,也是最重要的工作界面。什么算是有效使用你设计的一个接口?人们必须能够认识到它是什么,关心他们为什么会使用它,帮助他们理解接口相互作用,预测使用它会发生什么,然后成功地与之交互。

  最 好的接口是根本没有,当我们能够直接操纵物体在我们的世界。因为这并不总是可能的,这个世界上有越来越多的信息和对象,我们创建接口来帮助我们与它们进行 交互。很容易添加更多的接口层,创建overly-wrought按钮,chrome,图形,选择,偏好,附件和其他繁琐的东西。这样我们最终操纵的UI 元素而不是重要的事情。相反,追求原始的目标直接操作,设计一个接口与尽可能少的足迹,识别尽可能多的自然人类的手势。理想情况下,界面非常轻,,用户直 接操作他们关注的对象。

(3)loose coupling(松耦合)

  松耦合的基本概念是:允许改变或者当问题发生在“电线的一端时”来避免影响到其他的端点。也就是说,改变或者供应者或者服务的问题不能影响到用户——或者用户的问题不应影响到供应者或者服务。

  举例来说,如果服务的新版本被推出的话,服务的用户就不必非要去修改,不必非要去改变路线,甚至不必经历停滞期----因为它(服务的新版本被推出)能清  楚地向他们显示出来。相对而言,如果服务的一个用户决定改变他们正在使用的供应者(可能有了一个更低价格的服务供选择),这不需要用户应用必须要被重新编 码,甚至是中断来做这样的改变。

  程序组件之间的松散耦合可以通过使用增强的标准数据类型参数。通过定制数据类型或对象需要组件定义数据定义的知识。松散耦合的服务可以增强通过减少信息传递到一个服务的关键数据。

原文地址:https://www.cnblogs.com/zmxch1306/p/4857739.html