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. <后会无期>经典影评

    先说明是转载,任何不同意见请对原作者表达,楼主不作任何回应,楼主影商极低,楼主觉得这二十几年来看的最好的电影是<一代宗师>,楼主只是觉得这篇影评精彩才发布上来让更多的人看到.原作者意见和楼 ...

  2. 好老板VS坏老板

    以下是漫画图解: 现在大家应该都能做出正确的判断了吧? 那90后的员工碰上70后的老板又会如何呢? 过去30多年来,基于资源禀赋.行政区划及产业政策等,形成了不同城市发展格局,接下来十年中国经济结构调 ...

  3. ambari初始化登陆账号/密码假如不是admin/admin

    如题:通常软件初始化密码都是admin: 但是hortonworks就突然傻逼了,居然不这样搞.(可能知道一些开发者不看官网文档,就特意弄成这样.正如我) 我上网搜了5分钟.感觉网上应该没有这样的资料 ...

  4. 调用CXF工具 生成 WSDL【转】

    在做WebService的时候,生成WSDL是必不可少的一步.我们通常使用的工具就是Axis和CXF. CXF提供了一个命令行工具,可以通过命令来生成Java to WSDL,也可以由WSDL生成Ja ...

  5. Spring3系列3 -- JavaConfig

    Spring3系列3-JavaConfig-1 从Spring3开始,加入了JavaConfig特性,JavaConfig特性允许开发者不必在Spring的xml配置文件中定义bean,可以在Java ...

  6. jQuery Mobile Data 属性

    按钮 带有 data-role="button" 的超链接.button 元素.工具栏中的链接以及 input 字段都会自动渲染成按钮样式,不需要添加 data-role=&quo ...

  7. [论文笔记] Methodologies for Data Quality Assessment and Improvement (ACM Comput.Surv, 2009) (1)

    Carlo Batini, Cinzia Cappiello, Chiara Francalanci, and Andrea Maurino. 2009. Methodologies for data ...

  8. IIS7.5配置SSL

    1,首先需要准备两个证书(CA证书,服务器证书). CA证书由公共的CA机构提供,widnow系统内部已经内置了很多这类证书,如图(日文系统). 服务器证书是导入到IIS里面用的. 2,有了上面的认识 ...

  9. Idea 201601注册码

    参考链接 http://blog.csdn.net/u010310183/article/details/51162137 在license 下面输入 http://www.iteblog.com/i ...

  10. vxworks下网络编程一:网络字节序问题

    inet_addr("192.168.1.1");//返回网络字节序整型ip地址inet_ntoa(saddr);//将包含网络字节序整型ip地址的in_addr对象转换成本地ch ...