第三次Blog作业

Java面向对象编程学习全记录——从基础到GUI开发的成长之旅

经过一个学期的Java面向对象编程学习,我完成了一系列PTA作业、实验项目、线上学习和线下课程。整体来看,这门课程的工作量相当充实,每周平均需要投入10-12小时才能完成所有任务。PTA作业从基础的类与对象设计逐渐过渡到复杂的集合框架应用;实验项目则从简单的"大象装冰箱"模拟逐步升级为带有图形界面的完整应用系统。

课程难度呈现明显的阶梯式上升特征:实验一和实验二主要考察类与对象的基本概念;实验三引入集合框架和排序算法;实验四增加了抽象类和接口的设计;实验五则综合应用JavaFX实现图形界面。这种循序渐进的设计让我能够逐步适应面向对象编程的思维方式,而不会一开始就被复杂的系统吓倒。

一, 面向对象技术深度总结

  1. 封装:从数据保护到职责划分
    在实验二中,我首次真正理解了封装的意义。通过将大象类的属性(name, weight, height)设为private并提供公有的getter/setter方法,我学会了如何保护对象内部状态不被意外修改。随着实验的深入,我发现封装不仅仅是数据隐藏,更是模块职责的划分。

// 实验二中的Elephant类体现了基本封装思想
public class Elephant {
private String name;
private int weight;
private int height;

public Elephant(String name, int weight, int height) {
    this.name = name;
    this.weight = weight;
    this.height = height;
}

// 公有的getter方法提供受控访问
public String getName() { return name; }
public int getWeight() { return weight; }

}

  1. 继承与多态:构建灵活的对象体系
    实验四让我深入理解了继承与多态的价值。通过设计Animal抽象类和Elephant、Lion、Tiger等子类,我学会了如何将共性提取到父类中,而将特性保留在子类中。多态则让我能够以统一的方式处理不同类型的动物对象。

// 实验四中的继承体系
public abstract class Animal {
protected String name;
protected int weight;
// 公共属性和方法...
}

public class Lion extends Animal implements HasAggression {
@Override
public void cry() {
System.out.println(name + " 狮子:怒吼一声!");
}
}

  1. 抽象类与接口:契约式编程的实践
    实验四中的抽象类Electric和接口HasAggression让我理解了"面向接口编程"的意义。抽象类Electric定义了电器类的基本结构和部分实现,而HasAggression接口则标记了具有攻击性的动物。

// 实验四中的接口应用
public interface HasAggression {
int getAggression(); // 1表示有攻击性,0表示无
}

public class Lion extends Animal implements HasAggression {
@Override
public int getAggression() {
return 1;
}
}
4. 集合框架:从数组到动态容器
实验三到实验五展示了集合框架的强大能力。从实验二中使用简单数组存储大象,到实验四中使用ArrayList管理动物列表,再到实验五中结合JavaFX控件展示集合数据,我深刻体会到了集合框架的灵活性。

// 实验四中电器类使用ArrayList管理动物
public abstract class Electric {
protected List animals = new ArrayList<>();

public void addAnimal(Animal animal) {
    if (animals.size() >= capacity) return;
    animals.add(animal);
}

}

5.** JavaFX:面向对象的GUI开发**
实验五是我第一次接触JavaFX图形编程,通过将实验四的逻辑与图形界面结合,我理解了事件驱动编程模型和MVC架构的基本思想。PathTransition动画的实现尤其让我印象深刻。

// 实验五中的动画实现
PathTransition transition = new PathTransition();
transition.setNode(movingMarker);
transition.setPath(path);
transition.setDuration(Duration.seconds(distance/speed));
transition.play();

二, 采坑心得:从挫折中成长

  1. 类型转换与接口实现
    在实验四中,我最初对HasAggression接口的实现方式理解有误,导致在判断动物攻击性时频繁出现ClassCastException。通过反复调试,我学会了使用instanceof进行类型检查的正确方式:

// 错误的方式
int aggression = ((HasAggression)animal).getAggression(); // 可能抛出ClassCastException

// 正确的方式
if (animal instanceof HasAggression) {
int aggression = ((HasAggression)animal).getAggression();
}

  1. 集合排序的困惑
    实验四要求使用Collections.sort()进行多种排序,我最初混淆了Comparable和Comparator的用法。通过实践,我理解了:

Comparable:对象自身实现的默认排序规则

Comparator:外部定义的可插拔排序策略

// 实验四中的两种排序方式
Collections.sort(animalList); // 使用Animal实现的Comparable
Collections.sort(animalList, new AnimalOrderComparator()); // 使用Comparator
JavaFX坐标系的误解

  1. 实验五中实现动物移动动画时,我最初错误理解了局部坐标和场景坐标的关系,导致动物总是飞到错误位置。通过调试,我掌握了坐标转换的正确方法:

// 获取精确的场景坐标
Bounds sourceBounds = sourceMarker.localToScene(sourceMarker.getBoundsInLocal());
double targetX = targetBounds.getMinX() - animalContainer.localToScene(0, 0).getX();

三, 改进建议与课程总结

  1. 课程亮点
    (1)渐进式学习路径:从基础到高级的内容安排非常合理

(2)理论与实践结合:每个概念都有对应的实验验证

(3)综合性实验设计:实验五整合了前面所有知识点

  1. 改进建议
    (1)JavaFX前置知识:建议在实验五前增加1-2个基础GUI实验

(2)调试指导:可以提供更多常见错误的排查指南

(3)代码评审环节:增加同学间的代码互评可能更有助于学习

四, 个人收获总结
代码之外,是成长的诗与远方
学习编程,最初或许只是为了完成作业、通过考试,但不知不觉中,它已经改变了我的思维方式。从实验二的“大象装冰箱”到实验五的JavaFX动画,我不仅学会了如何让对象在内存中交互,更学会了如何让逻辑在思维中流动。

记得在实验四调试排序算法时,深夜的屏幕前,我一遍遍修改compareTo()方法,直到Collections.sort()终于按照我期望的顺序排列动物列表。那一刻的成就感,不亚于解开一道困扰已久的数学题。而在实验五,当我第一次看到自己写的小狮子从屏幕中央飞入冰箱,并在日志区留下“狮子已装入”的记录时,那种“让代码活起来”的惊喜,让我真切地感受到编程的魔力。

编程不仅是逻辑,更是创造。
它像写诗一样,需要严谨的结构,也需要灵感的迸发。类与对象是词汇,继承与多态是修辞,而整个程序,就是一首由代码写成的诗。

这门课让我明白,真正的编程高手,不是记住了多少API,而是能用代码优雅地描述世界。冰箱、大象、狮子、老虎,它们不仅仅是对象,而是我构建的一个小小世界。而Java的封装、继承、多态,就像是这个世界的物理法则,让一切运行得井然有序。

posted on 2025-06-22 19:41  高涵子林  阅读(10)  评论(0)    收藏  举报

导航