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题目的指导书很棒,每当我思路空白的时候它总是能给我很多帮助,希望可以详细一点同时对一些 定义内容进行解释,毕竟我们现在没有课本,这会对我们帮助很大的。

JAVA第二次blog总结的更多相关文章

  1. Java第二周作业

    Java第二周作业 本周作业: 参考http://www.cnblogs.com/rocedu/p/7911138.html 学习第二三章视频 参考http://www.cnblogs.com/roc ...

  2. JAVA第二次作业展示与学习心得

    JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...

  3. 2018-03-11 20165235 祁瑛 Java第二周考试总结

    20165235 祁瑛 Java第二周考试总结 课后习题p16 代码编写 class Person { void speakHello (){ System.out.print("nin h ...

  4. java第二周的作业

    package java第二周学习; import javax.swing.JOptionPane; public class 数学题 { private int a; private int b; ...

  5. Java 第二次测试总结

    Java 第二次测试总结 1. 相关知识点总结 Java测试题循环与递归知识点 补充知识点: for循环语句:for(表达式1:表达式2:表达式3)表达式一负责完成变量的初始化!表达式2是值为bool ...

  6. “全栈2019”Java第二章:安装JDK11(Windows)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 文章原文链接 "全栈2019"Java第二章:安装JDK11(Windows) 下一 ...

  7. 20155210潘滢昊 Java第二次试验

    20155210潘滢昊 Java第二次试验 实验内容 学会JunitTest的使用 实验代码 MyUtilTest代码: import org.junit.*; import junit.framew ...

  8. “全栈2019”Java第二十九章:数组详解(中篇)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第二十八章:数组详解(上篇)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. node.js代码

    // 1. 引入 express var express = require('express'); var formidable = require('formidable'); var mysql ...

  2. MyBatis(十):Mybatis缓存的重要内容

    本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接 https://space.bilibili.com/95256449?spm_id_from=33 ...

  3. MyBatis(八):高级结果映射

    本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接 https://space.bilibili.com/95256449?spm_id_from=33 ...

  4. webpack4.0(01.基础配置和初识)

    1.什么是webpack? 2.webpack可以做什莫? 代码转换.文件优化.代码分割.模块合并.自动刷新.代码校验.自动发布 3.我们要学习webpack的什么? 4.使用webpack 1.首先 ...

  5. python 函数--迭代器

    一.迭代协议: 可以被迭代要满足要求的就叫做可迭代协议.内部实现__iter__方法. iterable:可迭代的--对应的标志. 什么叫做迭代?:可以一个一个取值,就像for循环一样取值. 字符串, ...

  6. Jdk 和 jre 的 关系和区别

    Jdk 和 jre 的 关系和区别 区别: JDK:是Java Development Kit 的简称–>翻译过来就是:Java 开发工具包.是程序员使用java语言编写java程序所需的开发工 ...

  7. java京东自动登录

    大部分代码都是参考的这边,我只是在他的逻辑上实现了自动通过验证码,放上主逻辑的代码吧,图片识别我用的若快,可以去接其他平台 https://blog.csdn.net/u013232789/artic ...

  8. std::lock_guard和std::unique_lock的区别

    std::lock_guard 1 初始化的时候锁定std::mutex std::mutex m_mtx; std::lock_guard<std::mutex> m_lock(m_mt ...

  9. 数据结构和算法(Golang实现)(16)常见数据结构-字典

    字典 我们翻阅书籍时,很多时候都要查找目录,然后定位到我们要的页数,比如我们查找某个英文单词时,会从英语字典里查看单词表目录,然后定位到词的那一页. 计算机中,也有这种需求. 一.字典 字典是存储键值 ...

  10. 【Java】手动编写第一个Java程序,HelloWorld!

    第一个Java程序HelloWorld! 环境前提:确保你已经配置好了JDK8的环境变量,和本体安装 打开文本编辑器,这里我使用的是EditPlus 编写代码: public class Hello{ ...