面向对象程序设计课程总结-第三次Blog作业
一、前言:
首先,本门课程以线上和线下课程展开。线下课程主攻程序设计时的思维逻辑和难以理解的知识点讲解,课程工作量和难度在后期有显著提升,但满足循循渐进的学习过程。线上课程以类似于网课的形式开展,主攻Java程序编写时的一些语法规则和Java基础的讲解,并附有随堂的测验,其工作量和难度都适中可以较好的完成。其次,PTA作业,实验用来训练和巩固所学,虽然一次大作业工作量大,难度又大,但后来的大作业都比较友善。所以除了第一次大作业,总体而言工作量和难度是恰当的,能够感受到所学在作业中有所体现。最后是Blog作业,每一次大作业(PTA)后对所得和所失进行总结,改进和提升。难度不大,但是工作量感觉挺大的,不过时间一般都给的比较充足。综合起来看是恰当的。
二、面向对象技术总结:
封装、继承、多态、抽象类、接口、集合框架、异常以及JavaFX等相关内容,是本课程所涉及的技术点。在本学期的《面向对象程序设计》课程中,我系统地学习了封装、继承、多态、抽象类、接口、异常处理、集合框架、JavaFX等核心概念,这段学习历程让我受益匪浅。从最初对"对象"概念的模糊认识到如今能够运用面向对象思维解决实际问题,我深刻体会到了编程思想的转变过程。
-
1.封装:
在我看来,封装最核心的点就是降低类与类之间的耦合度,从而提高代码的安全性、可维护性和可复用性。Java提供了四种访问修饰符,分别是public、protected、private和默认(无修饰符)。通过使用这些访问修饰符,可以控制类的成员(属性和方法)的访问权限,从而实现封装。private,私有访问权限,只能在类的内部访问。通常用于隐藏类的内部属性和方法。protected,受保护访问权限,可以在同一个包内访问,也可以在其他包的子类中访问。
public,公共访问权限,可以在任何地方访问(跨包需要导包)。default(无修饰符),默认访问权限,只能在同一个包内访问。每一道PTA作业都有它的影子。
-
2.继承与多态:
继承和多态是面向对象编程中两个重要的特性,它们共同构成了代码复用的核心机制。继承允许子类获取父类的属性和方法,从而实现代码的层级扩展。在编写代码时我们使用extends关键字实现单继承(一个子类只能有一个直接父类)。多态则通过"一个接口,多种实现"的方式,使得程序在运行时能够根据实际对象类型调用相应的方法。多态的实现主要依靠方法重写(Override)和父类引用指向子类对象这两个技术点。实际编写过程还有“向上转型”和“向下转型”两种创建实例的方式,我更喜欢使用向上转型,即将子类对象的引用赋给父类类型的变量(例如:Animal animal = new Dog();Animal是父类,Dog是子类),因为子类对象总是兼容父类类型,所以不用像向下转型一样还要进行一下类型的转换。通过继承与多态,可以实现“对修改封闭,对拓展开放”。实验二、三都有体现。
-
3.抽象类:
抽象类是介于普通类和接口之间的一种特殊类,用abstract关键字修饰。它最大的特点是可以包含抽象方法(没有方法体的方法),这些抽象方法强制子类必须实现而且抽象类不能被实例化,主要作为其他类的基类使用。抽象类也可以包含具体实现的方法、成员变量和构造方法,所以抽象类可以作为某些类共同特征的一个模板,然后其他类去继承它。
-
4.接口:
接口是Java中实现多继承的关键机制,它弥补了单继承的缺陷,使用interface关键字定义。如今的接口可以包含默认方法(default修饰)和静态方法,打破了之前只能包含抽象方法的限制。接口的所有成员变量默认都是public static final的,所有方法默认都是public abstract的(除了默认方法和静态方法)。类通过implements关键字实现接口,一个类可以实现多个接口。它可以帮助我们设计出灵活、可扩展和解耦的系统,就像笔记本电脑使用USB连接键盘、鼠标等外设,即插即用。
-
5.集合框架:
是一套用于存储和操作数据集合的标准化架构,目前我接触到使用这一架构来解决问题是一道筛选一段Java代码中关键字出现次数的题目,并且结合了正则表达式。我使用了Map接口的实现类HashMap,通过“键”和“值”来处理数据真的非常适用于这道题目,但是在获取和修改键和值与数组和列表有所不同,需要绕点弯去获取。我能感受到这是一套强大的工具,处理数据结构应该很有用,现在只是刚接触皮毛,后续的学习必不可少。
-
6.异常处理:
异常处理就像你对于程序异常的一个预判,或者说这里的程序运行在某些情况下会抛出异常,但我们不选择使用if-else语句来判断。主要依靠try-catch-finally语句块来实现。异常分为检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)。检查型异常必须在编译时处理(要么捕获,要么声明抛出),如IOException;而非检查型异常(RuntimeException及其子类)通常由程序逻辑错误引起,不强制处理。良好的异常处理应该遵循以下原则:具体异常优先捕获、不要吞没异常、合理使用异常链。这一部分的语法我觉得不好写,对于它的语法规则有些模糊。
-
7.JavaFX:
JavaFX是Java的下一代GUI工具包,用于替代传统的Swing框架。它采用场景图(Scene Graph)的树形结构来组织UI组件,支持CSS样式、FXML声明式布局和丰富的动画效果。JavaFX的核心类包括:Stage(舞台,顶级容器)、Scene(场景,包含控件)、Pane(布局面板)和Control(各种UI控件)。与Swing相比,JavaFX具有更现代化的外观、更好的硬件加速支持和更强大的多媒体处理能力(支持音频、视频和3D图形)。通过绑定(Binding)机制可以实现数据与UI的自动同步,而事件处理机制则采用观察者模式来实现用户交互的响应。实验五就进行了使用但感觉吃力,对于JavaFX,运用或者说训练的比较少,所以这一部分空白比较大,要加紧学习。
三、踩坑心得:
- 在编码前提前设计,不设计就直接编码很容易导致逻辑错误,东补西凑出的逻辑实在不耐打。
- 在变量较多时,采用驼峰命名法,这样做有利于编码时变量名编写的正确率。要不然在代码行数较多时,很容易就会编写错误,虽然在编译器里会有所提示,但有助于代码的美观和规范。大小写的差异也会引发错误!
- 想想边界测试,好的,全面的边界测试样例可以一针见血的指出程序的逻辑错误,而自检逻辑是一件困难的事,顺着自己的逻辑来就是感觉没有问题。
- 写注释!写注释!注释能帮助我们快速理解编码意图,虽然自检逻辑困难,但或许过几天会有新的想法冒出来,从另一个角度出发重新审视这条逻辑。这时候通过注释,快速定位理清思路,解决问题。同时,也提高了代码的可读性。
四、总结:
经过面向对象程序设计课程的学习,我掌握了OOP的核心思想从最初的 "面向过程编程" 转向 "面向对象设计",学会用类和对象组织代码。理解 "高内聚、低耦合" 的重要性,代码可维护性显著提高。我系统地学习了封装、继承、多态、抽象类、接口、异常处理和集合框架等核心概念。虽然学习过程中遇到了不少困难,比如初期代码逻辑混乱、对多态理解不透彻等问题,但通过不断调试、查阅资料和请教他人,我逐渐掌握了用面向对象思维组织代码的能力。在这门课程的学习过程中,在PTA大作业、实验中我曾多次因为程序无法通过测试点而焦头烂额,有时甚至花费数小时反复调试却依然找不到问题所在。记得实验三,使用列表来存储数据,但是运行总是抛出空异常,好不容易发现了逻辑错误,再次运行却发现进入了死循环。对着电脑屏幕一筹莫展,只能苦笑,后来在IDE中设置断点一步步跟踪变量变化,发现是退出循环出了问题,有个方法重复调用了。遇见困难并不可怕,可怕的是不去攻破它。“不服就干嘛!”当看到测试点全过的那一刻,那种喜悦和成就感是无可比拟的。但是我知道,遇见bug是家常便饭的事,编程不仅需要理论知识,更需要耐心和细致的调试能力。每次解决这样的难题,都让我对Java的理解更深一层,也让我明白遇到bug时保持冷静、系统化排查的重要性。现在回想起来,正是这些"过不去"的测试点,才让我真正掌握了面向对象编程的精髓。时间转瞬即逝,大一已然快结束,站在大一的尾巴上,我期待着迎接大二新的困难与挑战(可能会被虐惨~),相信凭借这一年来培养的编程思维和解决问题的能力,我一定能迎接更大的成长。冲!冲!冲!

浙公网安备 33010602011771号