博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oo第二阶段总结
阅读量:5766 次
发布时间:2019-06-18

本文共 1493 字,大约阅读时间需要 4 分钟。

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

一、设计策略

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

二、程序结构

 

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

三、程序的bug

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

四、心得体会

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

第六次作业——IFTTT

一、设计策略

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

二、程序结构

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

三、程序的bug

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

四、新的体会

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

第七次作业——出租车

一、设计策略

  此次作业的出租车调动系统由100量出租车和80*80的地图网以及调度器组成,程序设计为每个出租车开设一个线程,同时为调度器开设线程,监控乘客请求的发出并将信号发送给指定区域内的出租车进行调度。出租车相互独立,无共享数据,而每个出租车线程与调度器线程之间共享乘客请求信息和出租车基本信息(出租车状态、位置、信用值等)。

二、程序结构

   

  程序初始时从文件读入地图信息并建立map类,随后创建100个出租车线程和调度器线程,以模仿出租车运行,随后创建输入线程,以模仿不定时收到乘客请求,之后,便根据实际情况进行输出。本次作业大体上较为完善,实现了几乎全部既定目标。但是,由于事先只专注于对出租车运行的模拟而没有注意相关输出,使得程序的输出与整个程序在设计上有脱节现象,不能一次性将全部信息输出到一个文件中。

三、程序的bug

  本次程序,测试者并没有指出公测以外的bug。

四、心得体会

  对于较为庞大的程序设计,一定要事先通读指导书并了解相应要求,尤其要注意一些关键功能的实现,以免日后再对程序进行修改,从而影响工作效率。

 

转载于:https://www.cnblogs.com/lvubyr/p/8978360.html

你可能感兴趣的文章
MindNode使用
查看>>
SQL Server 2016 Alwayson新增功能
查看>>
HTTP库Axios
查看>>
CentOS7下安装python-pip
查看>>
认知计算 Cognitive Computing
查看>>
左手坐标系和右手坐标系 ZZ
查看>>
陀螺仪主要性能指标
查看>>
Java 架构师眼中的 HTTP 协议
查看>>
Linux 目录结构和常用命令
查看>>
Linux内存管理之mmap详解 (可用于android底层内存调试)
查看>>
利润表(年末)未分配利润公式备份
查看>>
Android开发中ViewStub的应用方法
查看>>
gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法...
查看>>
HDOJ-2069Coin Change(母函数加强)
查看>>
遍历Map的四种方法
查看>>
JAVA学习:maven开发环境快速搭建
查看>>
Altium Designer 小记
查看>>
【Linux高级驱动】I2C驱动框架分析
查看>>
赵雅智:js知识点汇总
查看>>
二维有序数组查找数字
查看>>