Pair Project —— Elevator Scheduler

结对编程人员

  12061153  刘丽萍

  12061154  冯飘飘

说明结对编程的优点和缺点。

  结对编程的优点:

  以前都是自己一个人编程,对于相互结对或者团队编程都没有接触过。而自己在写代码时不可避免的会出现小错误,有时是打字错误,有时候是算法并没有完全用代码展现完整,而结对编程刚好实现了这种“两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等”的环境,使我们的代码处在不断的复审当中,如果一个写代码的人边思考边写出来的有些许bug,结对的另一个人可以随时提醒他,这样避免了以后查找bug时的繁琐。再者,两个人相互交流自己的想法可以使工程的算法更完善,以一个更好更简便的方式实现,同时两个人在交流过程中得到学习,发现对方思维中的闪光点,可以更好的促进自身的进步。

  结对编程的缺点:

  由于每个人对于代码的理解不一样会造成复审效果的降低,并且两个人的交流也不是编程时时时刻刻都存在,有时会两人不在一块,导致一方不了解另一方的进度,而又要花时间去熟悉。

结对的每一个人的优点和缺点在哪里 (要列出至少三个优点和一个缺点)。

刘丽萍同学的优点:认真负责、思维独特、查bug有一套

      缺点:不太会写代码

冯飘飘同学的优点:能写代码、

      缺点:没耐心,不喜欢查bug

看教科书和其它资料中关于 Information Hiding, interface design, loose coupling 的章节,说明怎样利用这些好的设计方法。

Information Hiding : 类与类之间要相互利用私有变量时用定义的方法去调用获取私有变量,如get和set,可以很方便的访问变量。如这次的电梯调度,类与类之间用接口相互连接,很多信息只能通过接口类访问。

Interface Design : 接口设计是功能的封装,在写程序之前想好接口要实现的全部功能,如果后来用户需求改变了,则可以直接改变实现接口的类。

Loose Coupling : 松耦合,防止两个类之间交互性太强,改动一个会使另一个也有改动,可用接口连接两个类,使改动一个类的代码时不用担心会影响到另一个类。

描述Design by Contract, Code Contract这些做法的优缺点, 说明你是如何把它们融入你的作业中的。

  Contract契约是对Object对象行为的描述表达,也就是说:一个对象的行为方法做到什么样为合适?通过契约来约定是一种主要的设计方法。

  DBC分三种:  
    1.Post-conditions 后置条件postcondition 表示调用一个方法一定会得到的结果。类似断言Assertion,如果语言不支持断言,那么我们就必须自己写断言,也就是测试驱动了。    

    2.Pre-conditions 前置条件precondition ,预先保证后置条件必须满足前置条件。前置条件必须满足,后置条件必须实现,通过契约的前置嗯哼后置条件的结合,就不会出现有隐藏功能的obligations,这样,事情清清楚楚的摆出来,这样设计才能落实为代码。

    3.类不变量class invariant 表示对象状态的断言,执行完任何操作后都都应该被满足,不变量还是对聚合体进行完整性严格定义。

    引用自: http://www.jdon.com/36303

  有点是明确函数功能,充分保证函数实现时的正确性,也保证了代码的正确性和质量。

  缺点是对于程序语言有一定的要求,契约式编程需要一种机制来验证契约的成立与否。而断言显然是最好的选择,但是并不是所有的程序语言都有断言机制。那么强行使用语言进行模仿就势必造成代码的冗余和不可读性的提高。比如.NET4.0以前就没有assert的概念,在4.0后全面引入了契约式编程的概念,使得契约式编程的可用性大大提高了。此外,契约式编程并未被标准化,因此项目之间的定义和修改各不一样,给代码造成很大混乱,这正是很少在实际中看到契约式编程应用的原因。

  写代码时明确函数的功能,确保它传进去的参数需要满足什么条件,执行这个函数后又该满足什么条件,其中的不变式又是怎么写的保证执行完任何操作后都应该被满足,上个学期学习面向对象时吴际老师让我们学习并练习了这方面的内容。

通过截屏显示你是如何用VS 的unit test 来保证你写的类的质量的。显示unit test 对你的写的类(class) 的覆盖率

画出UML 图显示各个实体之间的关系 (画一个图即可)

说明你的算法的关键 (不必列出源代码), 以及独到之处。

  其实算法并没有什么……也没有独到之处。因为刚开始准备写一种比较智能的电梯,好容易写好代码以后,熬夜调了几天给的样例都不能全部跑通,最后实在没有办法了,第二天就是deadline,觉得这种智能型的实在不是我们能够驾驭的了的了。然后就采取了最普通的一种方法:只是在BUS的基础上判断每层是否有人可以进入或者出电梯然后再决定开不开门,给电梯加了一个是否开关门的信号,电梯来回从最高最低楼层之间运行,相较于BUS节约了开门的时间,但是觉得在高峰期这个完全不会有多大影响,但是结果竟然快了不少,也是很令我和我的小伙伴诧异的了……

  BUS
我们的算法

passenger1.xml  217.05             137.55           
passenger2.xml 949.133 447.023
passenger3.xml 1426.373 642.043
时间: 2025-01-09 23:24:32

Pair Project —— Elevator Scheduler的相关文章

pair project elevator

结对编程——电梯调度 12061181 高孟烨 12061182 郝倩 1.结对编程的优缺点: 优点:可以充分发挥两个人各自的优势,每个人擅长的地方不同,两个人一起合作效率会更高. 缺点:如果两个人的实力相差太大或者态度不端正无法较好的沟通交流,则会使任务失败. 2.各自优缺点: 高孟烨:能够想出各种算法:细致.动手能力相对较弱. 郝倩:时间观念强:代码能力不弱.做事情不是很细致. 3.一起合作编程的照片 4.Design by Contract, Code Contract 契约式设计的核心是

Pair Project 1 elevator

结对编程——电梯调度 12061181 高孟烨 12061182 郝倩 1.结对编程的优缺点: 优点:结对编程可以结合两个人各自擅长之地,充分发挥两个人各自的优势,两个人一起合作效率会更高.一份工作两个人一起完成,每个人的强项.弱项不同,如果分工合理,便可以事半功倍 缺点:如果两个人的实力相差太大,则会造成沟通困难,一起写程序也会遇到一定的麻烦.或者如果有人态度不端正,无法进行好的沟通交流,则会使任务失败,两个人也得不到应有的锻炼. 2.各自优缺点: 高孟烨:算法构建能力较强:做事认真,细致:善

Pair Project:电梯控制程序

12061160刘垚鹏 & 12061166宋天舒 1.1结对编程的优缺点结对编程相对于个人编程有很多优点.首先,督促作用,在讨论过程中能够很快投入工作,为了不耽误对方时间,我们会尽快完成各自的任务:第二,节约时间,相互交流,能够更快的确定算法方案,比起一个人苦思冥想要来的快得多:第三,提高效率,一些简单的unit,一个人能够很简单的完成就可以分给不同的人去做:对于核心的unit,比如说此次项目电梯调度的算法部分,这是一个核心的部分,需要我们共同讨论,经过讨论后确定较优的方案再去实现:或者在遇到

pair project

一:题目简介 这个java项目是一款打字游戏,运行后点击开始会从屏幕上方掉落数字或字母,且数字及字母为无顺序随机掉落,玩家可以在看到字母或数字后在键盘上输入相应字母或数字将其消除,消除相应个数的字母或数字后,玩家将进入下一关,即加速状态:若在规定时间内没有消除相应字母或数字,则游戏失败. 游戏速度有快有慢,玩家可以在游戏开始之前选择适合自己的游戏速度,稳定练习或者挑战极限. 二:结对分工1:闻保东:负责代码找寻与编写部分2:孙婧   :负责代码修改与运行测试部分 三:测试截图 1.开始界面  

代码复审结果报告

在本次代码复审的作业中,我审阅的是我的pair project的partner郝倩的个人项目代码.下面我汇报一下本次代码复审的结果. 首先我说一下她的代码的优点.首先,她的代码在关键的地方都加上了注释,我在读她的代码的过程中会感觉到轻松很多.同时她的注释基本上没有加在那些显而易见的代码的部分,而是加在必要的点上.第二,从整个程序的结构上看,这份代码的思路十分清晰,并且每一个模块的实现都是使用尽可能简单的方法,这对于日后代码的维护有很好的作用.第三,从细节上来看,这份代码在变量命名上非常好,基本上

《Tuning I/O Performance》读后笔记

<Tuning I/O Performance>,文章地址:http://doc.opensuse.org/products/draft/SLES/SLES-tuning_sd_draft/cha.tuning.io.html 大家在读了原文后若有更好的见解,请不吝赐教,谢谢! 文章以SUSE Linux Enterprise Server为例讲解了Linux系统的IO调度策略及调优,可适应于其他Linux操作系统,如CentOS.UBUNTU等. 1.查看当前IO调度策略(大多数Linux发

Linux 性能优化之 IO 子系统 系列 图

http://blog.sina.com.cn/s/articlelist_1029388674_11_1.html Linux 性能优化之 IO 子系统(一) 本文介绍了对 Linux IO 子系统性能进行优化时需要考虑的因素,以及一些 IO 性能检测工具. 本文的大部分内容来自 IBM Redbook - Linux Performance and Tuning Guidelines FileSystem VFS(Virtual FileSystem) 虚拟文件系统 文件系统是内核的功能,是

(WIP)SSD上的I/O电梯算法与HugePage设置可能导致的Crash(by quqi99)

作者:张华  发表于:2016-03-24版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99 ) 问题 虚机里的某个进程Hang住了,使用"cat /proc/diskstats"命令查看一个SSD硬盘上有很多请求列队. hung_task_timeout_secs参数与D状态 进程等待IO时如果处于D状态,即TASK_UNINTERRUPTIBLE状态,处于这种状态的进程不处理信号,所以ki

查询表达式和LINQ to Objects

查询表达式实际上是由编译器“预处理”为“普通”的C#代码,接着以完全普通的方式进行编译.这种巧妙的发式将查询集合到了语言中,而无须把语义改得乱七八糟 LINQ的介绍 LINQ中的基础概念 降低两种数据模型之间的阻抗失配过程中,遇到的一个问题就是,通常会涉及创建另一个模型来作为桥梁 序列 它通过IEnumerable和IEnumerable<T>接口进行封装 序列和其他集合数据结构最大的区别:当你从序列读取数据的时候,通常不知道还有多少数据项等待读取,或者不能访问任意的数据项——只能是当前这个