OO Unit2 电梯啊电梯
OO第二单元总结
第5次作业
题目
本次作业要求实现一个多线程可捎带的单部电梯。
设计思路
由于课程组给出了输入输出接口,我们不需要考虑错误输入的处理,极大地简化了程序的结构,让我们能够专注于设计与进程安全。由于这次作业只有单部电梯,简单的生产者消费者设计模式就能够解决问题。
UML类图

从uml类图来看,程序架构比较简单,使用生产者消费者设计模式。
OO度量分析

从图中可以看出,这次作业程序的圈复杂度等较上一单元明显降低,个人认为原因有二:一、课程组给出的接口过滤了错误请求,降低了程序对请求的处理难度。二、经过上一个单元的练习,逐渐习惯了面向对象编程,写出的代码明显更OO了。
bug分析
本次作业未在强测和互测中发现bug。
在公测时出现过的问题:死等,死锁,死循环orz。emmmm基本上多线程新手会出现的问题我都踩坑了。经过探究发现,死等和死锁是由于我未将共享对象与线程分开。在重新修改之后,不再出现这些问题。而死循环是因为程序退出条件判断或者运行逻辑出现问题。
多线程debug除了使用Jprofile查看进程间切换等信息,最好用的还是在代码中添加一些输出来辅助判断程序运行状态。
第6次作业
题目
本次作业要求实现一个多线程可捎带的多部电梯调度,电梯数目由标准输入决定。
设计思路
本次作业依旧沿用生产者消费者设计模式,调度算法基本没有变化,在运行时多部电梯呈现自由竞争的状态。一方面,增加了电梯之间的公平性,均衡了负载,另一方面,一个请求多部电梯响应,若在真实情况下,会极大地增大功耗。
UML类图

从uml类图来看,程序架构比较简单,使用生产者消费者设计模式。
OO度量分析


从图中可以看出,这次作业程序的圈复杂度等较上次作业未有明显增加。
bug分析
本次作业未在强测和互测中发现bug。
在公测时出现过的问题:上一次作业中出现的问题基本上未出现,完成作业时整体比较顺利。
第7次作业
题目
本次作业要求实现一个多线程可捎带的多部电梯调度,电梯可动态加入,且设定了电梯类别和停靠楼层。因此在设计上需要处理乘客的换乘请求。
设计思路
本次作业依旧沿用生产者消费者设计模式,调度算法做了重构,在运行时同一类的多部电梯呈现自由竞争的状态。不同类别之间由调度器指定了优先级。新增了换乘调度队列和换乘调度器,来单独处理换乘请求。此外,设置了person类来描述乘电梯的人,在person类内部处理换乘前后换乘状态,来自楼层,需到达楼层的变化情况。手搓了换乘表,将换乘情况和换乘楼层用枚举的方式表示。仅从本次作业来看,是简单省力的,但从日后可扩展性来看,这只是一种偷懒的办法。
UML类图

从uml类图来看,程序架构复杂度有明显提升。
OO度量分析


从图中可以看出,这次作业程序的圈复杂度等较上次作业有明显增加,在电梯运行和换乘调度器运行的方法中复杂度大幅度上升。
bug分析
本次作业未在互测中发现1处bug。属于粗心大意,将各类电梯最大限乘人数写错了。在互测时被定点狙击。目前bug已修复。

浙公网安备 33010602011771号