NCHU-面向对象课程总结
前言
本学期已接近尾声,总共包括三次blog作业,十一次PTA作业,五次围绕大象冰箱问题的实验作业,以及线上慕课和线下教学,其中第一次分配的blog作业部分难度较大,工作量也较大,通过前两次blog作业的完成,我也逐渐掌握了阶段性地对自己所学内容进行总结;
实验作业是由简单到复杂的一个过程,从简单将大象装进冰箱,到图形页面可视化整个程序;线上慕课可以帮我重新找回一些课堂上遗忘的知识点,线下课程则是教会我解决一些细节的问题,从老师现场敲的代码中学到一些更直观的处理方法。
总的来说,教学和实践联系衔接地很紧密,让我的学习过程很充实,从理论到实践都通过训练都得到了测试,让我学到了很多东西,但是这门语言学精了还是任重道远啊。
面向对象技术总结
在整个学期的Java学习过程中,从电梯问题迭代问题到后面航空运输系统的实践,我也一点点地掌握了封装的属性隐藏与模块化、继承、多态化的接口复用与动态扩展,以及抽象类与接口混合运用,我已经能同时熟练运用ArrayList等处理数据,而且通过条件判断与正则表达式实现异常处理。
JavaFX图形界面开发也在线下同学们的翻转课堂分享和第五次实验中得到提升,但仍对部分设计模式的应用不够深入,后续需要在UI设计开发与异常处理规范化等方面进一步训练提升。
封装
封装的本质是将数据与操作逻辑捆在一起,通过访问修饰符控制外部访问,确保数据安全性与代码可维护性。比如电梯类里的当前楼层,要是直接让人随便改就乱套了,所以用private藏起来,只给getCurrentFloor和setCurrentFloor这两个方法当“窗口”,别人想知道或修改楼层,只能通过这俩方法,而且我还能在方法里加检查逻辑,比如楼层合不合法,这样数据就安全多了。
继承
继承就像子承父业,子类能直接拿父类的属性和方法来用,不用自己再写一遍,省事又减少重复代码。比如写person这个父类有姓名和电话,客户作为子类就可以直接用这些属性,还能自己再加点客户特有的东西,像客户ID。而且继承后子类还能改造父类的方法,比如父类有个显示信息的方法,子类觉得不够,就重写一个更详细的,这也为多态打下了基础,让父类引用能调用子类的不同实现。
多态
多态就像一人分饰多角。比如定义一个图形抽象类,里面有个显示方法,那点和线作为子类,各自把显示方法写成自己的样子。然后用图形类的变量去引用点或线的对象,调用显示方法时,它自己就知道该显示点的坐标还是线的长度。这好处可多了,比如管理一堆图形时,不管里面是点还是线,直接统一调用显示方法就行,不用一个个判断类型,代码一下就灵活了。
抽象类
抽象类里面可能有没写完的方法,得让子类去补全。比如定义魔方抽象类,里面有算体积和表面积的抽象方法,因为不同形状的魔方算法不一样,所以先空着,等正方形魔方子类来写具体怎么算。抽象类不能直接创建对象,但可以当模板让子类继承,强制子类把没写完的方法补上,这样就能保证子类都具备这些核心功能,特别适合用来规范一系列相关类的结构。
接口
接口比抽象类更纯粹,只规定要实现哪些方法,不关心怎么实现,而且一个类可以实现多个接口,解决了Java不能多继承的问题。
比如定义支付接口,里面规定要能获取支付类型和算折扣,那微信支付和现金支付就各自按自己的规则实现这些方法。用的时候,只要知道对象实现了这个接口,就能调用对应的方法,比如不管是哪种支付方式,都能调calculateDiscount算折扣,特别适合做可扩展的功能,想加新支付方式直接写个新类实现接口就行。
集合框架
集合框架比传统数组好用太多了。以前用数组得先定死大小,不够用了还得自己倒腾,现在用ArrayList,想加多少元素就加多少,自动扩容;找元素直接用contains,不用自己写循环;删除元素用remove,位置都不用自己算。
我一般用ArrayList存储各类请求。不过这只是冰山一角,像HashMap能快速查键值对,PriorityQueue能按优先级排请求,这些我还不太熟,有时候得查资料才会用,但比数组真的方便太多了。
异常处理
异常处理就是程序遇到麻烦时的对策。比如用户输入了无效楼层,程序不能直接崩溃吧,得有办法处理。用try-catch把可能出错的代码包起来,出错了就跳到catch里执行补救措施,比如提示输入错误,然后继续运行。我现在基本能看懂try-catch的逻辑,也会用它处理简单的输入异常,像把字符串转数字时可能出错,就catch一下。
但复杂的情况还搞不定,比如自定义异常类,或者处理文件读取这种必须声明的异常,还需要多练习。
JavaFX
JavaFX是做图形界面的工具,组件一多,事件逻辑也容易乱,比如按钮点击和文本框输入的处理混在一起就容易懵。对动画类的用法还不熟,只能实现最基础的功能,离灵活运用还差得远。
踩坑心得
刚开始写电梯调度作业时,我压根没仔细看输入输出要求,结果写出来的代码跟题目要求完全对不上。比如题目要求外部请求要分上下行,我却按现实逻辑一股脑塞到一个队列里,等到测试时发现同方向请求没优先处理,代码整整推翻了三次。最崩溃的是有次输出格式漏看了个空格,对着答案错误调试两小时,最后发现是输出行尾多了个空格,题目分析这事儿,可真是一点儿不能图省事。
最开始写代码从来不想类结构,上来就是写主类,结果写到一半发现逻辑乱成麻。比如第一次写点线面程序,Point、Line类全挤在Main里,后来要加Plane类时,代码这东西改一个地方牵扯一堆。直到后来被逼着画类图,先把Element抽象类和子类关系理顺,才发现提前规划类结构就像盖房子先画图纸,虽然多花几十分钟,但后面写代码就顺很多了。现在哪怕简单题,我也会在纸上划拉一下类之间的关系,免得后面返工到想砸电脑。
到航空货运作业要做界面时,我才发现JavaFX完全是我的盲区。想做个按钮绑定事件,网上查了十几种写法,抄到代码里不是报空指针就是布局错乱。翻转课堂上同学讲的布局管理器,我听得云里雾里,课后自己试时,GridPane和BorderPane混用得乱七八糟的,后来我学乖了,先找系统教程把基础组件一个个敲一遍,再对着作业需求慢慢磨,虽然进度慢,但比从前是好多了。
现在回头看,刚开始写代码时的崩溃,全是因为总想走捷径。问题分析图省事、类设计凭感觉,最后反而花更多时间填坑。Java这玩意儿,每个坑都是必不可少的,一点点积累经验,哪怕现在写代码还是会遇到新问题,但至少知道先慢下来分析题目需求,再动手敲,毕竟被折磨够了才明白,编程里最省时间的路,从来都是先把基础步骤走扎实。
改进建议与总结
对于改进建议方面,我觉得实验系统还可以再升级一下,每次写代码都得逐个字母敲,光是输入类名和方法名就得花不少功夫。
有次写电梯调度程序,因为漏敲了一个分号,编译器报错,我对着代码瞪了20分钟才发现问题;还有时漏了一行import java.util.List,导致整个程序找不到集合类,调试了半天才意识到是少打了一行。要是引入IDEA的功能,不仅能减少低级错误,还能让我们把精力放在逻辑设计上。毕竟学编程不是练打字,更该聚焦在算法和代码设计这些核心能力上。
从面向对象程序设计这本厚厚的教科书来看,我还要学习的东西还有很多很多。前几章学的封装、继承、多态只是入门砖,后面的设计模式、泛型编程、异常处理体系才是重头戏。比如书中讲的策略模式,能把电梯调度算法封装成独立策略类,比我之前写的大段if-else好看得多;还有泛型集合的类型安全机制,直到看到书中的类型擦除原理,才明白为什么Java能避免运行时类型错误。接下来打算更多放在实践学习上,比如学完接口章节就做个支付系统接口扩展练习,让理论真正落地。
对于整门java课程来说,单从图形页面设计这一块就可以看出,java语言在开发程序这一块还是比C要好用得多,对比C语言的图形开发,Java简直新手友好。
以前用C写个简单窗口,得自己处理窗口句柄、消息循环这些底层细节,写几百行代码才能看到一个按钮;而JavaFX只需要几行代码就能拖出按钮、文本框,还能直接美化样式。布局管理器能自动适配窗口大小,按钮放在顶部就始终在顶部,不像C语言要手动计算每个组件的坐标。现在做航空货运系统的界面时,我才真正体会到Java在企业级开发中的优势。以后打算多熟悉些图形项目,比如航空运输系统页面化,把Java的UI能力练熟,希望自己在日后的学习中将java语言运用地更熟练一些,为日后的工作做好准备。

浙公网安备 33010602011771号