面向对象第二次博客作业

面向对象第二次博客作业

一、分析程序结构

第五次作业

度量

类图

协作图

Bug分析

1、这次作业首次在文件中输出,在修改的时候漏掉一处,导致文件输出的内容漏掉一部分;2、还有两个Bug是由于wait和notify处理不当导致的,是由于一处代码引发。

设计分析

由于第一次设计多线程程序,并且考虑的多线程的随机性会引发一下边界bug,在处理边界问题上耗费了大量精力,大大增加了代码量,导致代码逻辑杂乱不堪。

第六次作业

度量

类图

协作图

Bug分析

1、在处理同质的时候写错了一个函数名,由于在周二晚上重构没有时间检查这些问题,所以出现了bug;2、文件安全类处理不当,导致了有小概率读到错文的文件信息。

设计分析

这次最开始想通过线程间的交互使得每次操作都扫描一次,最后助教表示不能这么做,重新设计后,将各种监视器分开书写,保证不会引发同样的bug。这一次的构造比较合理,但是出现了小失误。

第七次作业

度量

类图

协作图

Bug分析

1、最短路处理没有考虑起点终点相同的情况。2、另外两处输入仁者见仁,智者见智的bug,不作分析。

设计分析

这一次设计思路比较明显,100个线程虽然繁杂,但是100个线程才符合模拟现实的本意,所以还是这么做了,实践证明还是可以处理的。为了均衡各个类的职能,除了为保证线程安全而封装的requestQueue类外,将选择最佳出租的部分放在了请求类中,保证各个类的工作量。

二、发现别人bug的策略

多线程程序不适合拿大量的数据来测试,因为即使出现问题也很难排查问题出在哪里,这样提交bug是对课程不负责任的行为。所以我主要是通过读代码发现逻辑错误来进行的,拿到的三次作业,对方都出现了小失误,本来设计是没有问题的,在书写的时候出现了失误,这样的bug是很难通过数据来发现的。

三、多线程设计总结

经过三次多线程作业,大致明白多线程的原理,多线程的设计重点在于互斥和同步的控制,多线程和单线程的主要区别是程序不是顺序执行的,需要通过一些手段来满足需要的执行顺序,在设计的时候主要考虑执行的先后顺序,在适当的地方加锁、等待、唤醒,做好这一点,多线程和单线程就没有区别了。

四、心得体会

还是周二开始写代码好,反正迟早要重构。

猜你喜欢

转载自www.cnblogs.com/cjrhx/p/8975222.html