面向对象设计与构造——第一单元总结

课程的第一单元结束了,本单元以航班货物配载程序为核心,进行了三次作业练习,从最基础的货舱类逐步细化。三次作业层层递进,难度逐步递增。我从中学到了很多:

  • 熟练掌握Java基本语法、对象数组、集合、封装等基础知识点;

  • 循序渐进建立面向对象设计思路,理解实体类、工具类的划分标准;

  • 深刻认识代码可拓展性、分层设计、单一职责原则的重要性;

  • 学会复杂度分析、边界测试、输入校验,提升代码健壮性与规范性
    下面我将从程序结构、代码实现等几个方面总结本单元三次迭代作业。

第一次作业:基础航班货物配载
作业要求:
设计一个基础的航班货运配载模块。系统需要记录航班的基本信息(航班号、最大起飞重量、最大业载重量)。地勤人员可以按照货物重量从高到低向该航班添加货物(货物名称、重量)。系统需要实时计算当前已装载的总重量,并判断是否超载。
实现方式
本次作业采用最基础的面向对象建模,自定义Cargo货物类、Flight航班类,分别封装自身属性并提供getter方法。主类中使用定长静态数组存储货物对象,采用冒泡排序完成货物重量降序排序。遍历数组累加重量,判断航班载重是否超限,最终完成全部信息打印输出。
代码规模
本次作业代码量较小,代码总行数一百行左右,仅包含三个类,结构简单,方法数量少。
类图
classDiagram
class Cargo{
-String cargoName
-double cargoWeight
+Cargo(String,double)
+getCargoName() String
+getCargoWeight() double
}
class Flight{
-String flightNo
-double maxWeight
+Flight(String,double)
+getFlightNo() String
+getMaxWeight() double
}
class Main{
+static Cargo[] cargos
+static int cargocount
+main(String[]) void
}
Main ..> Flight
Main ..> Cargo
不足
对排序功能的实现有些疑惑;未通过排序测试;

第二次作业:多货舱分层货物配载
作业要求;
在第一次作业的基础上,航空公司要求进一步细化配载管理。飞机不再只有一个货舱,而是分为多个货舱(如前舱、后舱等)。每个货舱有独立的最大载重和固定数量的装载位置(行列网格)。地勤人员需要按照货物重量从高到低的顺序,将每件货物选择放入某个货舱,系统需实时检查该货舱是否超载。同时,系统需要记录航班整体的最大起飞重量和最大业载重量,并判断整体是否超载。
实现方式
本次作业完善面向对象分层建模,新增仓位类、货舱类、排序调度类、输入校验类。采用对象数组完成多层对象存储,Flight聚合多个货舱,货舱聚合仓位与货物。自定义冒泡排序实现重量降序、同重量编号升序规则。逐级遍历货舱完成货物装载,分层判定三级超载状态,逐级输出装载结果与配载信息。
代码规模
本次作业代码量提升,总计两百余行代码,共七个类。类数量增多,层级关系更加复杂。
类图
classDiagram
class Position{
-int row
-int col
+Position(int,int)
+getPosName() String
}
class Cargo{
-String id
-double weight
-String targetCompId
-int order
+Cargo(String,double,String,int)
+getId() String
+getWeight() double
+getTargetCompId() String
+getOrder() int
}
class CargoCompartment{
-String id
-double maxWeight
-Position[] positions
-Cargo[] cargos
-int cargoCount
+CargoCompartment(String,double,int,int)
+addCargo(Cargo) boolean
+getCurrentWeight() double
+getId() String
+getMaxWeight() double
}
class Flight{
-String flightNo
-double maxTakeoffWeight
-double maxPayloadWeight
-CargoCompartment[] compartments
-int compCount
+Flight(String,double,double)
+addCompartment(CargoCompartment) void
+findCompartmentById(String) CargoCompartment
+getTotalCargoWeight() double
}
class LoadDispatcher{
+sortCargos(Cargo[],int) Cargo[]
}
class InputValidator{
+checkInt(int,int,int) boolean
}
class Main
Flight *-- CargoCompartment : 聚合
CargoCompartment *-- Position : 聚合
CargoCompartment *-- Cargo : 聚合
Main ..> Flight
Main ..> LoadDispatcher
Main ..> InputValidator
不足
在使用Scanner时对如何去掉回车符号还不是十分了解;
对类间关系的设计还不熟练;

第三次作业:航班载重平衡系统
作业要求:
在前两次作业中,我们实现了基础的货运管理和多货舱的划分,并引入了算法工具类。但在真实的航空业务中,飞机的装载不仅包含货物,还包含旅客及其随身行李。更关键的是,任何装载都必须经过严格的“载重平衡”计算,得出飞机的重心位置,以确保飞行安全。
实现方式
本次作业严格遵循单一职责、高内聚低耦合原则。Luggage行李类依附旅客,体现组合关系;Passenger自动计算旅客含行李总重;货舱类完成货物管理与冒泡排序;工具类统一处理输入校验、重心力矩计算;主类仅负责流程调度和输入输出;
代码规模:
本次为第一单元最后一次实验,也是代码量最多的一次,总共三百多行。总共七个类。
类图
classDiagram
class Luggage{
-double weight
+Luggage(double)
+getWeight() double
}
class Passenger{
-static final double STANDARD_WEIGHT
-Luggage luggage
+Passenger(double)
+getTotalWeight() double
}
class Cargo{
-int id
-double weight
+Cargo(int,double)
+getId() int
+getWeight() double
}
class CargoCompartment{
-int id
-int rows
-int cols
-double maxWeight
-List cargoList
-double currentWeight
+CargoCompartment(int,int,int,double)
+addCargo(Cargo) boolean
+sortCargos() void
}
class Flight{
-String flightNo
-List passengers
-CargoCompartment frontComp
-CargoCompartment rearComp
+Flight(String)
+addPassenger(Passenger) void
+getTotalPassengerWeight() double
}
class InputValidator{
+static getValidInt(Scanner) int
+static getValidDouble(Scanner) double
}
class WeightBalanceCalculator{
-static final double 各类航空常量
+generateLoadSheet(Flight) void
}
class Main
Passenger *-- Luggage : 组合
Flight *-- Passenger
Flight *-- CargoCompartment
CargoCompartment *-- Cargo
Main ..> InputValidator
Main ..> WeightBalanceCalculator
不足
对数据情况考虑还不够全面;
一些代码编写较为生硬

总结:
经过本单元三次航班货物配载系列作业的迭代练习,我从基础面向对象语法入门,到分层架构设计,再到结合专业业务逻辑开发程序的全过程,收获十分充实。
从代码编写层面来看,三次作业难度循序渐进,第一次作业仅完成简单实体类定义与基础数据处理;第二次作业引入多对象组合、多级判定规则,开始建立分层设计意识;第三次作业借助集合容器、工具类拆分、常量统一管理,同时融入航空载重配平专业算法,让代码结构变得规范清晰,高内聚低耦合的设计思想也逐步落地。我也从最初将所有逻辑堆砌在主方法中,慢慢学会拆分功能方法、抽取通用工具类,有效降低了方法圈复杂度与类之间的耦合程度,让代码可读性与可维护性提升。
在面向对象思想运用上,本单元我熟练掌握了类的封装、对象组合、聚合关系等核心用法,能够根据实际业务合理划分实体类与工具类。但自身仍存在明显不足,对于继承、多态以及常用设计模式的运用较为生疏,代码拓展性依旧存在提升空间,部分场景仍存在硬编码过多、功能复用性差的问题。
总而言之,第一单元的学习为我夯实了 Java 面向对象编程的根基,也让我熟悉了工程化代码的编写思路与作业开发流程。在后续的课程学习中,我会继续弥补设计模式相关知识短板,优化代码编写习惯,进一步强化逻辑思维与架构设计能力,在规范编码的同时,不断提升程序设计水平,为后续更加复杂的课程内容学习打好坚实基础。

posted @ 2026-05-18 19:46  曾安平  阅读(9)  评论(0)    收藏  举报