三次题目集总结
第一次作业
目标:了解面向对象的基本原理,弄清面向对象与面向过程之间的相似和区别,更好地掌握面向对象的思维方法,其中重难点为7-5的单步电梯调度程序,在接下来会重点分析
题目集列表:
7-1 NCHU_求身份证号校验位
7-2 NCHU_求解一元二次方程
7-3 NCHU_正则表达式训练-验证码校验
7-4 NCHU_正则表达式训练-QQ号校验
7-5 NCHU_单部电梯调度程序
主要包含知识点:类的设计与引用、列表的初步了解与使用、类与对象之间的关系、如何通过输入的数据创建一个对象并正确调用类中的方法以及7-5 NCHU_单部电梯调度程序中最难的单一职责原则
设计与分析:7-1至7-4都是最基本的面向对象入门题目,不多赘述,重点在7-5,该题目涉及面向对象的多个方面,题目大致要求设计一个初代可运行的电梯,要求根据内部请求与外部请求能够实现正确的运行,其运行的基本原则是默认在第一层
Elevator:电梯类

Req:包含内部请求与外部请求,根据一次性接受到的大量请求(包含内部请求与外部请求)进行运行(个人感觉最终还是以内部请求为主),在抵达每一层楼时对请求队列进行检索,当抵达楼层与对应请求一致时,则停止,并且开门,清除已经完成的请求


ProcessRequests:处理乘客请求,根据获取电梯目的地的方法进行电梯运行



processArrival:处理电梯锁到达楼层的请求,通过遍历请求队列与结果方向进行判定

算法流程图:


第一次电梯总结:初代电梯代码并没有完全实现单一职责的原则,还存在许多可以分开包装的方法类,由于代码的复杂性,并没有花太多时间去进一步细分和优化,这一些细节处理在接下来的电梯代码迭代优化中会实现,在编写初代代码时遇到非常多的问题,刚开始编写时几乎是没有头绪,幸亏老师在课上讲解,有所启发,第二次电梯编写中新增了类图,让类与类之间的关系变得更加清晰,所以编写难度有所下降,但是毕竟是电梯代码迭代,所以自然出现了许多新的问题,在后期总结中会提到
第二次作业
目标:基本实现面向对象程序设计的要求,能够熟练运用面向对象的思维方法解决问题,第二次作业中增加了许多类中的方法设计,要求能够分析清楚类的内部成员变量以及类与类之间的关系,通过类的联系解决问题
题目集列表:
7-1 点与线(类设计)
7-2 NCHU_汽车风挡玻璃雨刷问题(类设计)
7-3 NCHU_单部电梯调度程序(类设计)
主要包含知识点与上次题目集类似,但是对于知识的运用明显更进一步,要求能够更加游刃有余的使用内部成员变量设计方法,涉及的内部成员变量和方法数量也明显增加
设计与分析:本次题目集的重点依旧是在7-3 NCHU_单部电梯调度程序(类设计),前面两题虽然难度上升了一部分,但是结果学习依旧不足为虑,同样不多赘述,该题目进一步强化了单一职责原则(SRP)的要求,对类的设计更加细化,所以由原来的三个类(除主类外)增加到五个类,同时新增了非法输入处理,对于电梯程序性能进一步增强,值得称道的是这次给出了类图关系,让类的设计与关联得到简化,同时给出了更多的测试数据,能够进一步完善电梯程序设计。
新增需求:新增非法输入处理
类图关系:

Elevator:电梯类


Req:包含内部请求与外部请求,根据一次性接受到的大量请求



Controller:控制类,用于负责电梯类与请求队列

算法流程图:





第三次作业
目标:删去乘客请求,新增乘客类,将原来的内外部请求队列替换为乘客队列,同时改变了原来使用正则表达式的请求队列,改成了将<请求源楼层,请求目的楼层>中的请求目的楼层加入到请求内部队列
总结:此次改动太大,几乎是需要在整个代码的各个部分都需要进行改动,因此对于我而言难度一点大,所以我最终并没有完成,不过在思考的过程中也有一定的心得体会,我将在遇到的问题部分进行总结
踩坑心得:
这三次作业中初次作业最让我痛苦,原因是算法设计电梯运行逻辑存在问题
在输入时

得到的结果与电梯运行结果不符

重新看来很多次代码,虽然猜测出了电梯运行的逻辑存在问题,但是一直改不对,在初次输入大量的请求队列时,每次运行对请求队列进行遍历,会将电梯中相应请求部分删去,但是其中忽略了一个重点,那就是内部请求如果出现前面的内部请求大于后面的最终请求,在电梯运行过程中就会将后面的内部请求删除,这会使得电梯运行在不考虑外部请求的情况下会出现有上无下的情况,最终经过朋友的点拨知道了可以在内部请求队列中新增一个前后请求大小判断,避免因为以上情况而时内部请求有上无下,这让我进一步理解了电梯运行基本规则:内部请求优先,顺带处理同向外部请求,同时要避免内部请求误删问题。
在设计处理乘客请求时,初次考虑的获取最终目的地是存在问题的

当时个人任务最终目的地应该是内部请求+外部请求队列中的最高楼层,却不曾想到实际电梯运行是以内部乘客的请求优先,这导致电梯在运行的过程中出现了一系列的问题
在选择电梯状态和方向的过程中多次采用了不同的数据类型来充当电梯状态和方向,初次是直接采用“DOWN|UP”的String数据类型,后期发现经常要采用compare来比较,非常不方便,后来考虑采用bollean数据类型,相比String类型确实是有所改善,但是仍然达不到最好,最终采用enum类型,大大简化了状态判断的难度
个人感悟:实话实说这三道题目难度确实很大,笔者在编写的过程中多次陷入焦虑,苦恼,无奈,想要放弃的状态,但是很无奈题目还是要继续写的,选择了这个专业,知识也是要学的,只能硬着头皮做下去,在接受了老师的讲解,同学室友的帮助以及个人的能力,网上的资料参考等总算是有了些许头绪,不得不说坚持思考和做下去确实让我对编程过程的学习和思考能力进一步得到增强,尤其是对于面向对象这一方面有了更深的了解,在关于代码的可复用性和可移植性方面也有了更深刻的理解,以前基本不会去画流程图和类与类之间的关系,但是在面对这种复杂的,中大型的(对于现在而言)编程项目没有类图和流程图简直是精神和肉体的双重折磨,希望以后面对这种多次代码迭代型,关于实际生活应用型的题目能够更加游刃有余。
浙公网安备 33010602011771号