JAVA第二次blog总结

0.前言

这是我们在博客园上第二次写博客,进行JAVA阶段学习的总结。现在我们接触到JAVA已经有一段时间了,但难点还是在于编程思想和方法的改变,第二阶段的学习让我对于理解面向对象的封装性、继承性与多态性三大技术特性有了很大的进步。在这篇blog中将针对面向对象的封装性、继承性与多态性三大技术特性新的认识进行总结。

1.作业过程总结

针对上次总结中提到的以c语言的方式去写JAVA的这个问题,在这阶段的学习里有了很大的改变,在写PTA作业时已经能够看到对象,方法,属性,类的痕迹了,脑子里的概念也基本完善,对于程序的可读性也有了不错的改善。而且对于类的学习和认识也让我程序的复用性大大提高。

这三次的作业分别涉及到了正则表达式的应用,StringBuilder的应用,多态,继承,接口,抽象类,重载的应用,这些部分也是我们此阶段学习的重点,PTA则考查的是学习掌握情况和实际应用能力。第一次作业7-1 水文数据校验及处理难度非常大,也是我们第一次应用正则表达式,使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算。在听完老师上课讲的正则表达式之后我还是迷迷糊糊的根本弄不清楚,下课后参考CSDN里的帖子和录像回放才算是勉强明白,但是到了实际应用总是出问题,特别是输入输出的格式。除此之外小时分钟秒、流量、水位也都要用正则表达式判断。这道题在时间截止前还是没有得到分数,但是在之后老师上课对这道题的讲解让我有了很大收获。之后蒙特卡罗方法求出圆周率里产生随机数内存超限以及图形继承里的继承接口问题都给我造成了不小的困扰,但是也都一一解决了。第二次作业主要考察类的继承和多态性的使用方法。是在上一次作业的基础上进行功能和类的改进,不仅有抽象方法还有对图形属性的合法性检验。最后的排序也一度让我头疼不已但是后来发现这就是一个死的套路,学会之后使用起来很是方便。第三次作业依然是对图形继承的改进,这次采用了新的card类并进行排序,而且要求对卡片排序采用Comparable接口,但其实和我第一次所用的排序方法不谋而同。只是这次对于图形合法性判断以及输出格式有了很大的难度提升。最后一题对于求素数的算法优化让我感到很有趣,这不仅是编程算法应用的考察也是数学方面对于素数新的认识,同时也让我学习到了时间复杂度这个新的概念!在CSDN上看了很多篇帖子,也看到了各种各样的方法和思路,其中最好的两个就是埃拉托色尼筛选算法和欧拉筛选法。虽然欧拉筛选法时间复杂度更低,但是我对于欧拉算法空间换时间和下划数的思想不是很理解,所以采用了埃式算法。

这几次作业在编写程序上花费的时间不是特别多,主要是学习思想和方法比较占时间,但是如果你体会到了技术特性的特点,那你将会完成的很快,因为只有第一次是需要完全自己去写的,后面几次作业都是在前面的框架基础上进行结构和功能的改进,这让作业做起来越来越快。想要通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性,就要体会各个题目要求之间的相同与不同,在此基础上对框架进行修改,不能因为麻烦或者不理解就推倒重做,虽然那样也能完成要求,但是这样就失去了体会三大特点的机会,修改的过程才是你感悟和理解的过程。

至于编程的严谨性已是老生常谈了,这一点在水文检测的正则表达式和图形继承排序是输出里体现的淋漓尽致,在排序里明明我写的是对的,但是从大到小排让我弄成了从小到大排,导致测试点过不去浪费了很多时间,这都是粗心和不严谨造成的,不能一味地想当然。

2.OOP设计心得

面向对象程序设计有封装性、继承性与多态性三大技术特性。封装性就是讲程序的各个部分封装成类,然后按功能和职责对某些属性或方法设置访问权限。继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。而多态就是对象在不同情况下的不同表现,具体体现在定义和功能两个方面,简单的总结一下,多态可以用“三个定义和两个方法”来总结。三个定义分别是父类定义子类构建、接口定义实现类构建和抽象类定义实体类构建,而两个方法分别是方法重载和方法重写。这三个技术特性的关系密切,封装可以使代码模块化,而继承可以实现父类子类之间模块的联系,再赋予多态用于接口,使接口重用。这样相互配合就可以提高代码的逻辑性和复用性。总结起来就是一句话OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。

面向对象设计有两个基本原则,单一职责原则和开闭原则。单一职责原则规定一个类应该只有一个发生变化的原因,不要存在多于一个导致类变更的原因。通俗地说,即一个类只负责一项职责。而开闭原则讲的是一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。也就是说,如果修改或者添加一个功能,应该是通过扩展原来的代码,而不是通过修改原来的代码。OPP的思维方法首先考虑的不是解决问题,而是将所有东西想象成一个框架,再利用框架去思考问题,最后解决问题。

类的设计要根据题目的需求和逻辑的判断,就像上文提到利用框架去解决问题一样,这个“类”就可以成为你解决问题的框架。“类”顾名思义起到了分类的作用,让你的程序更有逻辑性和可读性,同时也提升了复用性。再结合封装性、继承性与多态性三大技术特性也就完成了OOP。平时写PTA的时候就会根据指导书里所给的类图去编写程序,发现非常便捷,同时也学习和观察,慢慢体会类图的设计思想。

3.测试的理解与实践

对于PTA里的测试点,我觉得测试用例应该主要从边界值,特殊值,错误输入值这三方面来检验。同时也要注意内存超限和死循环的情况。Junit进行程序的测试是非常重要的,我们写代码无非分三样:主流程、接口、实现类。Junit就可以保证代码的准确性,它就是我们平时所说的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能。平时我们想要测试代码的正确性,那么必须新建一个类,然后创建一个 main() 方法,然后编写测试代码。但是如果需要被测试的代码太多就会很繁琐,而Junit能很好的解决这个问题,对每一部分进行分别测试,让我们在编写代码的过程中就可以直接测试,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,同时也便于解决问题。

4.课程收获

之前上面谈了很多,在这里简要总结一下

①明白OOP与OPP的区别

②在学习和编写JAVA的时候要用OOP的思维去解决问题

③利用框架和“类”的思想去思考问题解决问题

④注意严谨性,避免粗心而导致逻辑上的错误

⑤利用Junit单元测试(白盒测试)去提高我们编写程序的效率并避免错误

⑥理解了面向对象程序设计封装性、继承性与多态性三大技术特性

5.对课程的建议

经过这两个阶段的学习,我们对OOP也有所理解和感悟。但是对于封装性、继承性与多态性的理解还是很抽象,依旧是迷迷糊糊的。希望老师在上课的时候可以继续讲解。老师举例讲课的方法很形象,但是我们需要时间慢慢去体会,对于我这种理解能力不强的,可能会跟不上老师的节奏,而且有的时候因为网络延迟问题听不清老师讲课,所以下课要不断看回放,希望老师能在下课后快一点将回放放出来便于我们再次去学习和理解。同时我注意到实验是没有回放的,希望老师加上。

对于作业题量我没什么建议,毕竟学习就是需要不断去练习,不断的练习。但是第一次运用新知识总是比较困难的,所以希望新内容考察的题目可以降低一点难度,平时总是有些难以下手不知所措的感觉。PTA题目的指导书很棒,每当我思路空白的时候它总是能给我很多帮助,希望可以详细一点同时对一些 定义内容进行解释,毕竟我们现在没有课本,这会对我们帮助很大的。

最新文章

  1. rsync 笔记之 list
  2. 转:Webpack 指南(整理 草稿)
  3. linux命令详解:md5sum命令
  4. C# 连接 Oracle 的几种方式
  5. WinForm打包后皮肤无效(解决方案)
  6. mac linux netstat -n
  7. Java使用jackson问题解决
  8. ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
  9. SZU:A12 Jumping up and down
  10. Flume-ng源码解析之Source组件
  11. ST 单元测试之maven引入junit包
  12. java输出各种学生成绩
  13. django的models模块查询方法
  14. FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()
  15. df命令,du命令,磁盘分区
  16. OnSen UI结合AngularJs打造”美团"APP"附近”页面 --Hybrid App
  17. 位(bit)、字节(Byte)、MB(兆位)之间的换算关系
  18. 给RadioButtonList绑定Selected的值
  19. AJAX删除事件与加载数据
  20. java桌面应用开发可视化工具windowbuilder详细使用方法

热门文章

  1. 《操作系统》课程笔记(Ch01-导论)
  2. MTK Android 权限大全
  3. javascript入门 之 zTree (一)
  4. C++值多态:传统多态与类型擦除之间
  5. MAC中PHP7.3安装mysql扩展
  6. Array(数组)对象-->数组值的修改
  7. EOS基础全家桶(七)合约表操作
  8. 编写高质量Python程序(三)基础语法
  9. 如果我选择IT行业,会不会在几年,或者几年后被社会给淘汰??
  10. Linux 命令系列之 seq