面向对象程序设计-课设汇报总结

前言

  • blog作业

每一份大作业都是检验知识掌握程度的试金石,而紧随其后的Blog作业,则堪称开启学习进阶之门的关键钥匙。在编程大作业中,那些曾让我们抓耳挠腮的代码逻辑错误、调试时反复出现的程序漏洞,通过Blog书写时的重新梳理,能够以时间轴为脉络串联起来,原本混沌的思维盲区逐渐清晰,形成具象化的问题解决图谱。通过结构化的复盘、批判性的反思与持续性的自我对话,帮助我们将每一次作业弄清楚,巩固课堂所学。

  • PTA作业

作为这门课程的核心任务,编程作业以其庞大的体量和阶梯式的难度,初期,题目聚焦于变量声明、循环结构等基础语法的运用,随着课程深入,题目开始融入面向对象编程的封装、继承与多态特性,复杂的业务逻辑如同迷宫,要求我们不仅要熟悉代码规则,更要具备拆解问题、设计解决方案的能力。PTA 平台上数量众多的作业,曾一度让我倍感压力。有时为了调试一个小小的语法错误,要花费数小时逐行排查,面对复杂的算法题,更是需要反复推敲逻辑。但正是在这种高强度的训练中,编程能力得到了肉眼可见的提升。

  • 实验

五次编程实验围绕动物进电器相关场景展开迭代设计,让我对编程语言特性有了直观认知。实验本身难度不算太大,重在程序迭代优化,但是实验系统不支持复制粘贴,手动敲代码不仅耗时,还常因拼写、括号错误导致程序报错,调试时错误定位也十分棘手,让每次实验都充满挑战。​这些实验串联起课堂知识与实际应用,从基础类对象创建到复杂系统功能实现,要求综合运用多种技术。尽管耗时较长,却切实锻炼了调试与自主解决问题的能力,是将理论转化为实践的重要途径。

  • 线上课程

课程团队精心录制的Java视频课与配套练习,聚焦Java基础知识与语法体系,通过循序渐进的讲解,帮助我们快速掌握编程语言的核心要点与基础方法。我们可以根据自身进度灵活安排学习时间,随时暂停、回放视频攻克难点,深入理解编程语言的逻辑架构与内在设计思路。

  • 线下课程

老师精准聚焦我们在面向对象编程中遇到的困惑,深入剖析类与对象、继承多态等核心概念。每一堂课都像是为知识盲区定制的解码器,不仅清晰勾勒出课程学习的重点脉络,更通过实用的现场编程演示,指引我们找到高效掌握Java编程的路径。反转课堂环节,通过自主学习、相互讲解,加深了对知识点的理解,让面向对象编程的知识真正内化于心。

面向对象技术总结

(一)封装、继承与多态

  • 封装

封装是面向对象编程(OOP)的核心支柱之一,它通过将数据(属性)与操作数据的方法(行为)捆绑在一个单元(类)中,并使用访问修饰符严格控制对内部成员的访问,从而实现数据隐藏与保护的设计理念。在 PTA 作业和实验中,我学会了合理运用访问修饰符,将类的属性设为private,然后通过public的getter和setter方法来访问和修改属性。所有编程的实现都要运用封装,合理使private、protected、public等访问修饰符,并结合final关键字限制属性的不可变性,构建出更加安全、稳定且易于扩展的面向对象系统。

  • 继承

继承通过建立类间的层次关系,实现了代码复用与多态,是面向对象编程的重要基石。合理使用继承能提高代码的可维护性和扩展性,但需注意避免滥用,通常继承需要符合“is-a”的关系,在实际开发中,应遵循 “组合优先于继承” 的原则,根据场景选择合适的设计模式。例如在PTA和实验中,Animal(动物)作为父类封装了所有动物的共性:name(名称)weight(重量)等属性,以及eat()(吃其他动物)、makesound()(叫声)等通用行为。Elephant(大象)、Lion(狮子)、Tiger(老虎)作为子类继承这些特性后,各自添加专属属性和行为,这种设计使代码复用率显著提高,同时为后续添加迭代提供了清晰的扩展路径。

  • 多态

多态是面向对象编程(OOP)的核心特性之一,它允许同一类型的引用调用不同的实现方法,使程序具备 "同一接口、多种实现" 的能力。这种特性通过继承和方法重写实现,是代码可扩展性和灵活性的关键。在PTA的作业实践中,我深刻体会到多态机制对代码设计的强大赋能。通过定义抽象父类Shape并让Circle、Rectangle等子类继承,我成功运用父类引用指向子类对象的方式(如Shape s = new Circle()),实现了对不同几何图形的统一化处理。这种设计模式允许我通过Shape类型的集合存储所有子类实例,并在遍历过程中自动调用子类重写的方法(getArea()等),无需为每个子类编写单独的处理逻辑。

(二)抽象类和接口

  • 抽象类

抽象类是面向对象编程中的一种特殊类,它为子类提供了一个通用的模板,同时强制子类实现特定的方法。抽象类不能被实例化,只能作为父类被继承,是实现代码复用与多态的重要手段。在PTA 的编程实践中,我深入理解了抽象类的设计思想与应用场景,通过定义抽象基类Shape,为所有几何图形建立了统一的接口规范,包括求面积,周长等的抽象方法,之后再在具体的子类中实现。这种实现方式使代码具备良好的扩展性,若需新增图形,只需继承Shape类并实现抽象方法,无需修改现有逻辑。抽象类的定义方式(abstract class)、抽象方法的声明规则(无方法体)以及子类实现的强制要求,我深刻理解了其在构建可维护、可扩展系统中的重要作用。

  • 接口

接口是面向对象编程中的一种抽象类型,它定义了一组方法签名但不包含实现,用于规定类应具备的行为。接口是实现多态和松耦合设计的重要工具,尤其在大型系统和框架中被广泛应用。再PTA和实验及课程实践中,使用Comparator(外部)和Comparable(内部)的接口对列表进行排序实现,使得代码的算法更加简便,并且接口的多实现特性赋予了类强大的行为组合能力,通过让一个类同时实现多个接口,能够将不同维度的功能进行正交组合,从而显著提升代码的灵活性与可扩展性。

(三)集合框架

Java 集合框架通过 "接口 - 抽象类 - 实现类" 的三层架构,将复杂的数据结构封装为统一的操作接口,既满足了性能需求,又遵循了面向对象的设计原则。理解其底层实现(如数组扩容、红黑树平衡)和设计思想(如迭代器模式、泛型类型安全),是掌握Java编程的关键基础,在实际开发中,根据场景选择合适的集合类型,能显著提升代码效率和可维护性。

核心接口层级:

Collection (根接口)
├─ List (有序、可重复)
│ ├─ ArrayList (动态数组)
│ ├─ LinkedList (双向链表)
│ └─ Vector (线程安全数组)
├─ Set (无序、唯一)
│ ├─ HashSet (基于HashMap实现)
│ ├─ TreeSet (红黑树排序)
│ └─ LinkedHashSet (链表维护插入顺序)
└─ Map (键值对映射)
├─ HashMap (哈希表实现)
├─ TreeMap (红黑树排序)
├─ LinkedHashMap (链表维护访问顺序)
└─ Hashtable (线程安全映射)

在PTA及其课程的实践中,主要以ArrayList和LinkedList为主要的使用集合框架,我对Java集合框架中的ArrayList和LinkedList有了深入的应用与理解。这两种List接口的实现类在底层数据结构和性能特性上存在本质差异,而这种差异直接决定了它们的适用场景。例如ArrayList适用于查找,LinkedList适用于增删。对于集合框架的正确使用提升了代码效率。

(四)异常

异常处理是Java程序设计中处理错误和异常情况的机制,通过try-catch-finally结构捕获并处理程序运行时的异常,避免程序因意外错误崩溃。它将错误处理逻辑与正常业务逻辑分离,使代码结构更清晰。Java异常分为受检异常(如IOException)和非受检异常(如 NullPointerException),受检异常必须在方法中声明或使用try-catch处理,非受检异常通常源于程序逻辑错误。例如,在动物进冰箱的实验中,在文件操作中用try-catch捕获读取异常,用finally确保资源关闭,提升用户体验和系统稳定性;在PTA及课程的编程实现中,尝尝遇到NullPointerException,这通常是因为访问了空链表,需检查链表,在操作链表前进行空值检查,确保不会对空引用执行操作。

(五)JavaFX

JavaFX是一款功能强大的富客户端应用开发框架,它提供了构建现代化、交互式桌面应用程序的完整解决方案,作为Java平台的重要组成部分,JavaFX不仅继承了Java语言跨平台的特性,还通过硬件加速的图形渲染、流畅的动画效果和丰富的 UI 组件,打造出视觉效果出色的应用界面。在实验中 ,通过合理运用HBox等布局管理器进行界面分区,结合Button、Label、TextArea等控件构建基础交互框架以及Animation等的使用实现动画操作,成功实现了动物角色拖拽进入电器的核心玩法。这门课程采用翻转课堂模式,由学生分组讲解控件使用、FXML布局等章节内容,但是内容较多,有种 "听时明白做时懵" 的状态,在真正实验中可以很清楚地感受到自己掌握的不熟练,之后应该继续学习这种前端开发,通过理论与实践的双重提升,逐步攻克复杂交互开发与界面性能优化的技术难关。

踩坑心得

  • 对于Scanner类的应用,当next()或nextInt()等方法读取数据后,输入缓冲区中可能残留换行符,此时若直接调用nextLine()会读取到空行,因此需先用nextLine()消耗掉残留的换行符。输出时,要通过println()控制换行,或用printf()格式化输出(如"%d %s\n"),确保空格与换行符的使用符合需求,避免因格式错误导致数据展示异常。
  • 在编程实践中,深刻体会到准确理解题目需求与严谨推敲算法逻辑是开发成功的前提。以电梯运行题目集为例,初期因急于编码,未充分梳理楼层调度规则、乘客优先级处理等核心需求,直接开始类结构设计,导致代码实现过程中频繁发现逻辑漏洞。例如,未提前规划电梯状态机转换规则,致使后续不断修改电梯运行方向、停靠逻辑的代码,不仅反复重构类设计,更陷入复杂的调试困境。这一经历让我深刻认识到,需求分析不足将引发 “牵一发而动全身” 的连锁反应,大幅降低开发效率。只有在前期通过绘制流程图、编写伪代码等方式,系统性拆解问题、明确算法边界,才能使后续编码工作更加顺畅高效,避免陷入低效的重复开发循环。
  • 在PTA航空空运系统开发实践中,深刻体会到遵循单一职责原则对类设计的重要性。初期设计时,为图便捷将计费计算、总重量核算等多个功能全部集中在Order订单类中,导致该类承担过多职责,代码逻辑复杂臃肿。随着需求迭代,每当修改计费规则或优化重量计算逻辑,都会引发其他功能模块的连锁反应,牵一发而动全身,极大增加了维护成本与调试难度。这段经历让我意识到,只有让每个类专注于单一核心功能,实现高内聚、低耦合,才能为系统构建稳固架构,真正提升其可扩展性与运行效率。
  • 在编程世界里,空指针异常如同潜伏的暗礁,常因对null引用的疏忽操作而引发程序崩溃。当从集合中获取可能不存在的元素、调用未初始化的类属性方法,或是未经判空就使用外部接口返回值时,这类异常便会悄然浮现。要规避此风险,对集合操作结果、方法返回值及类属性进行null校验,并在定义引用时及时初始化。
  • 提升社交和团队合作能力很关键,一个人能力再强也有限,单靠自己很难搞定复杂问题。我深刻体会到跟别人交流的重要性,交流能接触到不同的思路和方法,不仅能少走很多冤枉路,还能发现自己没想到的解决办法。毕竟团队协作时,每个人的想法凑在一起,往往比自己闷头琢磨效率高得多,以后得多跟大家多交流合作才行。

改进建议及总结

总结

Java程序设计这门课是我编程入门的第一门关键课程。它不仅让我掌握了基础的Java语法,更系统地培养了面向对象的编程思维。回顾学习面向对象程序设计的历程,从对Java语言的陌生到熟练运用封装、继承、多态等核心特性,我实现了编程能力的蜕变。PTA实战与项目开发中,我在电梯调度、系统管理等复杂任务里锤炼逻辑思维,即便遭遇代码漏洞、功能卡顿等难题,也通过反复调试与知识补足突破瓶颈。翻转课堂的角色转换,则让我在知识输出中深化理解,同时提升了协作表达能力。这段学习经历让我明白,编程既要扎实掌握理论根基,更需在实践中打磨技能,持续的探索与坚持,正是攻克技术难关的关键。

改进建议

  • 在课堂中引入小组研讨机制,围绕典型的面向对象设计案例组织协作探究。每组通过头脑风暴完成类图设计、继承关系梳理及多态应用方案,教师巡回指导并实时点评,以此强化团队协同与逻辑思辨能力。
  • 在课堂教学中,建议老师适当融入专业就业指导内容,结合当下行业趋势,提供清晰的职业规划思路通过这些内容的分享,帮助我们明确学习目标,提前规划职业发展路径。
  • JavaFX在布局逻辑、FXML绑定及事件处理等模块的学习复杂度较高,当前课程讲解节奏较快不能及时消化,建议可以将课程的这部分内容延长一定期限,确保知识点吸收与实践应用同步推进。
posted @ 2025-06-18 23:13  olwz  阅读(25)  评论(0)    收藏  举报
//一下两个链接最好自己保存下来,再上传到自己的博客园的“文件”选项中