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

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

第二单元总结

第一次作业

一、设计策略

本次作业采用FAFS算法,可直接用输入线程与电梯线程交互,调度器暂时不需要参与,故一共设计三个类三线程:Main类、elevator类及input类,main线程、elevator线程及input线程。main线程负责启动另外两个线程,input线程负责读入请求并添加至elevator的队列,elevator采用while+sleep轮询,若有请求则按入队时间进行服务。dispatcher类创建但不使用,为后续作业铺垫。

二、程序分析

类图:

1615678-20190423211142266-1769107110.png

度量图:

1615678-20190423211155584-174588401.png

时序图:

1615678-20190423211206286-907195225.png

优点:结构清晰,线程各司其职,运行结果稳定,线程安全。

缺点:可复用性差。

SOLID原则:

  S:单一功能原则,三个类各有一个明确功能,完成需求。

  O:开放封闭原则,不满足,仅支持FAFS算法。

  L:里氏替换原则,无子类设计。

  I:接口分离原则,无接口设计。

  D依赖倒置原则,无抽象类设计:。

三、bug分析

由于作业比较简单,没有发现bug。

第二次作业

一、设计策略

本次作业采用可捎带算法,调度器负责将输入线程的请求调度给电梯,故一共设计四个类四线程:Main类、dispatcher类、elevator类及input类,main线程、dispatcher线程、elevator线程及input线程。main线程负责启动另外三个线程,input线程负责读入请求并添加至dispatcher的inputlist队列,dispatcher队列在每次电梯到达楼层后获得电梯队列的锁,并视情况将请求调度给电梯,电梯只针对自己的队列进行运行。

二、程序分析

类图:

1615678-20190423211254175-1654636461.png

度量图:

1615678-20190423211301246-1226079924.png

时序图:

1615678-20190423211306800-1651529400.png

优点:结构清晰,线程各司其职,线程安全基本实现,暂未发现问题,程序可复用性显著提升,只需更改dispatcher即可更换电梯算法,电梯仅针对自身队列运行。

缺点:架构虽然较为合理,但代码实现时风格有些丑陋,性能也没有进行进一步优化。

SOLID原则:

  S:单一功能原则,四个类各有一个明确功能,完成需求。

  O:开放封闭原则,基本满足,第三次作业成功使用此框架。

  L:里氏替换原则,无子类设计。

  I:接口分离原则,无接口设计。

  D依赖倒置原则,无抽象类设计:。

三、bug分析

互测时发现遗漏部分代码,导致主请求结束后不会去接等待请求,丢失部分请求。

第三次作业

一、设计策略

本次作业采用多电梯协作完成任务,调度器负责将输入线程的请求调度给三部电梯,每个电梯拥有自己的属性,故一共设计四个类四线程:Main类、dispatcher类、elevator类及input类,main线程、dispatcher线程、elevator线程及input线程。main线程负责启动另外三个线程,input线程负责读入请求并添加至dispatcher的inputlist队列,dispatcher在三个电梯均未操作队列时获取它们的状态并进行任务分配,三个电梯针对自己的队列进行运行。

二、程序分析

类图:

1615678-20190423211315576-2102796229.png

度量图:

1615678-20190423211320790-694187652.png

时序图:

1615678-20190423211331478-591734753.png

优点:实现线程安全,cpu时间占用少,架构较为合理。

缺点:算法设计粗糙,性能很差,面临修bug时dispatcher重写。

SOLID原则:

  S:单一功能原则,四个类各有一个明确功能,完成需求。

  O:开放封闭原则,基本满足,继承自第二次作业框架。

  L:里氏替换原则,无子类设计。

  I:接口分离原则,无接口设计。

  D依赖倒置原则,无抽象类设计:。

三、bug分析

出现两类bug,电梯上人过多超载,以及性能过差超出最长时间,需要重写dispatcher类。

四、互测策略

还没学会搭评测机,手动测试了一些中测时个人准备的数据,并没有成功,准备尽快学习搭建自动化测试。

五、心得体会

通过本单元的学习,我深刻的领悟了线程的相关概念及应用方法,学习了使用多线程交互合作完成任务的方法。本单元最难处理的部分是线程安全,通过阅读网上的博客文章以及实例,我对synchronized的使用已经比较熟练,三次作业中均没有出现线程安全方面的bug。但是对于电梯调度算法设计偷了懒,导致第三次作业性能爆炸,遗憾之余准备好好利用bug修复机会补救,学到更多的东西。

转载于:https://www.cnblogs.com/xuejingxuan/p/10759019.html

你可能感兴趣的文章
mssql手工注入心的
查看>>
文件重命名的几种写法
查看>>
Nginx配置文件及模块解析
查看>>
redis主从配置
查看>>
终端clear清屏的实现
查看>>
实验四1
查看>>
关于 vs 2010 combobox控件 卡死的问题
查看>>
Linux 嵌入式启动以及优化
查看>>
整理了几种字符串截取方法
查看>>
解释一下python中的关系运算符
查看>>
【模板】组合数学
查看>>
data,bdata,idata,pdata,xdata,code存储类型与存储区
查看>>
JS知识整理之 Call&Apply方法
查看>>
MySql 和 PostGres 对照表
查看>>
sqlmap使用
查看>>
路由转发
查看>>
UITableView
查看>>
MySQL笔记
查看>>
SQL查询强化训练(2)
查看>>
Django 分页
查看>>