第五次作业

  1. 度量分析

因为第五次作业是在第三次作业的基础上改的,所以出现了与第三次作业一样的问题,即圈复杂度超标和嵌套现象严重。同时,由于对多线程的不熟悉,将一些功能集中的放入了一个类里,这也是McCabe Cyclomatic Complexity和Nested Block Depth标红的原因。

  2.类图

从类图可以看出度量分析中体现的问题,即在方法的分配上不平均,将大部分功能都交给了dt类,导致这个类很冗长,从而也影响了整个程序的简洁性。

  3.BUG

对于这一次的电梯作业,第一次用多线程来解决问题,感觉压力很大。在思考,设计和实现的过程中,遇见了很多问题,用了很多的时间。直到最后,对多线程安全的理解也是似懂非懂,导致在公测和互测中出现了很多BUG。首先公测中,出现几个粗心的BUG,(1)没有输出T(2)没有把结果输出到result,输出到了控制台。这两个简单的BUG,都是因为没有仔细的阅读指导书导致的,所以要认真的阅读指导书的要求,才能避免一些简单的BUG。然后出现了指令分配错误,指令执行的时间输出以及指令本身的输出有问题和电梯选择不正确的BUG。而回到程序中去解决BUG的时候,发现主要是qingq类,即分配指令的类出现了问题。而这个类的设计问题,导致出现了一系列的问题,所以对每一个类的设计都应该反复的思考和测试。作为被测者,被发现了两个BUG,一个是测试完后程序的线程没有关闭,这个是因为对多线程的不熟练导致的。作为测试者,发现了对面的公测出现了三个错误,全是关于捎带问题的。这次作业比较难,不仅整体的设计上容易出现问题,在一些细节上的处理也容易出现问题。第一次多线程作业,带来了很多关于多线程的反思和经验。

第六次作业

第六次作业是对文件的各种操作与监控,因为对作业目标和很多新操作的不清楚,没有及时做完提交,就不做分析了。

第七次作业

  1. 度量分析

第一次出租车作业,仍然出现了之前的问题。因为将很多的功能放到了taxi类里,以及if-else的大量使用,导致嵌套严重。因此以后需要注意这些问题。

  2.类图

这次的类图比较简单。

  3.BUG

尽管这是第三次多线程作业,但是对于多线程的理解和具体实现,仍然有很多不明白的地方。就这次作业而言,公测与互测中,出现了两个BUG。公测中有一个BUG,是当输入指令的关键字错误时,没有报错。互测中的BUG是,当没有出租车响应乘客请求时,没有告知乘客。而作为测试者,发现了对方的两个BUG,一个是输出格式的错误,没有输出途径节点的坐标和时刻,另一个BUG,是输出时间不正确,回到对方的程序中,发现他的设计没有问题,只是在计算时间的时候用到了系统时间,而系统时间在调用gui,计算最小距离时,可能出现了延迟,导致最后算出的时间多了100ms或200ms。

心得体会

1.第一次接触学习多线程,发现理解起来有困难。而在用多线程解决问题时,发现对于多线程的项目的架构设计也有困难,因为要清楚建立多少个类,多少个线程,每个类都承担什么功能,线程与线程之间的关系,才能将更好的解决问题。

2.线程安全是多线程的关键。对共用资源的分析,是否对其进行保护,将影响程序是否出现一些不合乎常理的错误。因为多个线程同时运行的情况下,会对公共资源进行争夺,如果不加管控,可能会对公共资源进行难以意料或是不想要的操作和改变。所以在设计时,要分析线程之间的关系,要分析清楚共用资源。

3.虽然尽力的完善设计,但是实现的过程中总会有一些问题。只是在处理这些问题时,需要思考的是这个问题与整体设计的联系,这样才能及时的发现整体设计的问题,不然,这个问题解决了,仅仅是解决了局部的问题。

oo第二次总结的更多相关文章

  1. OO第二次博客作业——电梯调度

    OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...

  2. oo第二单元作业总结

    oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电 ...

  3. OO第二单元优化博客

    OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下lo ...

  4. OO第二次博客作业—17373247

    OO第二次博客作业 零.写在前面 OO第二单元宣告结束,在这个单元里自己算是真正对面向对象编程产生了比较深刻的理解,也认识到了一个合理的架构为编程带来的极大的便利. (挂三次评测分数 看出得分接近等差 ...

  5. 【OO学习】OO第二单元作业总结

    OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...

  6. OO第二次作业总结

    OO~第二次作业总结 连续三周的电梯作业结束了,总的来说这三次作业做的还算平稳,既没有被刀,也没有刀中别人.那么接下来开始谈谈我对这三次作业的认识. 一.设计策略 我三次作业的设计思路基本上是相同的, ...

  7. OO第二单元小结

    OO第二单元小结 一.三次作业代码分析. 1.第一次作业 第一次作业是单部电梯的傻瓜调度,由于其过分傻瓜,所以第一次作业我只有两个类,一个main,一个电梯,main类负责不断从输入流中读取命令,如果 ...

  8. OO第二单元多线程电梯总结

    OO第二单元多线程电梯总结 第一次作业 设计思路 Input为输入线程,负责不断读取请求并将读到的请求放入调度器中. Dispatcher为调度器,是Input线程和Elevator线程的共享对象,采 ...

  9. OO第二次单元总结

    OO第二次单元总结 前言 第二单元的三次作业:系列电梯与多线程. 第五次作业 (1)设计策略 电梯的第一次作业是单部傻瓜电梯,采用FAFS调度策略,电梯按队列顺序依次处理请求,单次只处理一个请求.本次 ...

  10. OO第二次单元总结——电梯多线程调度问题

    OO第二次单元总结--电梯多线程调度问题 在这个单元OO学习中,我们终于迎来了期待已久(不是)的电梯多线程调度作业,开启了OO打怪之路的新关卡.虽然说经过了这三次作业,我对于多线程的理解还不能算是熟练 ...

随机推荐

  1. 版本控制工具 - Git

    版本控制工具 - Git 安装完成后,打开Git Bash,这是一个命令行工具,用于操作仓库和仓库的文件.你可以通过命令将已经存在的项目变成仓库,也可以重新创建一个新项目再通过命令将其变成仓库,还可以 ...

  2. oracle利用redo恢复

    oracle媒介恢复(Media Recovery) 官方资料 https://docs.oracle.com/database/121/ADMQS/GUID-CBC5870F-2C9A-4F67-B ...

  3. bzoj2733 永无乡 splay树的启发式合并

    https://vjudge.net/problem/HYSBZ-2733 给一些带权点,有些点是互相连通的, 然后给出2种操作,在两点间加一条边,或者询问一个点所在的连通块内的第k小值的编号 并查集 ...

  4. jarvisoj level5爬坑

    本着纸上得来终觉浅,绝知此事要躬行的原则,把一个简单的ROP做了一下.漏洞很明显,libc有给出:唯一的限制就是不允许调用system或execve,而是用mprotect或者mmap 脚本调了半天, ...

  5. HTML基础-标签

    html标签元素 html标签 在HTML静态页面中,每个网页具有唯一`<html></html>`,即`<html>`标签. html div标签 即网页中的盒子 ...

  6. springboot集成mybatis源码分析(一)

    本篇文章只是简单接受使用,具体源码解析请看后续文章 1.新建springboot项目,并导入mybatis的pom配置 配置数据库驱动和mybatis dependency <dependenc ...

  7. Kali linux2.0里Metasploit的postgresql selected, no connection问题解决

    说在前面的话 1.在kali中metasploit默认使用postgresql作为它的数据库: 想要开启metasploit服务首先得打开postgresql数据库, 命令如下:(或者:/etc/in ...

  8. LeetCode545.Boundary-of-Binary-Tree

    1.头节点为边界节点 2.叶结点为边界节点 3.如果节点在其所在的层中是最左边或最右边,那么也是边界节点. 思路:分成三部分来做:找左边界结点.叶结点.右边界结点. 找左边界结点要遍历root的左子树 ...

  9. 微软拼音转换工具类ChnCharInfo.dll

    1.简介 之前做汉字转拼音是使用各种枚举的方式,将各种情况列举,这种方式出错的机率很大,经常对不上号.(如果你想了解更多:http://www.cnblogs.com/islands/articles ...

  10. matplotlib基本用法-【老鱼学matplotlib】

    本文介绍一下matplotlib的最基本用法. 这次我们要显示一个线性方程的直线. 首先要引入matplotlib库,一般是用plt这个简写的,我们就按照大多数人的惯例来进行命名: import ma ...