OO学习第二阶段总结

  面向对象课程的第二个阶段结束了,作业们由简单的玩具模式步入到复杂的多线程地狱模式,由之前的算法简单实现有坑转变成算法复杂实现有很大的坑.一个最重要的心得就是一定要在动手敲代码实现之前对整个程序的实现做到心中有数,想好每个模块的功能和借口,这样才能避免在后期的时候改来改去,甚至出现可笑的bug.简而言之就是由随心所欲搬砖,转化成照着蓝图搬砖,这样很容易就能还在雏形的时候发现哪块砖放错了位置.当然后期也需要测试,看看哪些砖会在住人的时候掉链子.

第五次作业:

类图

 

度量图:

       我的问题在于把太多的任务交给了电梯类本身去做,应该将这些任务或者说是功能拆分出来,划分出其他类的.主要的bug在于电梯运行过程中在楼层和目标楼层之间插入新的指令以及到达主指令的目标楼层之后丢弃不携带的指令并将这些指令重新放入指令托盘.其实我在实现之前也思考到这个问题,但并没有记录下来然后实现的时候就忘记了...

第六次作业

类图:

度量图:

第六次作业的内容还是很清晰的,我的问题还是说没能将问题独立成方法或者类,尝试在一个大类或者大方法中解决所有的问题,比如这次的watchThread,所有的监控逻辑都写到了一起,然后就飘红了.我想了下这种问题是怎么产生的,然后发现是自己好多时候不知道如何在类与类,方法与方法之间传递正确的信息,直接共享变量似乎又不大合适,所以只好写成一团...不管怎样,面向对象的思想还是需要继续修炼啊.

bug主要产生于各个线程的recover和监控之间的冲突,我上课注意老师讲的这块,老师建立快照的方法似乎是每次扫描建立一个树状结构文件系统映射,而我的实现方法是每次扫描一遍文件系统,既复杂又耗时,所以就容易出现bug.

第七次作业

由于自己的一些原因,第七次作业血崩了,最终的实现情况太惨烈了,导致我甚至不想把类图和度量结果放上来,我简单的分析一下bug情况.

一个是需要自己重新实现求最短路径的方法不然GUI的实现太耗时,会出现奇奇怪怪的现象,尤其是在很多出租车同时接单的情况.另一个时间上的处理,因为是直接获取系统时间然后取舍的,所以有的地方处理不好会出现一些小问题.

总结:

       随着程序复杂度提高,尤其是多线程的引入,使得理解一份代码变得越来越困难,所以文档的重要性越来越高.每一次都一定要好好写readme,我有一次拿到的readme甚至变成了乱码,这对互测就造成了很大的困难.好好写文档也是对自己的负责,我曾经有一次的bug就是在写文档的过程中想通并修正的.

  多线程的安全问题其实需要好好思考,有的是逻辑上并行,其实在一个线程里先后处理的,有的是逻辑上有先后其实是在不同线程内并行处理的.只要涉及多个线程就一定要好好地思考线程安全.另外synchronized关键字虽然有助于解决线程安全,但是也不能滥用啊!

 

posted @ 2018-05-02 00:20  正蓝  阅读(218)  评论(1编辑  收藏  举报