面向对象课程的第二个阶段结束了,做业们由简单的玩具模式步入到复杂的多线程地狱模式,由以前的算法简单实现有坑转变成算法复杂实现有很大的坑.一个最重要的心得就是必定要在动手敲代码实现以前对整个程序的实现作到心中有数,想好每一个模块的功能和借口,这样才能避免在后期的时候改来改去,甚至出现好笑的bug.简而言之就是由为所欲为搬砖,转化成照着蓝图搬砖,这样很容易就能还在雏形的时候发现哪块砖放错了位置.固然后期也须要测试,看看哪些砖会在住人的时候掉链子.算法
类图安全
度量图:多线程
个人问题在于把太多的任务交给了电梯类自己去作,应该将这些任务或者说是功能拆分出来,划分出其余类的.主要的bug在于电梯运行过程当中在楼层和目标楼层之间插入新的指令以及到达主指令的目标楼层以后丢弃不携带的指令并将这些指令从新放入指令托盘.其实我在实现以前也思考到这个问题,但并无记录下来而后实现的时候就忘记了...测试
类图:线程
度量图:对象
第六次做业的内容仍是很清晰的,个人问题仍是说没能将问题独立成方法或者类,尝试在一个大类或者大方法中解决全部的问题,好比此次的watchThread,全部的监控逻辑都写到了一块儿,而后就飘红了.我想了下这种问题是怎么产生的,而后发现是本身好多时候不知道如何在类与类,方法与方法之间传递正确的信息,直接共享变量彷佛又不大合适,因此只好写成一团...无论怎样,面向对象的思想仍是须要继续修炼啊.blog
bug主要产生于各个线程的recover和监控之间的冲突,我上课注意老师讲的这块,老师创建快照的方法彷佛是每次扫描创建一个树状结构文件系统映射,而个人实现方法是每次扫描一遍文件系统,既复杂又耗时,因此就容易出现bug.文档
因为本身的一些缘由,第七次做业血崩了,最终的实现状况太惨烈了,致使我甚至不想把类图和度量结果放上来,我简单的分析一下bug状况.监控
一个是须要本身从新实现求最短路径的方法否则GUI的实现太耗时,会出现奇奇怪怪的现象,尤为是在不少出租车同时接单的状况.另外一个时间上的处理,由于是直接获取系统时间而后取舍的,因此有的地方处理很差会出现一些小问题.变量
随着程序复杂度提升,尤为是多线程的引入,使得理解一份代码变得愈来愈困难,因此文档的重要性愈来愈高.每一次都必定要好好写readme,我有一次拿到的readme甚至变成了乱码,这对互测就形成了很大的困难.好好写文档也是对本身的负责,我曾经有一次的bug就是在写文档的过程当中想通并修正的.
多线程的安全问题其实须要好好思考,有的是逻辑上并行,其实在一个线程里前后处理的,有的是逻辑上有前后实际上是在不一样线程内并行处理的.只要涉及多个线程就必定要好好地思考线程安全.另外synchronized关键字虽然有助于解决线程安全,可是也不能滥用啊!