java第二周期作作业

前言

  本次博客针对java课程第二轮pta作业进行总结。(黄色部分为本次总结的重点感悟绿色部分为对于面向对象的举例

作业过程总结

一、知识迭代关系

  第四次pta作业(水文数据校验及处理蒙特卡罗方法求圆周率图形继承)第一题需要对正则表达式熟练运用,还有对字符串处理的相关函数的了解;第三题加深了对继承的使用。

  第五次pta作业(图形继承与多态一元多项式求导)第一题对继承与多态进行运用,相当于对第四次pta作业第三天进行衔接;第二题还是对正则表达式的运用,相比于水文数据校验及处理不繁杂却更加灵活。

  第六次pta作业(图形卡片排序游戏图形卡片分组游戏、求素数)第一、二题熟悉了继承与接口,第三题考查算法设计。

二、如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性;

  封装性:通过圆类的继承与多态感受到了封装后,对类的复用提供了帮助;通过图形卡片排序分组体会到封装的作用,在用户改变需求时能较快的实现。

  继承性:通过图形继承能感受图形共有一个抽象父类可以帮助图形类有一个方法的规范。图形卡片排序分组也是一样的道理。

  多态性:多态在继承关系中可以体现,每个图形都有不同的方法,但是方法名都是调用的抽象图形对象的方法。图形卡片排序分组也是一样的道理。

扫描二维码关注公众号,回复: 11153431 查看本文章

三、作业过程中遇到的问题及解决方法

  第四次作业由于是第一次较全面的使用正则表达式,还不太熟练,所以对字符串的处理上花费了大量的时间,还有对一些测试点的处理也用了大量时间,通过百度有关正则表达式的内容和询问同学最终解决。

  第五次作业的问题在分割多项式和多项式处理上没有思路,最后通过老师的指导和听取同学的思路得到了解决。

  第六次作业比较大的问题没有,只是第一次感受到实现了类的封装的好处,对于程序复用的帮助。

 

四、每次作业花费的时间比例

  第四次作业:由于数据处理比较复杂,花费了大约20小时;

  第五次作业:重在思路和对正则表达式的运用上,花费了10小时;

  第六次作业:由于没有正则表达式的运用,只用了4个小时。

 

五、对编程过程的严谨性的认识及教训

  认识:这三次作业确实让我感受到了测试点的威力,这些都是出于题目的严谨性考虑的,不过还是有些题就算测试点全对,代码还是没有完全符合题目要求,比如水文校验,可能存在日期格式不规范等情况。

  教训:在面向对象编程的过程中,需要实现好类的封装,这样可以加强类的复用性。这次还有改需求的题目(卡片归类),在类封装好后所改的代码就不要很多。还有就是每次的审题依旧是很重要的。最后一点,在思考题目思路的时候,对于题目的步骤思考更偏向面向对象,而对类的设计就是面向对象的设计了。

OO设计心得

一、对面向对象三大技术特性之间关系的理解

  个人感觉这三没啥关系。。。

  封装与继承:父类封装后,继承了父类的子类也会有封装的特性。

  继承与多态:子类继承父类后,子类能对父类的方法进行重载。

  

二、面向对象设计的基本原则理解

  基于上一次的理解:

  (单一功能原则:每个抽象对象对应一个类,也就是一个类专注一个具体事物,假如一个对象同时包含日期、月份、年,那么这个对象想要更改方法就会需要改动许多地方。

  里氏替换原则:基类对象可以替换成子类对象,也就是狼属于动物类,但是狼不能调用被捕食的方法。

  开闭原则:在两个模块有相互依赖关系时,低一级模块使用高一级模块时需要使用接口,也就是day类中使用Month month;来调用Month类。

  依赖反转原则:高层模块不应该依赖底层模块,两个都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象。对这个理解不足。

  迪米特法则:类与类之间的关系越少越好,方便类的复用,例如圆柱类中的求表面积方法对圆类中求面积方法有依赖,那么圆柱类复用性会降低。

  组合/聚合复用原则:要尽量使用类的合成复用,尽量不要使用继承,能有效降低耦合度。

  针对接口编程,而不是针对实现编程 :父类中的各个方法的具体实现不在父类型中,而是在各个子类中,同样时为了提高复用性,便于维护。)

  新增理解:

  单一职责原则:它规定一个类应该只有一个发生变化的原因,这是为了降低类的耦合度,也就是一个类调用的方法执行一个功能。

  开-闭”原则:就是面向抽象打开,在对类的设计时,注重使用抽象类,可以减少程序在需求改变时模块改动太大的问题。

  依赖反转原则:程序要依赖于抽象接口,不要依赖于具体实现。也就是上课讲的对雨刷系统的设计,每个基于一个大的对象而发生组合的小物件的类都需要建立抽象类接口,从而让这些小的类属性改变时只需要增加一个抽象类的子类就行。

三、OO编程思维的理解

  Java的编程主要时对于类的设计构思,这边淘到一个很好的例子--五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。面向过程1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

四、类设计心得

  三点:多用抽象(雨刷类设计中有提及),保持功能单一,类的功能不要过于复杂(在写水文校验时,由于类有一些复杂,没有认真去思考类之间的联系,导致main函数包括了输入、数据处理和输出,显得main函数过于复杂而可读性差)

 

测试的理解与实践

一、测试对于编码质量的重要性

  测试对不仅对程序的正确性提出要求,还对输入数据的审判提出要求,比如说对输入超出范围的数据会进行提示,还有对一些边界或者极限值进行判别,测试出代码的实用性。可以说,测试是检测代码有效性的一种简易而高效的方法。
二、查阅资料,假设使用Junit进行程序的测试是否可行

   在pta上这种方法应该是行不通的,除了环境配置外,还要考虑pta是否能判断程序是否有错误。


课程收获

 总结这四周来在OO方面的教训及收获:

  在类的设计方面有了更加清晰的认识,对抽象类的运用更加熟练,对类之间的运用也更加熟练了。

  在编程时还是要细心感受类与类之间的联系,同时还要考虑面向对象的一些细则。

对课程的建议

一、第三阶段作业难度、题量的建议

   直白点就是不要来正则了。

  五道小题也没一道正则烧脑,题量不好考量。

 

二、课程内容讲解方面的建议

   结合代码讲解挺好,目前没有建议。

猜你喜欢

转载自www.cnblogs.com/nchu18207324/p/12806105.html
今日推荐