面向对象程序设计第一单元学习总结——划时代的创新编码(航空管理系统)
前言:
首先第一次作业知识点较为简单,更多是基础语法,未涉及高深编程思维。基础语法方面知识点包括:变量定义,输入输出,循环结构,条件判断。面向对象方面知识点包括:类的定义,私有成员变量,即java语言的封装性。其他知识点包括:基础的排序算法,数组的简单运用以及格式化输出。整体算下来也就百余行代码,题量较小,没有特别的难点,测试点也相对不算刁钻,整体难度偏低。第二次作业相较第一次难度有所增加,进一步深入面向对象思想。第三次作业则是真正全面展现面向对象思想内核,迭代式作业模式贴合行业模式,一次次迭代中不断精进,有教育性也有趣味性。
第一次作业总结:
设计与分析:
核心实现航班货物配载功能:录入航班信息、录入货物信息、按重量降序排序货物、统计总重量、判断是否超载,整体结构清晰、逻辑简单。现给出类图1与类表辅助分析:


结合上述图表依次对各个类的职责与特性进行分析:
Flight 航班类
这是封装航班信息的实体类,包含私有成员变量flightNo(航班号),maxWeight(最大载重),将属性私有化依次实现面向对象封装特性(后面的两次作业不作重复,统一使用get与set进行获取与初始化),该类的职责单一,只负责存储和管理航班基础数据。
Cargo 货物类
和航班类设计思路一致,封装货物的名称和重量两个私有属性,也是标准的实体类,仅用于描述货物的基础数据,不包含复杂逻辑。
LoadManifest 货物清单类
核心功能类之一,用ArrayList
CargoSorter 货物排序类
独立的排序工具类,仅包含一个Sort排序方法,采用选择排序算法实现货物按重量降序排列,外层循环确定当前位置,内层循环找到剩余元素中重量最大的货物索引,最后交换元素位置。将排序逻辑单独封装,符合单一职责原则,不与其他类的业务逻辑耦合。
这里Main类职能与作用不鲜明,不做特别解释说明。
提交错误原因分析:
少数基础语法错误,可以快速修改。部分输出格式与题目要求不符,并未出现明显逻辑缺陷,相对简单。
第一次作业可提升之处:
由于当时刚接触面向对象,与之前的C语言不同,这不是语法的教学,段老师也强调面向对象具有其高阶性,现在回头看这次作业原码的编码经历确实显得较为稚嫩,耗时久且构思后迟迟不能下笔(过于犹豫与纠结),设计起来也多为粗糙,对面向对象的封装性没有理解透彻,类的职责也有失单一职责原则,可以将类与类之间的耦合性降低,进一步细分类。
第二次实验总结:
作为第一次作业的迭代,第二次作业在第一次作业基础上大幅升级,实现了多货舱管理、货物定向装载、多层级重量校验、排序调度等功能,是从基础面向对象向正式工作场景的迈进,整体逻辑完整、类结构清晰,充分体现了面向对象的组合、封装与业务分层思想。从第二次作业开始,pta作业开始向面向对象高阶性转变。
设计与分析:
Position 位置类
封装货舱内的行和列属性,通过构造方法初始化位置信息,提供getPosName方法生成标准化位置名称(如 1 行 2 列),是货舱的基础组成单元,仅负责位置数据的描述,职责高度单一。同第一次作业总结,结合类图与类表对各个类进行功能与职责分析。


结合图示,得出如下分析
Cargo 货物类
在第一次作业基础上扩展,新增目标货舱 ID 属性,实现货物定向装载的核心依据;提供统一的setCargo方法赋值货物名称、重量、目标货舱 ID,对外提供 get 方法获取属性,完整封装货物的所有核心信息。
CargoCompartment 货舱类
本次作业的核心业务类,采用组合关系包含位置列表和货物列表;通过构造方法初始化货舱 ID、最大载重,并自动生成货舱内所有位置;提供核心功能方法:getCurrentWeight计算当前装载重量、addCargo带载重校验添加货物、isOverweight判断货舱是否超载,完整实现单个货舱的装载、校验、统计全功能。
Flight 航班类
作为管理类,采用组合关系包含多个货舱,是整个业务的核心载体;提供航班信息赋值、货舱添加、按 ID 查找货舱、总重量计算等方法;findCompartmentById是定向装载的关键方法,通过货舱 ID 匹配实现货物精准装载,getTotalWeight汇总所有货舱的重量,为航班级校验提供数据。
LoadDispatcher 排序分配类
独立的货物排序工具类,封装选择排序算法,实现货物按重量降序排序,与业务逻辑完全解耦,专门负责货物调度排序,符合单一职责原则,让代码更易维护。
InputValidator 校验类
通用输入校验工具类,提供整数范围校验、浮点数非负校验方法,将分散的校验逻辑抽离封装,提升代码复用性,实现程序健壮性的基础保障。
Main 主类调用各类实现测试
程序的总调度中心,串联所有类完成完整业务流程:从输入航班基础信息到批量创建货舱,再到输入货物信息,然后货物排序,接着定向装载货舱、输出装载结果、货舱状态校验、航班总重量多层校验,最后输出最终配载状态,由此实现一整个业务逻辑的输出测试。
提交错误原因分析:
题意理解错误,排序方法内部调用且限定了指定排序方法,同时也存在部分语法错误。
第二次作业可提升之处:
从我个人写第三次作业的经历来看,第二次代码的设计没有为之后的迭代做好铺垫,导致我第三次作业迭代代码多费力气。同时,代码的健壮性没有得到好的保障,有开未闭合,部分输入也没有进行输入的检验。类的设计略显混乱,没有规划好一个程序的整体设计。
第三次作业总结:
第三次作业在第二次作业基础上迭代,完整实现了航班载重平衡计算系统,涵盖旅客、货物、货舱、重心、力矩、% MAC 配平评估等真实航空业务逻辑,我完全能从这次面向对象作业感受到面向对象的高阶性应用,此次作业深度运用了类的组合、静态成员、业务分层、数据校验、物理公式建模等知识,这次作业场景更贴合实际应用,收获颇丰。同一、二结合类图与类表对各个类进行功能与职责分析。


Flight 航班总体类
整个系统的主要管理类,包含静态常量如空机力臂等,组合了货舱列表和旅客舱;实现总重量、总力矩计算,是所有业务逻辑与业务数据的一个总管理;findCompartmentById支持按 ID 查找货舱,getTotalLever整合空机、货物、旅客三方力矩,是载重平衡计算的核心。该类在整个系统中起到总领的作用,为后面类的使用作铺垫。
Position 货舱位置类
封装货舱内行列位置,生成位置名称,作为货舱的基础组成单元,仅负责位置数据描述,职责单一。基础单位,明晰一个位置。
Cargo 货物类
扩展了货物ID,目标货舱ID,支持独立赋值重量和ID,封装货物全部属性,是货物装载与统计的基础实体。
CargoCompartment 货舱类
核心业务类,组合位置列表和货物列表;支持货物装载校验、当前重量统计、超载判断、力矩计算;构造方法自动生成货舱位置,是货物装载与重量管理的核心单元。
Passenger 旅客类 & Language 行李 / 语言类
旅客类固定基础体重,关联行李重量类;getAllWeight计算旅客 + 行李总重量,完整模拟旅客重量构成,贴合真实业务。
PassengerCompartment 旅客舱类
管理旅客列表,计算旅客总重量与总力矩,与货舱类形成对称设计,共同构成航班载重来源。
Weight 重量数据实体类
封装重量、力矩、重心、重心百分比,专门存储载重平衡计算的结果,实现数据与计算分离。
WeightBalanceCalculate 重心计算类
系统核心计算模块,根据航班总重量、总力矩,套用航空物理公式计算重心位置、% MAC 重心百分比,完成配平评估的核心逻辑。专门用来计算题目要求的结果,与flight未依赖关系,输入Flight类型数据,得出结果。
InputValidator 输入校验工具类
静态工具类,统一校验整数、浮点数、字符串、数值范围,非法输入直接终止程序,大幅提升程序健壮性。
LoadDispatcher 排序调度类
使用冒泡排序实现货物按重量降序排序,逻辑解耦,专门负责货物排序功能。
Main 主类
完整调度全流程:输入航班号、创建两个货舱、录入旅客及行李重量、分配货物到两个货舱、装载校验、生成载重平衡舱单、计算重心、输出配平评估结果,是整个系统的执行中枢。
提交错误原因分析:
题目要求为正常推出,我写的是错误推出,除此以外,数据检验顺序错误导致输出与题目要求不符。
第三次作业可改进之处
由第二次作业修改而来,基本没有删除作业二中类的属性、变量与方法,采用的是只加不删。但问题就出在此处,个人感受类的职责没有好的分配,调用起来有点麻烦,方法与变量命名不合理,这也在编码时对自己造成一定困扰。
第一单元作业总结:
收获:
通过这一个周期的学习与训练,我真正理解了面向对象(OOP)思想。从简单的类、对象、属性、方法,到封装、组,合、单一职责。除了思想上的转变,我的抽象能力得到锻炼,能够初步实现将具体事物抽象成类,分析设计并实现功能。
其次,熟练掌握了Java基础到进阶的语法,从基本输入输出、循环、判断、浮点数计算,到动态数组与链表的使用:增、删、遍历、查找、排序。实现从理论上的熟悉到实践上运用的跨越。
学会拆分类、分工明确、代码解耦。
不足:
个人编码过程中感受到,真正实现功能时,仍然出现不能明确整体设计的情况,读阅需求时不能立马抽象事物,需要反复阅读,效率方面不敢恭维,质量方面也不尽如意。此外,语法仍然偶尔出现错误,错误查找效率慢,对类、变量、方法的命名总是不够规范导致对自己形成干扰,打字速度也有待提高。
建议:教师方面没有特别建议,保持当下的授课风格就行,有趣的同时也有所收获。课程方面确实具有高阶性,多为思想与编程模式教学,贴近现实就业场景,也没啥好建议的。作业方面难度可以较大,但不希望过于庞大的代码量,现在的代码量就还好,如果教师组觉得有必要,那以教师组为最后基准。实验方面的实验系统希望能够像开发软件一样,生成一些简单代码模板,便于提高开发速度,现在这样略微有点磨时间,建议手打也要方便一点,敲代码也给我敲好了呀。其它没有特别建议,课程组没有啥问题。

浙公网安备 33010602011771号