第一次blog作业

一、前言
在题目集5~7中,第5次题目集的前四题侧重于基础算法的设计运用和正则表达式的应用,第6次题目集的前二题聚焦于类的设计,第7次题目集前二题则对算法设计思想的要求更高。这些较为基础的题,题量不算多且难度不大,只要仔细审题设计好逻辑即可完成,意在锻炼我们的基础编程能力和设计思维。除去这些基础题,每次题目集的最后一题,即“大作业”,在难度上则更上一层楼。第一次电梯程序主要侧重于单一类的设计和实现基本功能,第二次电梯程序则需遵循单一职责原则,重构代码的结构,第三次电梯程序则再次调整类结构,调整队列。此三次程序迭代难度逐步递增,从单一类实现电梯功能,发展到运用SRP原则进行多类间的协作,再到优化设计,深化我们对面向对象程序设计的理解和运用,对我们的算法设计能力和逻辑思维要求不断提高。
二、设计与分析
第一次电梯程序是单部电梯调度程序,需实现电梯的基本功能与调度逻辑,注重于单一类的设计。在初次看到这个题目时,第一感觉就是很复杂和困难,事实证明这种心态应该是应该去除和摒弃的,不能在一开始就给自己立下一个可能完不成的flag。首先,浅谈一下第一次迭代单类设计电梯程序中存在的问题。第一,理解需求。在本题中,基础理论就是电梯的运行规则,得先仔细审题加以理解。像电梯在不同状态下的运行逻辑、请求处理的优先级等等,都需要花费大量时间去梳理。这也是为什么最后没能在规定时间内写出题目的原因之一。第二,单一类的结构设置。由于将所有功能都集中在一个电梯类中,导致该类的职责过多,让我在具体代码结构的设计中有点难以下手。例如,状态管理、请求管理以及各种的算法都在一个类中实现,一旦后期需要修改,比如要修改规则等,就需要对整个类进行修改,容易增加更多的错误。第三、条件处理过于复杂。在这次题目中,要处理乘客的无效请求、无效楼层请求,这个就需要在代码中添加许多的条件判断,这增加了代码的复杂程度。一开始,我在看到这个任务时是十分的迷茫的,不知从何下手。在阅读题目后,我尝试开始先将框架写好,诸如最大楼层数、最小楼层数、当前楼层等基本属性设定好,并给它们设置默认值。对于运行状态,考虑用一个枚举类型来表示不同的状态,这样能让代码更清晰易懂。运行方向也是类似,设置一个枚举来区分上行、下行和静止。接着思考乘客请求队列该怎么管理,内部和外部请求队列需要分别处理,而且外部请求还要区分上行和下行。尝试先用简单的集合结构来模拟队列,每当有乘客请求时,就将其加入相应队列中。在电梯运行逻辑上,最初是想直接按照请求的先后顺序依次处理,但这样很难满足优先处理同方向请求的规则。所以一直在这个地方卡住,导致最后没有完成题目。
第二次电梯程序在第一次的基础上解决类职责过多的问题以及增加处理乘客请求有误或不合理的情况,要求遵循单一职责原则(SRP),对类之间的协作和结构设计进行了要求。在第二次迭代中主要存在的问题有,第一,类设计难度增加。由于需要遵循单一职责原则对类进行设计,所以要将原来集中在一个类中的功能拆分成多个类,如电梯类、乘客请求类、队列类以及控制类,需要重新思考类之间的关系和交互方式。这对我的编程能力和设计能力有了更加高的要求。第二,需要处理乘客请求楼层数有误和请求不合理的情况,在队列类中需要对新加入的请求进行过滤,同时要考虑队列中已有请求的情况,这大大增加了代码和逻辑的复杂度。第三、代码修改更加困难。由于类的数量增加,类之间的交互变得更加复杂,调试时需要在多个类之间进行断点调试,定位问题变得更加困难。例如,当电梯没有按照预期处理请求时,需要检查控制类、电梯类和队列类的代码,确定是哪个类的逻辑出现了问题。在进行第二次迭代时,我首先对第一次迭代的代码进行了分析,确定了需要拆分的功能模块。然后,我开始设计各个类的结构,思考类之间的交互方式。在实现过程中,遇到了很多困难,尤其是在处理请求逻辑时,需要不断地调整代码。在调试过程中,由于类之间的交互复杂,处理问题花费了很多时间,导致最后也没有写出题目来。但是还是学习到了许多,这次迭代让我深刻体会到了单一职责原则的重要性。遵循单一职责原则可以使代码的结构更加清晰,每个类只负责一个特定的功能,提高了代码的可扩展性。同时,也让我认识到了类设计的重要性,合理的类设计可以使代码的实现更加简单和高效。在后续的编程中,我会更加注重类的设计,遵循面向对象编程的原则,提高代码的质量。
第三次电梯程序则在第二次程序的基础上增加了乘客类,取消了乘客请求类以及变动乘客请求输入。在此次程序中,再次分析下存在的问题。第一,请求输入格式进行了变化,外部请求由之前的 <请求楼层数,请求方向> 修改为 < 请求源楼层,请求目的楼层 >,这需要对整个程序的请求处理逻辑进行修改。例如,在队列类中需要修改请求的存储和处理方式,在控制类中需要修改逻辑,以适应新的请求输入格式。第二,乘客类与其他类的交互问题。加入乘客类后,需要考虑乘客类与电梯类、队列类以及控制类之间的交互方式。例如,乘客类如何向队列类提交请求,电梯类如何处理乘客类的请求,这些都需要设计精确且合理可运行的结构和代码。第三,调整请求处理逻辑。对于外部请求,当电梯处理该请求之后,要将请求目的楼层加入到请求内部队列,这需要在电梯类和队列类中增加相应的逻辑。同时,还需要考虑请求内部队列和外部队列的同步问题,确保请求的处理顺序正确。有了前两次的程序设计,让我有了一点点经验,但在面对这次大作业上,仍旧有点力不从心。在进行第三次迭代时,我首先对需求进行了仔细的分析,确定了需要修改的部分。然后,我开始设计乘客类的具体代码,思考乘客类与其他类之间的交互方式。在实现过程中,遇到了很多困难,尤其是在处理请求输入格式变化和请求处理逻辑调整时,需要对多个类的代码进行修改。同时,由于基础实力的不足和逻辑思维的缺乏,依旧没能写出可通过测试点的代码。
三、总结
<1>自身存在的问题
首先是个人编程能力仍需进行锻炼和学习,长期以来,我习惯于依赖老师和同学的帮助,缺乏自主学习的能力和意识。在遇到问题时,不能独立思考和解决,总是希望他人能够直接给出答案。这种依赖心理导致我在学习过程中缺乏主动性和创造性,无法真正掌握知识和技能。其次是抗压能力和毅力不够,容易放弃​。在面对困难和挑战时,我缺乏抗压能力和毅力,容易产生放弃的念头。这次作业中的难题让我感到沮丧和无助,没有坚持下去的决心和勇气。我应该认识到,学习是一个不断克服困难的过程,只有具备坚强的毅力和抗压能力,才能在学习中取得进步。
<2>收获
通过这次教训,我深刻认识到扎实的基础知识是解决问题的关键。在今后的学习中,我将更加注重基础知识的学习和掌握,及时复习和巩固所学内容,通过大量的实践来加深对知识的理解和运用。例如,每天安排一定的时间进行编程练习,完成一些小的项目和练习题,提高自己的编程能力和解决问题的能力。在之后,我将制定详细的学习计划和时间安排表,合理分配时间,明确每个阶段的学习任务和目标。同时,我将采取有效的措施来克服拖延症,如设定明确的截止日期、将任务分解成小的步骤、及时进行自我监督和激励等。例如,在接到作业任务后,立即制定计划,将作业分解成分析题目、设计算法、编写代码、调试程序等多个步骤,每个步骤设定合理的时间节点,确保按时完成任务。
<3>最后的总结
通过这次未完成作业的经历,我学会了如何反思自己的问题和不足。在分析未完成原因和自身问题的过程中,我能够客观地看待自己在编程能力、时间管理、问题解决等方面存在的缺陷,并从中吸取教训。这种反思与总结的能力将对我今后的学习和成长起到积极的推动作用,使我能够在不断地反思中找到自己的不足之处,针对性地进行改进和提高,避免在以后的学习和工作中再犯类似的错误。
总之,这次未完成电梯调度程序的代码作业虽然是一次遗憾的经历,但也让我收获了许多宝贵的经验教训。我将以此为契机,深刻反思自己的问题,努力提升自己的能力和素质,在今后的学习和实践中不断进步,争取在下次的编程作业中取得更好的成绩。

posted @ 2025-04-20 20:57  高天雨  阅读(27)  评论(0)    收藏  举报