第三次blog总结
一、前言:
在面向对象程序设计这门课程的学习过程中,我经历了从Java基础语法到面向对象核心思想,再到JavaFX界面开发的完整学习路径。整个课程的学习内容丰富,涵盖了理论与实践的多个层面,包括11次PTA编程作业、5次实验报告以及线上线下的课程学习,工作量饱满且难度逐步递增,为我构建了系统的Java编程知识体系。
PTA作业作为课程的重要组成部分,从基础的语法练习开始,逐步深入到面向对象的核心概念。11次作业环环相扣,每次作业都针对特定的知识点进行强化训练,例如类的定义、对象的创建、继承关系的实现、接口的应用等。作业难度从简单的单类程序到复杂的综合系统设计,层层递进,让我在实践中不断巩固理论知识。
实验环节则更注重综合应用能力的培养,5次实验从环境配置到JavaFX界面开发,涵盖了面向对象编程的各个关键环节。实验一熟悉开发环境并掌握基本程序结构,实验二深入理解类与对象的关系,实验三探索继承与多态的应用,实验四研究抽象类与接口的设计,实验五则结合JavaFX进行界面开发。每次实验都需要完成从需求分析、设计到编码调试的完整流程,难度较高,但也让我收获颇丰。
线上课程提供了灵活的学习方式,我可以反复观看知识点讲解,弥补课堂学习的不足;线下课程则通过教师的当面讲解和互动,解决了学习中的困惑。整体而言,课程的工作量适中,难度设置合理,能够有效提升我的编程能力和面向对象的设计思维。
二、面向对象技术总结
封装:
封装是面向对象编程的基础,通过将数据和操作数据的方法封装在类中,实现了数据的隐藏和保护。在课程学习中,我通过PTA作业和实验深刻理解了封装的重要性。
在实验一中,我学会了定义类的成员变量和成员方法,通过设置访问修饰符(如private、public)来控制数据的访问权限。例如,在分数计算器的实现中,将分子和分母设为private,通过public的getter和setter方法进行访问,确保了数据的安全性。在PTA作业中,多次遇到需要封装数据的情况,比如学生类、图书类等,通过封装使得代码结构更加清晰,维护更加方便。
然而,在初期的学习中,我对封装的理解不够深入,经常出现成员变量直接暴露的情况,没有充分利用封装的优势。通过不断的练习和教师的指导,我逐渐掌握了封装的技巧,能够合理设计类的结构,将数据和行为有机地结合起来。
继承:
继承是面向对象编程中实现代码复用的重要机制,通过子类继承父类的属性和方法,可以避免重复编码,提高开发效率。在实验三和PTA作业中,我多次应用继承关系,实现了类的层次结构设计。
例如,在实验三中,设计了动物类(Animal)作为父类,狮子(Lion)、老虎(Tiger)、大象(Elephant)作为子类,子类继承父类的基本属性(名称、体重、攻击能力等)和方法(进入电器、攻击判断等),并重写了发声方法(makeSound),实现了不同动物的特有行为。在PTA作业中,也经常通过继承来实现不同类型对象的共性抽取,比如交通工具类的继承体系。
通过继承的学习,我认识到合理的继承关系设计能够极大地提高代码的复用性和可维护性。但同时也需要注意继承的滥用问题,避免形成复杂的继承层次,导致代码难以理解和维护。在这方面,我还需要更多的实践来掌握继承的适用场景和设计原则。
多态:
多态是面向对象编程的核心概念之一,它使得程序能够在运行时动态决定调用哪个方法,实现了接口与实现的分离。在实验三和实验四中,我通过方法重写和接口实现深刻体会了多态的应用。
在实验三中,不同的动物子类重写了父类的makeSound方法,当调用动物对象的makeSound方法时,会根据对象的实际类型调用相应的实现。在实验四中,通过接口(Attackable)定义了攻击性判断的方法,不同的动物类实现该接口,实现了不同的攻击逻辑。在PTA作业中,也多次利用多态特性,比如使用父类引用指向子类对象,实现了灵活的方法调用。
多态的应用让我感受到面向对象编程的灵活性和可扩展性,通过接口和抽象类的设计,可以在不修改原有代码的情况下添加新的实现。但在理解多态的过程中,我也曾对父类引用和子类对象的关系感到困惑,通过调试和分析代码,逐渐理清了多态的运行机制。
抽象类与接口:
抽象类和接口是面向对象设计中用于抽象和规范的重要工具。在实验四中,我系统地学习了抽象类和接口的定义与使用,明确了它们的区别和适用场景。
抽象类可以包含抽象方法和具体方法,用于定义一组相关类的共同接口和部分实现,例如实验四中的Electric抽象类,定义了电器的基本属性和方法,并提供了部分具体实现。接口则完全是方法的声明,用于定义行为规范,例如Attackable接口,规范了动物的攻击性判断方法。
在PTA作业中,我学会了根据需求选择使用抽象类还是接口。当需要提供部分实现时,使用抽象类;当只需要定义行为规范时,使用接口。例如,在设计形状接口时,使用接口定义绘图和计算面积的方法;在设计交通工具抽象类时,提供部分共同属性和方法。
然而,在初期使用抽象类和接口时,我经常混淆它们的用途,导致设计不够合理。通过不断的实践和反思,我逐渐掌握了它们的使用技巧,能够根据问题域的特点进行恰当的抽象和规范。
集合框架:
Java集合框架提供了丰富的数据结构和算法,极大地简化了数据的存储和操作。在实验二、实验三和实验四中,我广泛使用了集合框架中的ArrayList、List等接口和类,实现了动物列表、电器列表的管理。
例如,在实验二中,使用ArrayList存储大象对象,实现了冰箱中大象的添加和排序;在实验三中,使用List存储动物对象,实现了电器中动物的管理和排序。通过集合框架的使用,我学会了如何高效地添加、删除、查找和排序数据,提高了代码的效率和可读性。
在PTA作业中,也多次用到集合框架来处理复杂的数据结构,比如使用Map存储键值对,使用Set存储不重复的元素等。通过这些实践,我对集合框架的体系结构和常用接口有了深入的理解,能够根据不同的需求选择合适的集合类型。
异常处理:
异常处理是程序设计中保障程序健壮性的重要机制,通过捕获和处理异常,可以让程序在遇到错误时优雅地处理,而不是崩溃。在课程学习中,我学习了Java的异常处理机制,并在实验和PTA作业中应用。
例如,在实验一中的分数计算器程序中,处理了分母为零的异常;在实验四中的文件读取操作中,处理了文件不存在的异常。通过try-catch-finally语句块,我学会了如何捕获异常、处理异常,并给出友好的提示信息。
然而,在异常处理的学习中,我也曾存在一些误区,比如捕获所有异常而不进行具体处理,或者忽略异常的处理。通过教师的指导和代码审查,我逐渐认识到合理的异常处理应该针对具体的异常类型进行处理,并给出有意义的错误信息,以提高程序的健壮性和用户体验。
JavaFX:
JavaFX是Java平台的图形界面开发工具包,在实验五中,我学习了JavaFX的基本原理和组件使用,实现了“动物装电器模拟系统”的界面设计。
通过实验五,我学会了使用JavaFX的布局容器(如VBox、HBox、Pane)进行界面布局,使用ImageView显示图标,使用PathTransition实现动画效果,使用事件驱动机制处理用户交互。例如,实现了动物选择、电器选择、动物移动动画和攻击逻辑的界面展示。
JavaFX的学习让我体会到了图形界面开发的乐趣,也认识到界面设计需要考虑用户体验和交互逻辑。但由于时间和经验的限制,我对JavaFX的高级特性(如FXML文件的使用、自定义组件的开发)掌握不够深入,需要在后续的学习中进一步加强。
三、采坑心得
环境配置与工具使用的坑
在课程开始阶段,配置Java开发环境时遇到了不少问题。第一次配置JDK环境变量时,由于对PATH变量的设置不熟悉,导致命令行中无法识别java和javac命令。经过查阅资料和反复尝试,才正确设置了JAVA_HOME和PATH变量,确保了开发环境的正常使用。
在使用IDE(集成开发环境)进行调试时,初期对调试工具的使用不够熟练,无法有效地定位代码中的错误。例如,在实验一中的分数计算器程序调试中,由于不会使用断点调试,只能通过打印输出语句来跟踪变量值,效率低下。通过学习IDE的调试技巧,学会了设置断点、单步执行、查看变量值等操作,大大提高了调试效率。
语法与逻辑错误的坑
在编程过程中,语法错误是最常见的问题。例如,在实验一中,编写main方法时忘记添加String[] args参数,导致程序无法运行;在实验二中,类的定义与文件名不匹配,导致编译错误。这些语法错误虽然简单,但在初期经常出现,需要仔细检查代码,养成良好的编码习惯。
逻辑错误则更难发现和解决。例如,在实验三中的动物攻击逻辑实现中,判断动物强弱的条件设置错误,导致攻击结果不符合预期。通过调试工具跟踪变量值的变化,逐步分析逻辑流程,才发现并修正了错误。在实验四中的排序功能实现中,比较器的逻辑错误导致排序结果混乱,同样通过调试和分析才解决问题。
这些经历让我认识到,编写代码时要仔细思考逻辑流程,调试时要善于利用工具,逐步排查问题。同时,编写清晰的注释和规范的代码结构,也有助于减少逻辑错误的发生。
面向对象设计的坑
在面向对象设计过程中,初期对类的职责划分不够清晰,导致类的功能过于复杂。例如,在实验二中的冰箱类(IceBox)设计中,同时承担了冰箱状态管理和排序功能,违反了单一职责原则。通过重构代码,将排序功能提取到单独的排序工具类(Sort)中,使得代码结构更加清晰,维护更加方便。
在继承关系的设计中,也曾出现过不合理的继承层次。例如,在实验三中,将电器类(Electric)的子类设计得过于复杂,导致继承关系混乱。通过重新分析问题域,简化继承层次,明确了父类和子类的职责,使得代码更加合理。
这些教训让我认识到,面向对象设计需要遵循设计原则,合理划分类的职责,建立清晰的继承关系,避免过度设计和设计不足。在设计阶段多思考、多讨论,可以减少后续开发中的问题。
资源管理与异常处理的坑
在处理文件资源和网络资源时,初期经常忘记关闭资源,导致资源泄漏。例如,在实验四中的文件读取操作中,没有在finally块中关闭Scanner对象,可能导致文件无法正常关闭。通过学习Java的try-with-resources语句,学会了自动关闭资源的方法,提高了代码的可靠性。
在异常处理中,初期存在捕获异常后不处理的情况,导致程序出现问题时无法给出有效的提示。例如,在实验五中的图像资源加载中,没有处理图像加载失败的异常,导致程序显示错误。通过添加异常处理逻辑,在图像加载失败时显示默认占位图,并记录错误日志,提高了程序的健壮性。
四、改进建议及总结
课程内容与教学方式的改进建议
-
增加实践案例的多样性:课程中的实验和PTA作业虽然涵盖了面向对象的核心概念,但可以增加更多不同领域的案例,比如银行系统、图书馆管理系统等,接触更多实际应用场景,提高解决实际问题的能力。
-
优化实验指导书的细节:实验指导书中可以增加更多的调试技巧和常见问题解决方案,更快地解决实验中遇到的问题。例如,在实验一中增加环境配置的详细步骤和常见错误处理。
-
增加代码审查和互评环节:可以安排学生之间进行代码审查和互评,让学生从他人的代码中学习优秀的设计和编码习惯,同时也能发现自己的不足。
作业与实验的改进建议
-
PTA作业的反馈机制:PTA作业可以提供更详细的错误提示,帮助学生更快地找到错误原因。例如,在编译错误时,不仅显示错误信息,还可以给出可能的解决方案。
-
实验的分阶段指导:将实验内容分为多个阶段,每个阶段提供明确的目标和指导,逐步完成实验任务。例如,在实验五中的JavaFX界面开发,可以先布局设计,再动画实现,最后事件处理。
个人学习总结
通过这门面向对象程序设计课程的学习,我系统地掌握了Java编程的基础知识和面向对象的核心思想,从最初的语法学习到最终的综合系统设计,每一步都充满了挑战和收获。
在知识层面,我深入理解了封装、继承、多态等面向对象的核心概念,掌握了抽象类、接口、集合框架、异常处理等重要技术,学会了使用JavaFX进行界面开发。这些知识为我今后的编程学习和实践奠定了坚实的基础。
在能力层面,我的编程能力和问题解决能力得到了显著提升。通过完成PTA作业和实验,我学会了从需求分析到代码实现的完整开发流程,掌握了调试技巧和代码优化方法,能够独立解决编程中遇到的问题。
在思维层面,我培养了面向对象的设计思维,能够运用封装、继承、多态等思想进行软件设计,考虑代码的复用性、可维护性和可扩展性。这种思维方式将对我今后的软件开发工作产生深远的影响。
然而,我也认识到自己在学习中还存在一些不足,比如对设计模式的应用不够熟练,对JavaFX的高级特性掌握不够深入,对复杂系统的设计经验不足等。在今后的学习中,我将继续加强这些方面的学习和实践,不断提升自己的编程水平和软件设计能力。
最后,感谢老师在课程中的悉心指导和耐心解答,感谢同学们在学习中的互相帮助。这门课程不仅让我学到了知识和技能,更培养了我对编程的兴趣和解决问题的能力,让我对未来的编程之路充满信心。

浙公网安备 33010602011771号