第五次作业——多线程电梯

一、设计策略

  本次作业是我们第一次接触多线程,给程序添加多线程功能后最大的挑战是实现共享数据的安全、避免冲突,由于这次作业是第一次尝试多线程方法,因此采用了将所有方法都加上synchronized修饰符的方法来避免数据冲突。

二、程序结构

 

  由于本次作业完成的比较匆忙,因此并没有全面的实现多线程的方式,且在测试中出现了较多的bug。由类图可以看出,程序分类较为简单,每个类的功能太过集中,有违oo的设计原则,同时,方法的数目也相对较少,随之而来的是较多的重复代码,这是极为不好的代码风格,同时也违背了oo编程原则。

三、程序的bug

  本次作业程序的bug主要集中在线程安全控制,程序在运行过程中会随机出现不可控的输出结果,这与刚开始的多线程设计不明确有很大的关系。同时,这次作业并没有采取wait-notifyall模式,这也是使得程序出现bug的一大因素。

四、心得体会

  多线程较为复杂,且带有随机性,因此会提高debug的难度,这就要求我们在开始设计时就规划好程序运行的方案流程,避免中途或者最后再进行大规模修改,这样反而容易产生更多的bug。

第六次作业——IFTTT

一、设计策略

  IFTTT主要由监听器和任务组成,因此,程序设计为:为每个监听任务开创一个线程进行监听,每当监听到规定动作后,调用相应方法进行任务响应,线程之间只是调用的方法相同,并不存在数据上的冲突。

二、程序结构

  本次作业已能较为熟练地掌握多线程的使用,并且进行系统性的设计与测试。程序通过Input类读入监听器以及相应的任务,之后创立相应的线程,监听事件的发生,当事件发生后,做出相应的响应。测试者可通过testthread来制造相应的事件来测试程序的相应。

三、程序的bug

  由于我的测试者并没有测试我的程序,这里只简述我自己尚未解决的bug。这些bug主要是细节方面的问题,比如多层文件夹的监控以及同层文件的监控选择问题,bug出现的原因主要是在方法设计时时间较为紧迫,因此只实现了获取监控文件信息的基本功能,并没有对其进行完整的拓展。

四、新的体会

  对于成体系的复杂的程序设计,要多尝试,不能因为复杂而望而却步,停滞不前,事实证明,只要着手去做,总会找到解决方案。

第七次作业——出租车

一、设计策略

  此次作业的出租车调动系统由100量出租车和80*80的地图网以及

oo第二阶段总结的更多相关文章

  1. OO第二阶段作业总结

    第五次作业:         设计策略: 本次作业设计的基本思路是按照指导书所给的推荐方法来完成的,即共用对象为队列盘,线程有电梯.调度器.以及扫描器,扫描器将控制台输入的有效指令加入到队列盘中,调度 ...

  2. 面向对象(OO)第二阶段学习总结

    0.前言 此阶段总共进行三次大作业,其中第一次作业中的第一题,水文数据校验及处理中,遇到较大的难题,第一次接触正则表达式,编码过程中显得难度特别大.第二次作业同样也是对于一元多项式求导中对单项的正则校 ...

  3. OO第二阶段纪实

    $ 0 写在前面 往往是那些令人格外痛苦的经历,会带给人以最快的成长.转眼间,半个学期的时间过去了,时间匆匆,不管之前对这几次充满了怎样的畏惧,在身边朋友们的帮助和努力下,我也渐渐度过了一个个难关.回 ...

  4. OO学习第二阶段总结

    面向对象课程的第二个阶段结束了,作业们由简单的玩具模式步入到复杂的多线程地狱模式,由之前的算法简单实现有坑转变成算法复杂实现有很大的坑.一个最重要的心得就是一定要在动手敲代码实现之前对整个程序的实现做 ...

  5. 2019年北航OO第4单元(UML)总结

    1 架构设计 经过了接近一学期的程序设计训练,在这一单元的第一次作业中我就非常注重架构的设计,竭力避免像之前一样陷入"第一次作业凑合,第二次作业重构"的不健康的迭代模式.整体上来说 ...

  6. OO第四单元总结及课程总结

    OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...

  7. GLUT的简洁OO封装

    毕业设计用到了OpenGL,由于不会用MFC和Win32API做窗口程序:自然选用了GLUT.GLUT很好用,就是每次写一堆Init,注册callback,觉得有点恶心,于是对他做了简单的OO封装.记 ...

  8. Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结

    Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结 1. Sql语言应该得到更大的范围的应用,1 1.1. 在小型系统项目中,很适合存储过程写业务逻辑2 1.2. 大型 ...

  9. OO中,先有对象还是先有类?

    就是问,在面向对象思想里,先有对象还是先有类,乍一看和先有鸡蛋还是先有鸡是一类问题,其实不然!这个问题,在lz考研复试的时候被面试官问过,一模一样,如今又在一个笔试题里看到了类似的题目,眨一下,有人会 ...

随机推荐

  1. 蛋疼zipline安装

    比安装zipline更让人蛋疼的是,网上的教程没有一个是TM对的,真的是忍不住要吐血. 真的是一步一坑,一步一坑 安装环境: Windows7旗舰版,64位系统 python 版本3.5.3 我没有用 ...

  2. Appium 在Win7环境下搭建

    (一) Java环境准备 安装java sdk 环境变量配置:JAVA_HOME=D:\Program Files\Java\jdk1.8.0_92 PATH设置:%JAVA_HOME%\bin 验证 ...

  3. Java中对象比较的方法

    class Person{ private String name; private int age; public Person(String name,int age){ this.name = ...

  4. css中单位px,em,rem和vh/vw的理解

    >px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的. em是相对长度单位.相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认 ...

  5. SpringIOC学习二

    Spring的IOC容器通过依赖注入DI(dependency injection)来实现程序之间的依赖关系,达到解耦的方式依赖的方式:a.基于xml文件配置的注入    * 构造函数注入    * ...

  6. 用js来实现那些数据结构08(链表02-双向链表)

    其实无论在任何语言中,一种数据结构往往会有很多的延伸和变种以应对不同场景的需要.其实前面我们所学过的栈和队列也是可以用链表来实现的.有兴趣的小伙伴可以自己尝试着去实现以下. 有点跑题了...,我们还是 ...

  7. PHPCMS V9 任意文件下载(Windows)

    先来看看PHPCMS V9.6.0的任意下载 还是和上次的注入一样,是个由parse_str() 函数引发的变量覆盖. 位于 /phpv9.6.0/phpcms/modules/content/dow ...

  8. ●BZOJ 2694 Lcm

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2694 题解: 莫比乌斯反演 不难看出,造成贡献的(i,j)满足gcd(i,j)无平方因子. ...

  9. bzoj4946 Noi2017 蔬菜

    题目描述 小 N 是蔬菜仓库的管理员,负责设计蔬菜的销售方案. 在蔬菜仓库中,共存放有nn 种蔬菜,小NN 需要根据不同蔬菜的特性,综合考虑各方面因素,设计合理的销售方案,以获得最多的收益. 在计算销 ...

  10. Educational Codeforces Round 17F Tree nesting

    来自FallDream的博客,未经允许,请勿转载, 谢谢. 给你两棵树,一棵比较大(n<=1000),一棵比较小(m<=12) 问第一棵树中有多少个连通子树和第二棵同构. 答案取膜1e9+ ...