电梯题目集总结
一、前言
第一阶段面对对象程序设计结束了,以电梯调度系统为中心进行了三次题目集。
在三次题目集中主要包含以下知识点:
1.使用正则表达式
2.java类设计
题目在数量上偏少,难度除电梯迭代外都相对简单
二、设计与分析
环绕SourceMontor的生成报表内容及PowerDesigner的相应类图进行总结
分析主要参考方法和类的复杂程度
第一次作业
第一次作业采用的是单类模式,先熟悉电梯调度系统,便于后续的迭代工作。
SourceMontor报表如下:


类图

在第一次电梯代码中,只使用了一个类编写了整个程序,显得该类别功能过多,全部混合在一起,不符合java的编写规范。
可以看到在电梯运行方法runlift()中,方法的复杂度非常高,达到了59,究其原因,是因为自己将整个电梯运行的过程全部写在了这一个方法之中,没有将其拆分为多个方法,各自执行单一的原则。
而在输入队列的方法scQueue()中,方法的复杂度同样偏高,分析原因应是重复的代码较多,应将重复的代码提取出来,做成一个单独的方法,这样不仅可以避免重复,也能让代码更加遵循单一职责原则。
第二次作业
在第一次作业的基础上将单类分成了多个类,并增加了对错误输入信息的处理。
**类图 **

其中:
电梯类(Lift):包含电梯的各种属性
队列类(RequestQueue):负责管理队列的信息,队列信息主要存储在该类中,也包含有队列信息的添加方法
外队列(OutQueue):负责整理电梯外输入的信息,便于队列类中管理信息
控制类(Controler):负责调动各个类,主要用于控制电梯的运行,方向确定,队列信息的输入删除以及各种消息的打印,判断电梯是否应该开门,删除到达该楼层需要去除的队列信息,确定下一个要去的楼层。
Source Montor分析:

在将一个类拆分为多个类之后,代码的平均复杂度和最大复杂度下降都十分明显,不过还是存在许多问题:
代码的注释过少:代码不利于理解,代码注释的仅仅只占整体的5.6%。代码的可读性太差会不利于后续的维护,也不利于其他人理解代码。
在该分析图中也可以发现,方法数/类数的比例过高:检查代码后发现,有部分原因是由于在每一个类中,每一个属性都设置了get和set方法,而其中有许多的get或者set并没有被使用,因此导致方法/类比例偏高,平均复杂度和深度也因此被拉低了一些,也导致了每个方法的平均语句偏低。
第三次作业
题目要求修改,输入信息格式改变
类图

和上一次作业相比,外部队列从发起楼层与目的方向变为发起楼层到目标楼层
各个类与方法的规划并无太大变化
Source Montor分析:

此次作业在代码复杂度的方面并无明显变化,不过在代码注释上有所提升,代码的可读性变高了,也更利于理解。
三、踩坑心得
在三次电梯题目中,花费时间最多的是第一次作业与第三次作业,第二次作业中并未踩坑。
第一次作业踩坑:
1.在编写第一次电梯作业代码时,遇到的所用时间最多的方面是没有完好的理解题目的意思,采用队列输入消息的方式时,以为理解错误,曾以三个队列(内队列|外队列上|外队列下)分别输入,一个一个电梯请求输入(外队列|内队列 但请求只有在外队列或内队列为空时才会输入下一个请求,直到输入end),导致电梯代码重写了许多次,仍然没有达到题目预期需要的效果。直到老师给与提醒,才最终确定输入方式
2.在电梯的运行过程中,电梯需要开门并清除对应队列信息的判断并不完善。当电梯处于最高层,运行方向向上,而这个最高层是外队列的请求,该请求是向下的,并且内队列的请求楼层低于该楼层时,本应该开门的电梯没有开门,从而导致电梯会一直在某个楼层上下以至于运行超时。例如输入为:
1
20
<2,UP>
<5>
<6,DOWN>
<3>
end
时,就会导致运行超时,从最低楼层向下运动转向成向上运动的情况同理。
心得:
1.在编写代码之前,要先理清楚要求,明白了要求才能正确的编写出所需要的程序,忌不认真看需求
2.程序会遇到的情况应该考虑更完善,设计测试样例要准确,才能更好的编写出更健壮的代码
第三次作业踩坑
在第三次作业中,本应该修改下输入,便可以正确,但在提交时却一直在第一个测试点答案错误。找了许久原因在哪,给输入加了许多限制,检查了很多遍电梯运行的逻辑,都没有发现问题。直到最后,想到可能是因为输出的部分存在一定的问题,于是将原本电梯找到下一个要到达的楼层然后一层一层往下改成了直接利用循环输出到达目的楼层,这才通过。
心得:在检查代码时,不要单抓一个地方不放,有时可能错误的是其它地方,同时要检查仔细,才更便于代码出错时找到代码的错误。
四、改进建议
1.在部分方法之中,存在一些重复的代码,可以将这些代码改为一个方法,在要用到的地方直接使用方法就可以了。
2.代码可读性方面,应当提高代码的注释量,防止出现别人看不懂代码,甚至过段时间自己就不知道自己代码是怎么写的的情况。
3.在表示状态时,可以使用枚举类型,比如电梯的运行状态,改为枚举更易于理解。
五、总结
1.学到的内容:
通过三次题目集的练习,我学习到了如何去使用正则表达式来提取字符串中所需的信息。也初步了解了如何规划类和方法的职能。并且在修改代码的过程中,也学到了如何对代码进行调试。意识到了遵守单一原则的重要性。
浙公网安备 33010602011771号