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. (js描述的)数据结构[树结构1.1](11)

    1.树结构: 我们不能说树结构比其他结构都要好,因为每种数据结构都有自己特定的应用场景. 但是树确实也综合了上面的数据结构的优点(当然有点不足于盖过其他的数据结构,比如效率一般情况下没有哈希表高) 并 ...

  2. javascript入门 之 zTree(十一 托拽事件(一))

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - drag & drop</TITLE ...

  3. String 对象-->toLowerCase() 方法

    1.定义和用法 将字符串中所有的大写字符转换成小写字符,小写字符不变 返回转换后的结果字符串 语法: string.toLowerCase() 注意:不会改变字符串本身,仅以返回值的形式返回结果 举例 ...

  4. "首字母变大写"组件:<capitalize> —— 快应用组件库H-UI

     <import name="capitalize" src="../Common/ui/h-ui/text/c_text_capitalize"> ...

  5. Python设计模式(4)-装饰模式

    # coding=utf-8 # * 一般情况下,当一个基类写好之后,我们也许不愿意去改动,也不能改动,原因是# * 这样的在项目中用得比较久的基类,一旦改动,也许会影响其他功能模块,但是,# * 又 ...

  6. 微信小程序与H5数据传递

    这的场景是 小程序webview 加载 H5应用 需求点: 1. 小程序的登录code 需要与H5应用的sessionId建立绑定关系 2.H5内发起微信小程序支付,支付参数传递到小程序,支付结果传递 ...

  7. Eclipse版本控制

    各版本的区别: 1.Eclipse IDE for Java Developers 是Eclipse的platform加上JDT插件,用来java开发的 2.Eclipse IDE for Java  ...

  8. cxGrid增加一栏显示checkBox的设置方法

    鉴于本人首次设定cxGrid的CheckBox的时候费了很大劲,发现很多人都会碰到这个问题,现在总结一下,以供各位互相学习借鉴. 步骤如下(不分先后): 1. cxGrid添加完自己所需的所有字段后, ...

  9. 原创hadoop2.6.4 namenode HA+Federation集群高可用部署

    今天下午刚刚搭建了一个高可用hadoop集群,整理如下,希望大家能够喜欢.   namenode HA:得有两个节点,构成一个namenode HA集群 namenode Federation:可以有 ...

  10. CKEditor与定制

    一 开始使用 官网 基本示例: 搭建服务器(这里使用apache) 下载standard的ckeditor解压放在apache的htdocs的目录下 在htdoc下面新建index.html,写入代码 ...