• Object Oriented个人总结第二弹


    一、  分析和总结自己三次作业来的设计策略及其变化

    a)       第一次作业

    比较幸运第一次接触多线程的时候就可以遇到最后的方案,这次作业我运用的是synchronized+notified的策略,通过电梯线程和scheduler线程互相唤起来实现多线程的运行,而在线程不进行计算的时候就让现场wait。这样将线程的工作时间和强度降到最低,同时也保证了绝对的安全。

    b)       第二次作业

    由于要求限制,不得不放弃安全好用的线程互相唤醒的机制,使用不断循环扫描实现,通过每隔一定时间扫描一次进行一次快照,记录当前监控对象的状态,这种机制面临很多问题,比如如何保证一次扫描之间不会进行两次操作,好在最后对此进行了限制。

    c)        第三次作业

    单纯的synchronized,这次使用的县城方法比较简单,为了防止100个线程对系统资源利用过多,产生不可预料的后果,我将100辆车合并到了同一个线程,用轮询进行车的移动,车移动完之后在进行派单,虽然方法略显粗暴,但是效果奇好。再辅助以假时间的方法,可以解决非常多的问题。

    二、 基于度量来分析自己的程序结构

    a)       第一次作业

    UML图

     类图

    有一些方法由于刚开始的时候没有考虑清楚,写的太过臃肿,这种现象主要是集中于带有大量条件判定的方法。关于条件判定的方法比如电梯选择,可稍待判断等可以继续优化。

    优点:整体设计比较清晰

    缺点:条件判定想得不够清楚带来冗余。

    设计原则不足:存在GOD类

    b)       第二次作业

    UML图

     类图

    与上次相比较略好一些,但是对于不同的触发器操作写到了一起。导致了方法的臃肿。

    缺点:针对不同情况的操作写到了一个类。

    设计原则不足:Dependency Inversion Principle,责任均衡分配原则

    c)        第三次作业

    UML图

     

    类图

    比之前的好了很多,分派方法嵌套太深。

    优点:责任分派相对均衡。

    缺点:方法调用深度过深。

    设计原则不足:重用原则,有功能重复的类。

    三、 分析自己程序的bug

    a)       第一次作业

    所交版本为调试版本,所有同质请求,未按照格式输出。

    b)       第二次作业

    bug

    c)       第三次作业

    输出格式错误扣一分

    3000毫秒误计算为14个200ms的周期逻辑错误。

    d)       基本都挺脑残的。。。没啥可分析的。

    四、 分析自己发现别人程序bug所采用的策略

    a)       第一次作业

    基本输出错误格式错误。

    逻辑错误

    仅靠前两项已经扣的有点多了,心软没有继续查下去

    b)       第二次作业

    边界测试,测出程序不能监控识别文件夹的最后一个文件

    c)        第三次作业

    对方由于版本问题,没有考虑gui带来的延迟导致了一系列错误。

    同时依靠边界数据测出一个逻辑bug

    d)       没有发现线程不安全的问题,拿到的基本上写的都不错,但是相比前三次作业而言,从中可学习的东西不是特别多,也可能我自己进步了。

    五、 心得体会

    a)       毫无疑问notify+synchronized是现阶段最好的方法,即可以保证的线程的安全,又能降低线程的CPU占用。也更符合现实中的情况。

    b)       第六次作业全局锁真的是反人类的东西,可还不得不用,杨帅提出的对象全局共享很有意思,被我改造用到了第七次作业。

    c)        增强for循环还是个好东西,方便简单。学会使用@override等注解小技巧可以提高效率。

    d)       第七次作业明显简单一些,可以花时间考虑设计,这个时候难度降低有一定科学性。

    e)       千万不要临结束前一分钟提交,难保出不出意外。

    f)         由于之后的自由度大大提高,需要适应新的互测形势。

    g)       设计原则还需磨练。

  • 相关阅读:
    结合php ob函数理解缓冲机制
    php中的require-once
    PHP面试题基础问题
    Jquery显示与隐藏input默认值的实现代码
    win7下cmd常用命令
    采用cocos2d-x lua 的listview 实现pageview的翻页效果之上下翻页效果
    采用cocos2d-x lua 制作数字滚动效果样例
    luac++
    lua相关笔记
    cornerstone知识点
  • 原文地址:https://www.cnblogs.com/wangkexiang/p/8975449.html
Copyright © 2020-2023  润新知