第八次oo作业
作业五
作业五是当前最后一次电梯作业,也是我们第一次接触到多线程编程,输入方式也由之前的一次性输入变为了实时输入,其中涉及到大量的同步和冲突,其中学习多线程的使用也花了大量的时间,但总的来说为以后的作业打下了基础。
类图

代码分析

从上述分析来看,此次作业仍然存在God类,究其原因主要是因为第一次接触多线程,使用不熟练,导致对电梯使用多线程时不敢将太多逻辑置于电梯类中,从而导致了大量逻辑代码都留在了调度类中,但调度类中的方法较之于之前已经更加详细具体了,方法之间已经尽量做到了高内聚低耦合。
总结
由于从第一次做电梯作业开始,我就是使用的模拟的方式,所以程序整体的逻辑上没有进行大的修改,但由于此次多线程的使用,尤其是多台电梯之间捎带和请求分配之间的问题,依然存在着不小的问题,所以到最后提交时,依然存在着bug————调度类中逻辑较为复杂,而且由于多线程控制不到位,对于请求队列没有完全实现线程安全,导致会出现多个电梯同时分到同一个请求的情况发生。但由于修改量的巨大,所以未能完成修改,而测试者也将为完成的修改造成的bug找了出来。
除此之外,此次作业的时间控制也不够精确,此次作业没有考虑到程序执行带来的大量误差,直接采用了sleep(3000)的方式,导致随着程序的运行,误差会越来越大,以至于超过误差限度。
但此次作业也第一次采用了构建一个State类的方式,将常用到的状态量定义为常量,极大的提高了代码整体的可阅读性。
作业六
作业六是要求实现一个简单的ifttt,将我们所学内容与实际运用结合了起来,但由于对于文件操作的不熟练,在编写代码时也遇到了不小的问题。
类图

代码分析

此次作业代码量和风格的控制较于第五次作业有了较大的提升,同时对于多线程也能够较为熟练的运用了,此次作业的自由度较之于之前的作业也有所提高,故readme的书写也应该被逐渐重视起来。
此次作业被找出了一个bug,但严格意义上来说并不能算是bug————在编写代码的时候发现一个问题,如果对于两个除了名称其余完全相同的文件,如a,b,如果在两次扫描周期中我们将b重命名为c,将a重命名为b,对于程序来说其实并不好判断其究竟是上述操作还是直接将a重命名为了c,所以我在readme中定义如果发现有重命名,而且有多个符合要求的文件,那么我会随机选一个视为修改,对于其他的,例如路径移动也是同理。但测试者可能因为没有仔细阅读我的readme,所以报了几个bug,全部都是因为这个原因。同时我测试的同学也考虑到了类似的事情,但他的readme中定义方式为对于上述这种情况,不能在同一个周期内同时操作两个除了文件名其余属性均相同的文件。代码中实现方式为将上一次扫描中没有出现的文件作为修改后的文件,可以说完全杜绝了这种情况的发生。在最后考虑到自己在readme中定义的是出现了某种情况应该怎么解释,而不是如何避免出现这种容易导致矛盾的操作,所以我最后也同意留下一个bug。
总的来说,此次作业是比较熟练地使用了多线程编程,但仍有一些没有考虑充分的地方,在以后的作业中也可以多注意一下这一块。
作业七
类图
这次作业是第一次出租车作业,相对于之前的几个线程,此次直接将出租车数量提高到了100个,对于此我是采用了开了100个出租车线程来解决,但同时也带来了内存占用巨大的结果,也有同学采用伪多线程的方式(如我测试的同学),采用循环来执行这100个出租车。对于此种方式我认为也算是一种解决问题的方式,但也难以锻炼自己多线程编程的能力,尤其是对于线程安全的控制,所以在以后的作业中我依然会采用100个出租车线程的方式。

代码分析

此次作业的代码风格算是这么多次作业以来最好的一次,加之此次也较为强调代码规范问题,所以整体来看代码基本能实现一看就懂的程度了。
但此次作业也是最不甘心的一次,但是可能是因为eclipse的bug,我最后一次提交时,本地显示已经提交了,但git上并没有提交,所以最后互测的时候交的是一个错误的版本,导致了此次作业的bug都是原本能够避免的。同时由于此次作业最开始没有发现自己的代码没有成功上传,所以在互测时测试者发现的bug在我这完全不能复现,甚至让我怀疑对方是在恶意找bug,不过好在最后发现及时(就没来得及进行代码层面以外的交流了)但也给我提醒了以后在上传了代码以后最好能够再下载一遍以确认是否正确。
此次作业做得比较好的一点(虽然最后代码没传上去)是时间控制,我一直都采用的系统时间,没有进行假时间的操作,所以此次在State类中我可以说是自己定义了一系列新的时间方法,例如sleep时首先将当前时间进行计算,计算出真实的需要sleep的时间后再执行,可以说此次作业在时间上的误差是严格限制在了误差范围之类的。
心得体会
这几次作业都是多线程作业,随着几次作业的进行,我对于多线程的运用也逐渐熟悉了起来,同时代码风格和规范也得到了不小的提升,像之前作业中的每次新的作业基本都要重写一遍代码的情况可以说基本也不会再出现了。希望自己在后面的学习中能够得到更大的提升。
第八次oo作业的更多相关文章
- 北航oo作业第四单元小结
1.总结本单元两次作业的架构设计 在我动手开始总结我的设计之前,我看了其他同学已经提交在班级群里的博客,不禁汗颜,我是真的偷懒.其他同学大多使用了新建一个类,用以储存每一个UMLelemet元素的具体 ...
- oo作业总结(四)
测试与正确性论证 测试是通过构造一系列测试数据,通过对比程序的实际运行结果和预期输出结果来判断程序是否有bug的一种手段.同时,在测试的时候是默认看不到程序的具体实现的,即进行黑盒测试,例如每次OO作 ...
- oo作业总结(二)
概述 和前三次作业相比,这几次作业最大的不同是难度的飞跃.遗憾的是在这难度的变化面前,我自己却没有做好充分的准备,错误的低估了作业难度导致给自己带来了很多不必要麻烦和损失.接下来我将对它们进行说明(度 ...
- oo作业总结(一)
概述 经历了三次oo作业的洗礼,让我对java语言的强大以及面向对象编程有了初步的理解(当然,我是小白).本文接下来就将对自己这三次作业的代码进行分析以及分享自己的心路历程. 基础知识点考核 针对前三 ...
- oo作业总结报告
oo第一次博客 以前从未真正的写过Java代码,接触Java也只是寒假的时候简单的看了看语法,不懂该如何面向对象,但没事,心里不惧,想着什么都是可以学的(直到真正开始写工程的时候,才发现自己还是太天真 ...
- 北航oo作业第一单元小结
前言 在经过了三次艰辛的oo作业后,oo课程的第一单元告一段落,这一单元,我作为一个oo小白,开始了解oo的编程思想,也有了自己的一点心得体会.把笔粗成字,不当之处,还请各位大佬多多指教. 一.分析程 ...
- 《你说对就队》第八次团队作业:Alpha冲刺 第五天
<你说对就队>第八次团队作业:Alpha冲刺 第五天 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 <你说对就队> ...
- #《你们都是魔鬼吗》第八次团队作业:第五天Alpha冲刺
<你们都是魔鬼吗>第八次团队作业:Alpha冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 完成最 ...
- 《你们都是魔鬼吗》第八次团队作业:第三天Alpha冲刺
<你们都是魔鬼吗>第八次团队作业:Alpha冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 完成最 ...
随机推荐
- linux:644、755、777权限详解
第一位7等于4+2+1,rwx,所有者具有读取.写入.执行权限: 第二位5等于4+1+0,r-x,同组用户具有读取.执行权限但没有写入权限: 第三位5,同上,也是r-x,其他用户具有读取.执行权限但没 ...
- django静态模版使用
第一步:在app目录下建立static文件夹,将CSS文件.js文件放到static文件夹下 第二步:TEMPLATES = [ { 'BACKEND': 'django.template.backe ...
- c/c++ 广义表
广义表 列表里面有列表,比如(1,(2,(3,4)),5) 用链表可以实现 结果如图 guangyibiao.h #ifndef __GUANGYIBIAO__ #define __GUANGYIBI ...
- Cs231n课堂内容记录-Lecture2-Part1 图像分类
Lecture 2 课程内容记录:(上)https://zhuanlan.zhihu.com/p/20894041?refer=intelligentunit (下)https://zhuanlan. ...
- .net的mvc的fw版本为4.5发布到阿里云【云虚拟主机】上.
注意:云虚拟主机和云服务器(ECS)不是同一个产品,请注意分别. 云服务器ECS: 云虚拟主机: 我用的是云虚拟主机也是第二个,版本是window server 声明:默认,已经把域名[已备案]绑定 ...
- ASP.NET -- WebForm -- 缓存Cache的使用
ASP.NET -- WebForm -- 缓存Cache的使用 把数据从数据库或文件中读取出来,放在内存中,后面的用户直接从内存中取数据,速度快.适用于经常被查询.但不经常变动的数据. 1. Te ...
- window中常用的命令
1.Ctrl+s 保存 2.Ctrl+c 复制 3.Ctrl+v 粘贴 4.Ctrl+x 剪切 5.Ctrl+a 全选 6.Ctrl+f 查找 7.Windows+d 桌面 8.Windows+e 计 ...
- Vue学习之路8-v-on指令学习简单事件绑定之属性
前言 上一篇文章以v-on指令绑定click事件为例介绍了v-on指令的使用方法,本文介绍一下v-on绑定事件的一些属性的使用方法. v-on绑定指令属性 .stop属性 阻止单击事件继续向上传播(简 ...
- LeetCode算法题-Implement Stack Using Queues
这是悦乐书的第193次更新,第198篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第54题(顺位题号是225).使用队列实现栈的以下操作: push(x) - 将元素x推 ...
- linux中如何查看进程的启动时间
ps -p PID -o lstart 其中PID是进程的pid [root@lvs-a logs]# -o lstart STARTED Tue Oct ::