OO第二单元作业总结

0.前言

转眼间面向对象课程已经到了第二阶段了,在第二阶段里共发布了三次PTA编程作业,本次博客主要针对于这三次作业的总结。作业过程总结,OO设计心得,测试的理解与实践,课程收获,对课程的建议。
1.作业过程总结

①总结三次作业之间的知识迭代关系;

第一次作业:水文数据校验及处理 蒙特卡罗方法求圆周率 图形继承。

这次作业主要考察的是:正则表达式的使用、StringBuilder的使用、类之间关系的应用(关联、聚合、依赖、继承)。

第二次作业:图形继承与多态  一元多项式求导。

考察的是:类之间关系的应用(关联、聚合、依赖、继承)、正则表达式的应用。

第三次作业:图形卡片排序游戏 图形卡片分组游戏 求素数。

考察的是:类的封装性、继承性、多态性以及抽象类、接口的应用 和算法的高效性。

这三次作业由易到难,知识是点由浅到深的。第二次作业的知识点完全是第一次作业的加强版,第一题在第二次作业第三题的基础上加了个多态的应用,而第二题则这第一次作业第一题的基础加了个ArrayList类的使用,所用的思想有所不同,代码的长度也增加了。第三次作业的知识则是在第二次作业第一题的基础上加了个接口的应用和类之间的关系越来越复杂了,而第二题是帮助我们加强ArrayList类的使用,第三题就是考察算法的速度。

总的来说这三次作业是帮助我们思考“单一职责”原则以及“开-闭”原则在面向对象设计中的具体应用和了解正则表达式的重要性。


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

 

封装性:三次作业中的每个类都有其属性,而属性的类型有不同,private是私有的,public是公有的,protect是同一个包内可公有的。封装就是把类的信息保护起来,但是我们还是可以通过getter和setter方法使用它们。

继承性:在图形的继承题目中可以了解,shape是父类,三种图形是子类,子类继承了父类的方法和属性,相同的方法调用时要复写用@Override。

多态性:在图形继承及多态题目中可以知道,shape是抽象父类,而子类继承父类的方法都要完成,调用通过Shape 图形名称 = new 图形类();方法调用。之后就和继承的使用差不多了。
③作业过程中遇到的问题及解决方法

这三次作业的主要问题在于正则表达式的题目和一些特殊情况没有考虑到。

问题:没有考虑函数表达式第一项的书写,不能有正号。

解决方法:在输出第一项的时候用replace(“+”,””)方法把第一项变成空格。

问题:没有考虑输入0的情况

 

解决方法:加入程序如果cardlist.isEmpty()等于空的情况。使其输入Wrong Format.

问题:第一次作业的水文数据校验及处理没有写出来,主要是类的逻辑关系没有搞清楚和不太会用正则表达式,导致题目没有写出来。

其他问题:如格式问题,输入输出错误等,都是通过一步步调试出来解决的。

 

④每次作业花费的时间比例

作业\时间

时间

占比

第一次

40h+

2

第二次

40h+

2

第三次

20h+

1

 

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

1、 多看需求分析了解题目的要求。

2、注意特殊情况的输入和输入输出的格式。
3、做题之前要先构造一个基本框架,不然会浪费大量时间思考。

教训:做题前要多思考,有思路写代码就简单,多注意细节,要不然会在输入输出和格式方面浪费大量时间找错误。

3.OO设计心得

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

三大技术分别是:封装性、继承性、多态性。封装简单来说就是把类中的属性和方法等用private,public,protect等保护起来,提高了安全性。而继承这是多个子类继承一个父类的属性和方法,通过用@Override复写使用其类中方法。多态则在继承的基础上加了个扩展性。
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)

 单一职责原则是最简单的面对对象设计原则,意思来说就是一个接口一个类一个方法只负责一个事情。优点是避免相同的职责分散到不同的类中和避免一个类承担的职责过多,和减少类之间的耦合和提高类的复用性。

“开-闭”原则:主要是通过扩展来实现变化,而不修改原有的东西。对扩展开放,对修改关闭。优点是原有的代码还能运行,提高了程序的复用性和可维护性。

③OO编程思维的理解

现阶段的理解:了解了单一职责原则及“开-闭”原则,减少了代码的复杂程度,提高了代码的可读性,通过类的设计有规划的完成一件事情。
④类设计心得

一个类只负责一件事,类与类之间可以继承和进行多态,实现单一职责原则及“开-闭”原则,降低耦合性,提高复用性。
3.测试的理解与实践
①测试对于编码质量的重要性

测试可以提高优化我们的代码和减少代码的错误性,了解我们还有什么方面考虑不全,而导致PTA作业测试点没有通过。
②查阅资料,假设使用Junit进行程序的测试是否可行

可行,Junit方法是对程序进行单元测试,在调试较大的程序中使用,测试是要将Junit单元测试包引入,加注释@Test,进行测试这个是可行的。
4.课程收获

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

初步学会了正则表达式,了解了ArrayList类的使用、StringBuilder的用法、Comparable接口、Collections排序和多种方式输出数组里的东西,加深了对继承和多态性的理解。
5.对课程的建议
①第三阶段作业难度、题量的建议

我认为题目难度不要太大,要不然我一个星期都在学Java,而其他的课程学习时间就大量减少了。

希望题量不要太多,适中就行不然做不完。
②课程内容讲解方面的建议
做完作业后讲一下PTA作业的例题的逻辑思路和方法。课上多讲一些例题,和讲解一些题目的编程逻辑思路。

posted @ 2020-05-01 12:13  19201126-殷洪涛  阅读(153)  评论(0)    收藏  举报