面向对象程序设计—第一章作业总结

news/2025/11/20 15:30:50/文章来源:https://www.cnblogs.com/zhouyongqin/p/19244141

前言

在三次对单部电梯调度程序类的设计中,题目由一个类到多个类,由未考虑单一职责原则到类设计遵循单一职责原则(SRP),与此同时乘客的请求变得更加详细,都使得我们需要不断的对原来的程序进行修改和完善,下面是我对我所编写的三次程序设计的分析。

题目中的知识点

在第一次作业中:本次题目中使用的调度算法为LOOK算法,同时对于电梯请求队列的管理主要用到了String类来进行存储与进行分析,该程序的核心是对请求的排队和处理,这天然适合使用队列这种 “先进先出”(FIFO)的数据结构。并且Java 中的 LinkedList 类实现了 Queue 接口,可以方便地进行 add()(入队)、peek()(查看队首)和 poll()(出队)操作。

在第二次作业中:本次题目相对于第一次题目来说,增加了对于类的设计要遵循单一职责原则这一要求,并且要对内外的队列要求进行区分,要考虑到类与类之间的关系。

在第三次作业中:在本次作业中新加入了乘客类(Passenger),并且取消了乘客请求类,对电梯的状态与运行方向有了更严格的要求,对于类与类之间的关系有了更深刻的使用。

难度:

对于这三个题目而言,第一个虽然是最基础的一个,但是也是最为困难的,因为在第一次作业中,我们必须要搞清楚题目的意思与要求,如果在第一次作业中没有理解题目的要求,那么更加无法完成后面的两个题目,这个题目要求我们同时运用多个领域的知识,并且将它们有机地结合起来,对于第一个作业的题目要求而言,我们需要根据当前楼层当前运行方向内部请求队列的队首外部请求队列的队首这四个因素来决定下一个目标楼层,从而完成我们的程序设计。在第二次作业中,它是要求在第一次作业的基础上进行迭代性设计,要求解决电梯类职责过多的问题,并且类设计要求遵循单一职责原则(SRP),这次作业相对于第一次作业来说难度有了部分提升,但是如果已经在第一次作业中明白了题目的要求与电梯的运行逻辑,那么在第二次作业中的程序也会相对来说更容易完成。第三次作业时在第二次作业的基础上又进行了一次迭代性设计,在本次作业中新加入了乘客类(Passenger),并且取消了乘客请求类,相对来说代码程序逻辑并没有太多的改动,虽然对于第一次与第二次作业来说,实现的功能更加严格了,但是难度也属于适中。

 设计与分析

第一次作业:

题目:设计一个电梯类,具体包含电梯的最大楼层数、最小楼层数(默认为1层)当前楼层、运行方向、运行状态,以及电梯内部乘客的请求队列和电梯外部楼层乘客的请求队列,其中,电梯外部请求队列需要区分上行和下行。
电梯运行规则如下:电梯默认停留在1层,状态为静止,当有乘客对电梯发起请求时(各楼层电梯外部乘客按下上行或者下行按钮或者电梯内部乘客按下想要到达的楼层数字按钮),电梯开始移动,当电梯向某个方向移动时,优先处理同方向的请求,当同方向的请求均被处理完毕然后再处理相反方向的请求。电梯运行过程中的状态包括停止、移动中、开门、关门等状态。当电梯停止时,如果有新的请求,就根据请求的方向或位置决定移动方向。电梯在运行到某一楼层时,检查当前是否有请求(访问电梯内请求队列和电梯外请求队列),然后据此决定移动方向。每次移动一个楼层,检查是否有需要停靠的请求,如果有,则开门,处理该楼层的请求,然后关门继续移动。
使用键盘模拟输入乘客的请求,此时要注意处理无效请求情况,例如无效楼层请求,比如超过大楼的最高或最低楼层。还需要考虑电梯的空闲状态,当没有请求时,电梯停留在当前楼层。
请编写一个Java程序,设计一个电梯类,包含状态管理、请求队列管理以及调度算法,并使用一些测试用例,模拟不同的请求顺序,观察电梯的行为是否符合预期,比如是否优先处理同方向的请求,是否在移动过程中处理顺路的请求等。为了降低编程难度,不考虑同时有多个乘客请求同时发生的情况,即采用串行处理乘客的请求方式(电梯只按照规则响应请求队列中当前的乘客请求,响应结束后再响应下一个请求),具体运行规则详见输入输出样例。

通过题目可以看出本次作业只要求考虑一个类,即所有的方法都在这个电梯类中,类图如下:

 

image

 使用SouceMonitor对第一次代码进行静态分析,情况如下:

image

 优点:

逻辑复杂度极低:该代码平均复杂度(Average Complexity)和最大复杂度(Maximum Complexity)均为 1,说明代码逻辑非常简单,几乎没有复杂的条件分支或嵌套逻辑。

代码结构较清晰:块深度(Block Depth)整体偏低,平均块深度(Average Block Depth)1.39,最大块深度(Maximum Block Depth)4,代码嵌套层级少,可读性较好。

基础可维护性有保障:类和接口数量(Classes and Interfaces)为 2,方法平均数量(Methods per Class)10.50,结构不算臃肿。

不足:

注释覆盖率不足:代码注释过少,使得代码可理解性下降。

模块化程度待提升:后续功能扩展,代码会逐渐变得臃肿,可维护性和扩展性会快速下降,缺乏清晰的模块划分(如分层、领域拆分等)。

分支灵活性可能不足:当前代码可能缺乏足够的逻辑灵活性,后续需求变更时可能需要大量重构。

 

第二次作业:

题目:对之前电梯调度程序进行迭代性设计,目的为解决电梯类职责过多的问题,类设计要求遵循单一职责原则(SRP),要求必须包含但不限于设计电梯类、乘客请求类、队列类以及控制类。

电梯运行规则与前阶段单类设计相同,但要处理如下情况:

 

  • 乘客请求楼层数有误,具体为高于最高楼层数或低于最低楼层数,处理方法:程序自动忽略此类输入,继续执行
  • 乘客请求不合理,具体为输入时出现连续的相同请求,例如<3><3><3>或者<5,DOWN><5,DOWN>,处理方法:程序自动忽略相同的多余输入,继续执行,例如<3><3><3>过滤为<3>

 

注意:本次作业类设计必须符合如上要求(包含但不限于乘客请求类、电梯类、请求队列类及控制类,其中控制类专门负责电梯调度过程),凡是不符合类设计要求此题不得分,另外,PTA得分代码界定为第一次提交的最高分代码(因此千万不要把第一次电梯程序提交到本次题目中测试)。

在这次作业中要求设计多个类,具体设计类图如下:

image

 使用SouceMonitor对第一次代码进行静态分析,情况如下:

image

 优点:

代码可读性有明显提升:

  • 注释行占比(Percent Lines with Comments)提升至 21.3%,相较于第一次作业代码来说有了很大提升,开发者能更高效地理解代码逻辑,尤其在团队协作或后期维护时,注释的辅助作用更突出。
  • 方法平均语句数(Average Statements per Method)为 6.73,仍保持 “单方法单职责” 的设计倾向,功能粒度较细,逻辑拆解清晰。

模块化初步成型:

  • 类和接口数量(Classes and Interfaces)增加到 3 个,相比之前的 2 个,开始有简单的功能或层级划分(如可能涉及业务类、工具类等初步区分),代码结构的扩展性有一定基础。

不足:

核心方法逻辑复杂度高:

  • Main.main() 方法的最大复杂度(Maximum Complexity)达 6,且包含 17 条语句、14 次调用,说明该方法承担了过多逻辑职责(如流程控制、业务逻辑集中在主方法中),违反 “单一职责原则”,后续维护和迭代极易出现 bug。

代码结构仍需优化:

  • 最大块深度(Maximum Block Depth)为 5,虽然平均块深度(Average Block Depth)仅 1.35,但最深嵌套的代码块会显著增加理解成本,若逻辑再复杂,易出现 “逻辑缠绕” 的问题。
  • 文件数(Files)仍为 1,所有代码集中在一个文件中,随着功能扩展,代码耦合度会快速上升,模块化不足的问题会逐渐凸显(如类之间的依赖关系难以解耦)。

部分方法职责过载:

  • 除 Main.main() 外,nextExternalFloor.getDirection() 相关方法也存在嵌套较深的情况(块深度 5),可能存在逻辑冗余或流程设计不够简洁,需进一步拆解或优化逻辑分支。

 

与第一次作业代码的静态分析做比较,结果如下:

image

 总结:第二次代码在可读性和基础模块化上有明显进步,但代价是核心方法的复杂度失控,出现了 “局部优化、整体失衡” 的情况。若要进一步优化,需重点拆解Main.main()的职责,将集中的逻辑拆分到多个独立方法或类中,同时考虑按功能拆分文件,避免 “单文件承载所有逻辑” 的问题。

第三次作业:

题目:对之前电梯调度程序再次进行迭代性设计,加入乘客类(Passenger),取消乘客请求类,类设计要求遵循单一职责原则(SRP),要求必须包含但不限于设计电梯类、乘客类、队列类以及控制类。

电梯运行规则与前阶段相同,但有如下变动情况:

  • 乘客请求输入变动情况:外部请求由之前的<请求楼层数,请求方向>修改为<请求源楼层,请求目的楼层>
  • 对于外部请求,当电梯处理该请求之后(该请求出队),要将<请求源楼层,请求目的楼层>中的请求目的楼层加入到请求内部队列(加到队尾)

注意:本次作业类设计必须符合如上要求(包含但不限于设计电梯类、乘客类、队列类以及控制类),凡是不符合类设计要求此题不得分,另外,PTA得分代码界定为第一次提交的最高分代码(因此千万不要把第一次及第二次电梯程序提交到本次题目中测试)。

第三次作业相对与于第二次作业来说,它去掉了乘客请求类,加入了乘客类,类图如下:

image

 第三次作业的代码我并没有通过测试点,故无法给出该题目的静态分析图。

对于该题目来说,其实相较于前面两个题目而言,并没有要做太多的修改,但是由于我没有第一时间理解题目的意思,故始终无法通过测试点。

采坑心得:

在本次完成作业的过程中我也遇到了许多问题,首先是在第一次作业中,由于我在开始写代码时并没有完全理解题目的意思,导致我的代码始终无法通过测试点,后来我发现,我的的代码是优先处理内部队列的,内部为空才会给外部队列赋值,但是题目的要求是同时取出内部和外部队首,然后判断去处理谁的请求,这种情况下外部请求的队首,必须是要在电梯的“前方”,并且方向与当前电梯方向相同,才返回外部请求,在电梯的前方的意思是,例如电梯在五楼,有一个七楼向上的外部请求,,这就是前方,如果是有一个三楼向上的请求,这就是在电梯的后方,这就导致了我的代码逻辑在一开始时就是错误的,所以如果不对这个进行更改,那么后面不管怎么优化都无法通过测试点,再后面我对代码逻辑进行了修改后,才通过了测试点,完成了这次作业。在第二次作业中,题目的要求有了变化,它由原本的一个类变为了多个类,在进行了几次修改后也完成了该题目,在这一题中,开始的错误是我的程序在每次输出时都会在最后额外输出一行,后来也修改了代码的输出解决了该问题。

改进建议:

 

对于第一次代码,重点在于夯实基础:通过增加关键逻辑、方法功能的注释(将注释占比提升至 15% 以上),配合直观的类、方法、变量命名,降低理解成本;将单一文件拆分为按 “业务逻辑 - 工具类 - 实体类” 划分的多个文件,把 2 个类扩展为 3~4 个职责明确的模块(如抽离通用逻辑为 Utils 类);同时提前预留扩展点(如用接口 + 实现类设计分支逻辑),避免后续需求变更时大规模重构。

 

对于第二次代码,核心是解决 “局部优化但整体失衡” 的问题:优先拆解 Main.main () 方法,将集中的流程控制、业务逻辑拆分到 Controller(流程)、Service(业务)等独立类 / 方法中,把方法复杂度控制在 3 以下、语句数控制在 10 行内,严格遵循单一职责原则;对嵌套深度达 5 的方法(如 nextExternalFloor.getDirection ()),通过 “提前 return”“拆分辅助方法” 或策略模式简化逻辑,将最大块深度降至 3 以内;同时完善文件级模块化,按功能拆分出 Main.java、FloorService.java、DirectionUtils.java 等独立文件,用包结构隔离模块,降低类间耦合;此外,保持 20% 以上的注释比例,同步优化新增拆分类 / 方法的注释,确保可读性与模块化同步提升。
总结:
在这三次作业中我学到了很多:
1.首先最重要的一点是在完成每次作业前一定要弄明白题目的要求是什么,要搞清楚题目的总体需求后在开始构思自己的代码,如果在一开始时就误解了题目的意思,那么之后不管怎么修改都无法完成题目要求。
2.三作业的完成是从基础的一个类到多个类的实现,在一开始时对类的运用并不熟悉,在完成这几次作业后也有了提升,虽然并没有完成第三次作业,但是我相信,只要平时多去理解代码的含义,多训练,以后一定会有更多的成长与提升。
3.这几次作业展现了代码从 “实现功能” 到 “考虑维护” 的意识进步,但尚未形成系统的结构化设计能力,需在模块化和逻辑拆分上进一步深耕,才能实现代码的可维护性与扩展性。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/971103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年电子散件手工源头厂家权威推荐榜单:灯具加工外发/手工编织加工/电子产品手工加工源头厂家精选

在电子制造产业链中,那些专注于手工环节的厂家,凭借其对精度与稳定性的极致追求,成为行业里不可或缺的关键角色。 电子散件手工加工,虽处产业链一隅,却直接影响到最终产品的性能与可靠性。当前,这一领域正朝着高…

2025年北京高压配电室检测公司权威推荐榜单:北京配电室检测项目/北京配电室加载检测/北京配电室防雷检测服务机构精选

在首都电网规模持续扩张与智能化升级的背景下,高压配电室的安全稳定运行已成为保障城市能源命脉的关键环节。据最新行业数据显示,2024年北京市高压配电室数量已突破3万间,其中运行超过10年的老旧配电室占比接近40%。…

宏觀對沖的組合管理 Portfolio Management for Macro Hedging

宏觀對沖的組合管理 Portfolio Management for Macro Hedging核心觀點第二代宏觀對沖,包含三個部份:宏觀面、技術面、交易交易系統。但2025年有兩大痛點:①第一,遲疑了未戰略轉移到權益資產,錯過了2025年的港A美權…

2025 电加热器厂家最新推荐排行榜:实力制造商深度解析,覆盖多场景加热设备优质解决方案

引言 工业加热器作为生产流程中的核心关键设备,其性能优劣直接关系到工艺稳定性、产品质量精度与企业运营成本,广泛应用于机械制造、化工、新能源、船舶、航空等多个重要领域。当前市场上加热器品牌繁杂,产品质量参…

技术筑牢供应链安全防线:从全链路防控到体系化治理

在数字化协同深度渗透的今天,供应链已从传统 “物资流转链路” 演变为 “技术、数据、服务交织的复杂生态”。供应链安全风险不再局限于单一环节故障,而是呈现跨层级、跨领域传导的特性,技术防护已成为构建安全屏障…

2025 运营商数据分类分级需求演进与核心厂商全景解析

数据分类分级作为运营商数据安全治理的核心基石,在政策刚性约束与数字化转型双重驱动下,已从 “合规必选项” 升级为 “智能治理底座”。2025 年,随着国标 GB/T 43697-2024 全面落地与 AI 技术深度渗透,运营商数据…

dynamic_rnn转nn.GRU详细记录

(原文发表在知乎专栏上,时间为2020年8月13日) 今天在将一份tensorflow的代码转为pytorch时遇到的一点困难,经过多次debug以后终于弄清楚了这里应该是如何进行转换的,因此记录下来。 直接上代码吧,为了确保最终的结…

NAS、对象存储与 JuiceFS:百亿量化基金的存储选型实践

在量化投资领域,存储系统的性能与可扩展性是支撑高效研究与计算任务的关键基础。JuiceFS 已广泛应用于多家头部百亿级量化私募机构,在回测与模型训练等核心环节中支撑高性能、低成本、可弹性扩展的存储体系。 本文将…

我踩遍了所有坑,终于搞懂了企业微信聊天记录存档!

vx: llike620 gofly.v1kf.com 作为一名技术开发者,最近我接到了一个需求:实现企业微信的聊天记录存档功能。本以为就是个简单的API调用,没想到这一脚踩进去,发现水不是一般的深。 那个藏在后台的神秘功能 事情是这…

实用指南:【Linux基础知识系列:第一百五十九篇】磁盘健康监测:smartctl

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年风机联云端批发厂家权威推荐榜单:风机物联网云平台/风机物联网/小型物联网风系统平台源头厂家精选

随着工业4.0与物联网技术的深度融合,风机行业正经历一场智能化革命。据《2024-2029年中国风机行业市场展望与投资分析报告》显示,集成云端监控功能的智能风机市场年增长率已超过25%,预计到2025年,其在工业风机中的…

CF2172H Shuffling Cards with Problem Solver 68!

首先切牌肯定有性质,但是你认为我没有脑子,建图倍增可以快速将最终序列的每个位置对应的原位置求出来。 相当于我要循环位移目前数列,使得按照给定关键字排序后字典序最小。 借用后缀排序的思路,维护一个长度的倍增…

STM32HAL库通用定时器学后笔记 - 实践

STM32HAL库通用定时器学后笔记 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

2025年手工雕刻石碑生产厂家权威推荐榜单:汉白玉墓碑/石碑/汉白玉石碑源头厂家精选

一块质朴的石头,在匠人手中被赋予生命与温度,这或许就是手工雕刻石碑的魅力所在。 在现代化机械加工普及的今天,手工雕刻石碑因其独特的艺术价值和不可复制的文化内涵,依然在市场中占据着重要地位。随着消费者对个…

2025不容错过!可燃气体报警器十大实力厂家大盘点

2025不容错过!可燃气体报警器十大实力厂家大盘点 一、引言 在工业生产和日常生活中,可燃气体的广泛使用带来了诸多便利,但同时也伴随着泄漏、爆炸等安全隐患。可燃气体报警器作为预防此类事故的关键设备,能够实时监…

记基于现有项目架构通过ai生成的一个语音助手功能开发设计文档

记基于现有项目架构通过ai生成的一个语音助手功能开发设计文档题前不得不赞叹一句有了AI的协同,实在是太高效了 📘 语音助手功能设计文档 目录系统架构概览 核心流程 翻译模式详解 内部处理机制 关键讨论点系统架构…

2025 最新推荐海外仓服务平台榜单:覆盖欧美东南亚等核心市场,美国 / 英国 / 德国 / 法国海外仓/换标 / 维修 / 检测优质服务商权威测评

引言 跨境电商行业的全球化扩张推动海外仓需求持续激增,据国际跨境物流协会(ICLA)2025 年度测评报告显示,全球海外仓服务商数量年增 37%,但服务合规率仅 62%,物流延误、库存失控等问题导致卖家平均损失率达 18%。…

Agent Dart证书验证漏洞深度解析

本文详细分析了Agent Dart库中存在的证书验证漏洞CVE-2024-48915,包括委托验证缺失canister_ranges检查和时间戳验证问题,这些安全缺陷可能导致子网冒充和证书无限期有效等严重风险。Agent Dart缺失证书验证检查 CV…

2025年北京集团法律顾问服务权威推荐榜单:私人法律顾问/高级法律顾问/社区法律顾问服务精选

在法治环境日益完善的今天,北京集团法律顾问服务市场已形成专业化、精细化的服务格局,为企业稳健经营提供着坚实的法律保障。 随着企业法律需求的多元化和复杂化,北京地区的集团法律顾问服务行业呈现出专业化分工、…

2025年螺旋输送机批发厂家权威榜单:带式输送机/链板输送机/皮带输送机设备源头厂家精选

在工业物料输送领域,螺旋输送机凭借其结构紧凑、密封性好、操作简便等优势,成为粮食加工、化工生产、矿山冶炼、环保处理等行业的关键设备。根据2024年行业数据统计,国内螺旋输送机市场规模已突破50亿元,其中管式螺…