week4结对编程

author author     2022-08-07     467

关键词:

1.照片

  1.1  结对编程参与者:李文涛、黎柏文

  1.2  展示照片

    技术分享

2.结对编程的优点&缺点

  2.1 优点

    2.1.1、两人分工合作,减少了工作量

    2.1.2、结对编程的伙伴往往能提供不同的思维,能提高解决问题的速度

    2.1.3、结对编程的时候能互相测试,更容易发现自己单独发现不了的bug

  2.2 缺点

    2.2.1、结对编程需要经常讨论,不方便集中注意力

  2.3 自己的优缺点

    单独工作的时候效率较高

  2.4 对方的优点

    生活习惯良好,能时刻紧跟进度

3.怎样利用好的设计方法,如Information Hiding, Interface Design, Loose Coupling

  3.1 Information Hidding(信息隐藏)

    代码模块应该采用定义良好的接口来封装,这些模块的内部结构应该是程序员的私有财产,外部是不可见的,因此要做到以下的原则:

    1) 多层设计中的层与层之间加入接口层

    2)所有类与类之间都通过接口类访问

    3)类的所有数据成员都是private,所有访问都是通过访问函数实现的

  3.2 Interface Design (接口设计)

    接口设计的六大原则

    1)SRP(Single Responsibility Principle)单一职责原则:每个接口尽量只负责一个单一的功能,防止混乱,避免不必要的麻烦

    2)LSP(Liskov Substitution Principle)里氏替换原则(为良好的继承定义了规范):子类必须完全实现父类的方法,子类可以有自己的个性(属性和方法),覆盖或实现父类的

    方法时输入参数可以被放大,覆写或实现父类的方法时输出结果可以被缩小

    3)DIP(Dependence Inversion Principle)依赖倒置原则:高层模块不应该依赖低层模块,抽象不应该依赖细节,细节应该依赖抽象

    4)接口隔离原则:不要建立臃肿庞大的原则,要建立单一的接口,接口应该尽量细化,同时接口中的方法要尽量少

    5)LKP(Least Knowledge Principle)最少知识原则:一个类应该对自己需要耦合或调用的类知道得最少

    6)开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭

  3.3 Loose Coupling (松耦合)

    准确的说应该是“强内聚,松耦合”,即程序要模块化,模块的内部各成分之间相关联程度要尽可能高(强内聚),模块与模块之间要是可拆分的,少依赖的(松耦合),耦

    合度依赖于:

    1)一个模块对另一个模块的调用

    2)一个模块向另一个模块传递的数据量

    3)一个模块施加到另一个模块的控制的多少

    4)模块之间接口的复杂程度

4.Design by Contract, Code Contract (契约式设计,契约编程)

  4.1 它们的优点

    1)良好的规格有利于实现的时候进行自我检查,防止“跑偏”

    2)提高了编码的效率

    3)规格以注释的形式呈现,始终保存在代码里面,有利于将来的维护和迭代开发

  4.2 它们的缺点

    1)如果每个函数都要写规格,会显得十分地繁杂

    2)如果一味地追求与规格保持一致,或者说把提前定制好的规格当做《圣经》,容易使得在实现规格的时候缚手缚脚,所以规格应该是动态的,在编码的过程中,必要的

    时候应该改变规格

  4.3 我是如何将他们融入我的作业

    1)在确认好我们的接口中需要实现哪些方法之后,我们没有马上开始写代码,而是花了一晚上的时间完善规格

    2)在写代码的时候,经常会有这种情况:在实现函数fun_a的时候,需要一个函数fun_b,然而之前没有写fun_b的规格,所以这个时候就先暂停,把fun_b的规格补上,

    然后再实现fun_b

    3) 在CodeReview阶段,检查每个函数是否实现了规格,主要检查的是Modifies是否满足,是否有额外的Modifies,Effects是否正确实现了等等

5.单元测试

  5.1 截图(对于SPath和LTPath针对不同的情形做了5对测试)

     技术分享

  5.2 覆盖率

6.UML图

    技术分享

7.算法的实现

  7.1 SPath算法

    直接使用的Dijkstra算法,用二维矩阵存的图,显然地铁图是稀疏图,应该使用邻接链表比较合算一点,下一次迭代会考虑优化

  7.2 LTpath算法

    自己摸索出的一个算法,大概流程如下(如果没有说明跳到哪一步,则表示执行下一步):

    需要的局部变量:队列q1,记录站点是否被遍历的数组st_flag(初始化为false),记录距离的数组dist,记录换乘次数的数组change;记录路径的方式与Dijkstra算法是一

    样的

    1)若起始站和终点站共线,则换乘次数为0 ,可以直接输出,否则跳到2)

    2)找出起始站的所在的所有路线,把这些路线上的所有换乘点都加入队列q1,记录其换乘次数为1

    3)从q1的头部取出一个点,记st_flag[q1.front] = true,判断其是否与终点站共线,若是跳到4),否则跳到5)

    4)计算其dist,change值,

    5)找出该站的所在的所有路线,把这些路线上的所有换乘点并且st_flag为false的都加入队列q1,记录其换乘次数为该站的换乘次数+1

    6)若q1为空,跳到7),否则跳到3)

    7)找出换乘次数change中最小的次数least_change,找出change[i]=least_change且dist最小的那个站,得到其路径

  7.3 源码地址

    Github:https://github.com/libaiwen/se_cooperate_coding

8.引用资料

  8.1 参考的博客、文章链接

    1)绘制UML图:http://www.cnblogs.com/SceneryHao/p/5355915.html

    2)怎么解释Design By Contract:https://www.zhihu.com/question/19864652

    3)强内聚与松耦合:http://blog.csdn.net/bird67/article/details/7561368

    4)接口设计的六大原则:http://www.cnblogs.com/zfc2201/p/3423370.html

  8.2 原创性声明

    本文部分参考了8.1中所罗列的网络资料,其余部分皆为本人原创,欢迎转载和交流,转载请注明出处,请隐去文章中的个人信息

结对编程

内容:成员0:学号:2015035107149姓名:黄妍成员1:学号:2015035107154姓名:马璐结对编程项目作业名称:英文词频检测程序选择该结对编程项目原因:巩固自己的知识,让自己能更加熟练的编程。 查看详情

结对编程

内容:成员0:学号:2015035107149姓名:黄妍成员1:学号:2015035107154姓名:马璐结对编程项目作业名称:英文词频检测程序选择该结对编程项目原因:巩固自己的知识,让自己能更加熟练的编程。 查看详情

结对编程项目

内容:成员0:学号:2015035107149姓名:黄妍成员1:学号:2015035107154姓名:马璐结对编程项目作业名称:井字棋游戏选择该结对编程项目原因:巩固自己的知识,让自己能更加熟练的编程。 查看详情

浅谈结对编程

浅谈结对编程 结对编程  结对编程,是一种敏捷软件开发的方法,极限编程的组成部分。结对编程技术是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计、同一个算法、同一段代码或同一组测试。一人充当&ld... 查看详情

《代码大全2》读书笔记week4

《代码大全2》第8章:防御式编程    防御式编程的主要思想是子程序应该不因为非法的输入值被破坏,就好比开车时的防御式驾驶:你无法预估其他司机将会做什么,但你要采取措施保证当他人做出危险动作时自... 查看详情

结对编程心得

结对编程是我第一次听说到的一个编程方式,结对编程就是两个人组成一个小队伍进行编程,是一种新的编程思想。结对编程的优点有以下这几点第一点,就是思考问题的角度,一个人思考问题肯定没有两个人思考问题来的明白... 查看详情

结对编程

结对编程技术是指两位程序员坐在同一工作台前开发软件。与两位程序员各自独立工作相比,结对编程能编写出质量更高的代码。我的结对编程的队友是徐冉,我们互相了解,形成一定的默契,徐冉同学对任何事情一丝不拘的态... 查看详情

结对编程作业

结对编程成员:王向阳,彭雪峰(http://www.cnblogs.com/PPXXFF/)驾驶员:王向阳领航员:彭雪峰代码链接https://coding.net/u/K_sun/p/code/git/blob/master/goldGame总结:通过此次的结对编程,更加了解到结对编程的好处,通过结对编程可以使自己... 查看详情

结对编程

我的结对编程队友:周云关于结对编程,发现了一些新的受益之处。首先,它可以促进我们自身的提高,两个人一起看代码时,能取长补短。我和我的结对编程队友一起看代码,然后我们互相交流一下各自的意见,从而把我们的... 查看详情

结对编程作业

结对编程作业(黄金点游戏)我的角色:驾驶员。结对编程伙伴:王香友(领航者)。1.源代码已上传到coding.net中,网址如下: https://coding.net/u/Qbj/p/STAR-COD/git/blob/master/huangjiandianyouxi2.结对编程作业总结、过程图片、运行结果... 查看详情

结对编程作业

  最近在写结对编程,通过写结对编程作业了解了在将来的工作会是什么样。在结对编程中使我了解到结对编程的优点。由于我的编程能力能比我队友好一点,所以本次由我来进行编程,我队友进行复查。  本次的作业是黄... 查看详情

结对编程项目作业

 结对编程项目作业内容:成员0:    学号:2015035107153    姓名:吕爽成员1:    学号:2015035107155    姓名:陶丽爽结对编程项目作业名称:四则运算出题器。选择该结对编程项目... 查看详情

结对编程

  结对编程是指两个人在同一台电脑上进行的编程,其实结对编程做起来很简单也很有趣,找个水平差不多的和自己配成一对。只用一台计算机,大家选一个人坐在键盘前面负责输入,另一个人坐在后面口述。两个人要不... 查看详情

结对编程体会

...,在试用了两种方法后,选择了一个比较好的编写程序,结对编程减少了自己一个人想不到问题浪费的时间,结对编程有利于自己编程能力的提高,也有利于交流思想。 查看详情

第五周任务以及结对编程

...容有下:    1.完成自己没完成的任务。    2.结对编程。    3.PSP。    4.站立会议(待开)。    5.燃尽图。具体任务如下:    这次结对编程我是和高鑫同学进行结对,在对构建之法这本书的学习... 查看详情

结对编程

   1.结对编程任务分配:    驾驶员:王璐    领航员:谢雨豪  2.黄金点程序代码地址:    https://coding.net/u/xyh103/p/a103/git/blob/master/main.cpp  3.结对编程心得总结:    这次的编程任务是我与王璐同学... 查看详情

结对编程

作业结对编程一结对成员陈颖锋201421122113许鸿洋201421122114项目开发的coding.net地址:https://coding.net/u/ricardoCYF/p/zuoye3/git二项目描述一个小组中的两个同学选取比较优秀的作业1 (两个人的都独立完成了), 把它作为本次作业的... 查看详情

结对编程

结对编程顾名思义就是和队友一起合作编程,共同完成项目开发。这次结对编程我的结对队友是张梦秋,为什么会选择和她合作呢?因为在以前的项目实训中我们就彼此合作过,感觉彼此能有默契的配合完成工作,而且我们还是... 查看详情