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中所罗列的网络资料,其余部分皆为本人原创,欢迎转载和交流,转载请注明出处,请隐去文章中的个人信息

/*======================================2016.10.07更新==================================================*/

9.GUI界面

GUI界面使用的是外部类库Qt来实现

  9.1效果图

    

    注:地铁图是按照实际物理空间的距离比例显示的

  9.2代码:GUI控件

    主要控件包括Text_Edit、GraphicView等,可以直接通过Qt Creator进行图形化编辑。其中最为关键的部分是显示地铁图的GrphicView,批量添加元素(Item)来画图

  9.3代码:数据来源

    显示的占点位置是根据经纬度位置进行显示的,取平均点为中心进行缩放。数据来源:http://www.myexception.cn/other/1884652.html

    颜色的数据,通过windows自带画图软件从地铁图中选取出来

  9.4代码:闪烁动画

    采用了类似Sleep的机制来变换颜色以达到闪烁的动画效果,利用的是QElapsedTimer来实现

  9.5问题与后记

    其实我原来的想法是做成直接显示在地铁缩略图,即这张图上面:

  但是苦于要让每一个点有闪烁的动画,就需要知道每一个点的位置坐标,这个我没想到怎么实现,于是就没有采用这种方案。

  转而,我采用了显示和实际位置成比例的显示模式,效果还不错。

Week4 结对编程的更多相关文章

  1. 结对编程--基于android平台的黄金点游戏

    游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...

  2. 结对编程-地铁续(有种上个学期OO的既视感)

    我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...

  3. 结对编程项目——四则运算vs版

    结对编程项目--四则运算vs版 1)小伙伴信息:        学号:130201238 赵莹        博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...

  4. 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结

    1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...

  5. 结对编程—黄金点游戏WinForm单机版

    本小游戏场景来自邹欣老师的<移山之道>一书: "阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: ...

  6. 结对编程——关于Fault、Error、Failure程序设计

    一.问题描述:         构造程序,分别是:         •不能触发Fault         •触发Fault,但是不能触发Error         •触发Error,但是不能产生Fai ...

  7. GUI、模块化与结对编程(homework-03)

    摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ...

  8. BJDP结对编程活动

    7月21日参与了 BJDP北京的活动 在北京首次参与能够参与动手编程活动,感觉挺不错的. 本次活动共有三项内容 1.      金锐分享单元测试的Mocking技术,20 mins 2.      伍 ...

  9. 敏捷开发松结对编程系列:L型代码结构案例StatusFiltersDropdownList(中)

    这是松结对编程的第22篇(专栏目录). 接前文 业务代码 比较长,基本上就是看被注释隔开的三大段,先显示状态群筛选链接,然后是单个状态筛选,然后是显示下拉框的当前选中项,最后显示下拉框. public ...

随机推荐

  1. SVO实时全局光照:中等规模场景的GI实现

    RTGI人生成就点unlocked! 快速集成DR+AO+SVO GI,针对中等场景粒度,初步具备全功能,暂未重度优化.附测试对比图.

  2. spring整合activemq发送MQ消息[queue模式]实例

    queue类型消息 pom依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</ ...

  3. Web 开发常备工具

    工欲善其事,必先利其器.如今 Web 开发标准越来越高,Web 开发者也在不断寻找途径提升自己的技能.为使大家的开发工作更顺利进行,本文整理了 10+ 款比较优秀的 Web 开发工具,希望对你有帮助. ...

  4. [转载] Calculating Entropy

    From:  johndcook.com/blog For a set of positive probabilities pi summing to 1, their entropy is defi ...

  5. Crystal Reports 支持的纸张种类

    DefaultPaperSize Paper10x14 254 x 355.6 mm Paper11x17 279.4 x 431.8 mm PaperA3 A3 ?,297 x 420 mm Pap ...

  6. gitignore for vs

    */**/bin/Debug*/**/bin/Release*/**/obj/Debug*/**/obj/Release*/**/x86/Debug*/**/x86/Release*/**/x64/D ...

  7. 关于DDD的 认识

    tks: 第一篇: 领域驱动设计系列(1)通过现实例子显示领域驱动设计的威力 第二篇: 领域驱动设计系列(2)浅析VO.DTO.DO.PO的概念.区别和用处 第三篇: 领域驱动设计系列(3)有选择性的 ...

  8. 日暮·第二章·烽烟传讯

    第二章 烽烟传讯   夜幕降临,整个泉州府更见喧闹,那些个白日里将养了一日的花红柳绿再也耐不住寂寞,招招摇摇着在人来人往的主街上舒展着自己的风情,妖妖娆娆地换却春风一度.    城东的招福客栈在经过了 ...

  9. 在Win8.1系统下如何安装运行SQL Server 2005 (以及安装SQL Server 2005 Express打补丁)

    在Win8.1系统下SQL Server 2005 安装失败怎么办? 需要替换两个文件及打sqlserver sp4补丁. 以下是操作过程. 按正常情况,在Win8/Win8.1系统下安装微软的SQL ...

  10. [ linux ] pad远程

    ---恢复内容开始--- ssh: serverauditor vnc:vnc viewer ubuntu: sudo apt-get install x11vnc sudo apt-get inst ...