编程学习之旅:电梯调度作业迭代心得

 

前言

在编程学习的漫漫长路中,单词电梯调度问题的三次迭代作业,恰似三座巍峨的里程碑,横亘在前行的方向上,满是挑战。

首次作业,聚焦于搭建电梯调度的基础逻辑框架,从无到有地构建起电梯运行的基本规则体系。紧接着,第二次作业引入单一职责原则,如同为代码大厦添砖加瓦,对类进行精细拆分,使代码结构更为清晰合理。而第三次作业,则在第二次的稳固根基之上,进一步深化,着重处理乘客类之间复杂的交互逻辑。

每一次迭代,都如同一把重锤,锤炼着我的编程思维与面向对象设计能力。这不仅让我在代码实现的技巧上不断突破自我,更引领我深入探索软件开发中设计原则与逻辑优化的精妙之处。通过这一系列作业,我深切领悟到,编程绝非只是代码的机械堆砌,而是一场对问题进行系统剖析、逻辑梳理以及架构设计的深度综合实践。

过程

第一次电梯

在首次作业里,核心任务是设计一个电梯类。这个类涵盖了电梯的关键属性,如最大楼层数、最小楼层数(默认从 1 层起始)、当前楼层、运行方向、运行状态,以及电梯内部乘客请求队列和电梯外部楼层乘客请求队列,且电梯外部请求队列需严格区分上行与下行。

电梯运行规则细致而严谨:初始时,电梯默认停靠在 1 层,处于静止状态。一旦有乘客发起请求,无论是楼层外按下上行或下行按钮,还是电梯内按下目标楼层按钮,电梯便即刻启动。运行时,它优先处理同方向的请求,待同方向请求全部处理完毕,才会转向处理相反方向的请求。运行状态包含停止、移动中、开门、关门等。电梯停止时,若有新请求,会依据请求方向与位置确定移动方向;每运行到一层,会检查是否存在请求,进而决定后续移动方向;每移动一层,也会检查是否需停靠,若有则开门处理请求,随后关门继续前行。

为实现这一过程,需使用键盘模拟乘客请求输入,同时要妥善处理无效请求,像超出大楼最高或最低楼层的请求。并且,还得考虑电梯空闲状态,即无请求时保持在当前楼层。

此次作业主要考验对队列分析的理解与运用,通过编写 Java 程序,设计电梯类,涵盖状态管理、请求队列管理以及调度算法,并运用测试用例模拟不同请求顺序,检验电梯行为是否契合预期,例如是否优先处理同方向请求、能否在移动中处理顺路请求等。为降低编程难度,采用串行处理请求方式,即电梯按序响应请求队列中的请求。

第二次电梯

基于类图分析,我初步勾勒出代码的大致轮廓。然而,在细节处理方面,仍存在诸多亟待完善之处。此次作业是对第一次作业的升华,在遵循单一职责原则的指引下,将电梯相关功能进一步细分到不同类中,让代码结构更为规整,职责划分更为明确。但实际操作中,我发现自己对一些边界情况的处理还不够精准,部分逻辑的衔接也略显生硬,这都为后续的优化改进指明了方向。

第三次电梯

第三次作业在第二次的基础上持续迭代。此次迭代着重于乘客类的复杂交互逻辑。随着乘客类的引入,输入输出方式也发生了变化,这使得电梯调度的逻辑变得更为复杂。不仅要考虑电梯自身的运行规则,还要兼顾乘客的各种行为和请求之间的关联。在这一过程中,我不断调试代码,优化逻辑,力求让电梯在处理乘客请求时更加高效、合理。

代码剖析

代码规模与结构

“Main.java”文件共 386 行,包含 208 条语句,规模处于中等水平。代码中仅有 2 个类和接口,结构相对简洁,类层次关系不复杂,理解类的职责划分难度较低。不过,较多的行数与语句数,给后续逻辑梳理带来一定挑战,维护时需花费更多精力。

方法特性剖析

每个类平均拥有 15.50 个方法,这表明类承担的功能丰富,但也可能违背单一职责原则。后续可考虑进一步拆分功能,以增强代码的可维护性与扩展性。方法平均含 6.52 条语句,长度适中,利于阅读与维护。其中,最复杂的方法是“Main.main()”,位于 352 行,最大复杂度为 2 。作为程序入口,其业务逻辑可能较为繁杂,需重点优化,以降低复杂度。

分支与注释情况

分支语句占比 21.6%,这意味着代码中存在一定数量的条件判断与循环结构,在测试时需确保不同分支都能被有效覆盖。而带注释的行仅占 7.0%,注释比例过低。代码注释在理解逻辑功能方面至关重要,尤其在团队协作与后期维护时,当前极低的注释比例会给代码理解造成较大困难,亟需增加注释量。

复杂度综合考量

从 Kiviat 图及相关数据来看,整体代码复杂度并非极高,但“Main.main()”方法复杂度为 2,仍有优化空间。通过重构等手段降低复杂度,可有效提升代码质量。Kiviat 图和柱状图能直观呈现各指标相对位置,尽管部分数值标注不够详尽,但仍有助于从整体趋势了解代码各项指标表现,辅助分析代码质量。

思考

面向对象设计的深入理解

三次电梯调度作业,宛如一场面向对象编程的深度修行。从最初对电梯类的简单设计,到严格遵循单一职责原则进行类的精细拆分,我对面向对象编程有了更为深刻的领悟。单一职责原则强调一个类专注于一项功能,这使得代码结构愈发清晰,可维护性大幅提升。例如,将电梯的属性、运行逻辑、请求处理等功能分散至不同类中,有效规避了一个类承担过多职责导致的代码臃肿与复杂。这让我明白,合理的类设计是构建高质量程序的坚实基石。

问题解决与逻辑优化

电梯调度逻辑的实现,是作业的核心攻坚点。从最初对电梯运行规则的懵懂,到逐步掌握优先处理同方向请求、合理切换运行方向等策略,我学会了将实际问题巧妙转化为编程逻辑。其间,不断调试、分析与优化代码,比如调整请求队列管理方式、优化电梯停靠和方向切换判断条件,以此提升电梯运行效率与合理性。这让我深知,解决复杂问题需秉持耐心、细致思考,且要善于从失败中汲取经验,循序渐进完善解决方案。

代码质量与可维护性

通过对代码复杂度、注释量和代码规模等维度的剖析,我深刻认识到代码质量的重要性。低复杂度代码虽易于理解,但可能难以满足复杂业务需求;而适当增加注释、合理把控代码规模,能显著提升代码可读性与可维护性。在今后编程中,我将更加注重这些方面,严格遵循良好编码规范,让代码不仅功能完备,更易于他人理解与维护。

反思

学习过程中的困难与挑战

作为 Java 编程新手,第一次电梯作业堪称巨大挑战。对电梯运行逻辑的陌生,致使我耗费大量时间调试,却屡遭失败,这充分暴露了我在编程基础知识与问题分析能力上的短板。后续作业虽积累了一定经验,但面对新变化与要求,依旧力不从心。比如第三次作业中乘客类的引入及输入输出方式的改变,又让我陷入困境,这表明我对新知识的吸收与应用能力亟待提升。

自身存在的不足

在代码设计与实现过程中,我暴露出诸多问题。首先,对单一职责原则贯彻不够到位,导致类间耦合度偏高,增加了代码修改与维护难度。其次,代码注释严重匮乏,极大影响了代码可读性,给代码理解造成阻碍。此外,处理复杂逻辑时,缺乏系统性思考,易出现逻辑漏洞与代码重复问题。这些不足不仅影响作业质量,更制约了我编程能力的进阶。

改进方向与未来计划

针对上述问题,我制定了清晰的改进规划。未来编程学习中,我将着重学习与应用设计原则,深入领会面向对象编程思想,提升代码设计水准。同时,养成良好编码习惯,增加注释量,提高代码可读性与可维护性。面对复杂问题,先进行全面系统分析与规划,再着手编码,避免盲目开发。此外,我会强化新知识的学习与实践,提升学习能力与应变能力,从容应对未来编程挑战。

posted @ 2025-04-20 22:45  章羽  阅读(19)  评论(0)    收藏  举报