PTA作业第二次总结

前言
   此次三次作业相较于前几周的的在校验上的能力有较大的检验,需熟悉使用正则表达式。理解类之间的继承、多态的联系。
1. 作业过程总结
①知识迭代关系
  开始是对之前作业练习的延续利用继承解决一些图形上的问题,如:图形继承和蒙特卡罗方法求圆周率。还有对正则表达式的运用,如:水文数据校验及处理,这个问题我在处理时处理遇到了一定上的阻碍,对正则表达式没有较好的认知。第二次作业也有继承类问题的出现,但更侧重多态问题的研究,如:图形继承与多态,而第二题是对正则表达式的考查和多态的考查。第三次作业则完全向多态过度,通过研究图形卡片排序游戏和图形卡片分组游戏这两个相似的题目来学习和认识多态的使用和作用;而第三题则是简单对素数的研究,主要是考察对算法的设计能力,提高代码的运行效率,缩短时间复杂度。
②封装性、继承性与多态性三大技术特性
  所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
  所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
  所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们可以通过相同的方式予以调用。
③作业过程中遇到的问题及解决方法
  这三次作业的练习更注重的是思维上的训练,设计类与类之间的关系,熟悉类图,考虑面向对象的三大特性,封装、继承、多态。相较于前几周的作业有了较大程度上的思考和设计。现在看到题不再是只想着如何让其实现就好,会去考虑各种面向对象的设计原则。让其不仅仅是做题,而看作是种训练。这个阶段的作业主要是对数据的精确校验。在这上面我也遇到了些问题,如:水文校验及处理这题我设计各种正则表达式校验花费了较多时间,各个校验之间还有些许联系,如果考虑不全,很难一次性全部通过。后面的两次作业主要是练习继承、多态的问题。同时,有题素数对时间复杂度的考查,锻炼设计的算法的效率。
  正则表达式是用于描述一组字符串特征的模式,用来匹配特定的字符串。对各种校验有着精确、轻便的效用。我们此次水文校验的作业中所用的到年月日校验,我在设计时开始并未考虑闰年的判断,对特殊日期无法判断。后加入闰年判断的正则表达式加入到之前总的表达式中,此时却连正常日期都无法校验。之后我将其一部分一部分分隔开校验正则。最终发现这种方式可行。虽说这次并未完全通过测试点,但所有正则的测试点均通过了,还是带给了我一定收获的喜悦。在写这题期间我熟练掌握了正则表达式的设计和使用。对自己数据校验的能力有了较大的提升。
④每次作业花费的时间比例。
  第二次作业使用的是继承和多态的原则,还有对一元多项式的求导问题。但更偏向于继承一点。继承和多态的作业相较于水文校验较简单些,因此我没有遇到很大的阻碍,所花的时间也较少。三次作业花费的时间比例为 3day:2hour:2hour。
⑤对编程过程的严谨性的认识及教训
  水文校验是我在这次练习中深刻认识到的严谨性。在校验过程中一些很细小的点都不能草草了事。要考虑细致些,先在纸上画画思路,急于下手会急中出错。这算是我踩过的坑吧。还有在设计时,尽量去考虑三大特性五大原则,这样能够让所写的代码可读性、可拓展性更强。虽说前期可能花费的时间较多,但这是值得的,前期思维的训练能够较好的为之后开发训练思维量。
2. OO设计心得
  对 Java 语言来说,万物皆对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计。这三周接触到的开闭原则,让我对Java的面向对象设计有了更深的认识。
  开放封闭原则是所有面向对象原则的核心,要求软件实体应对扩展开放,对修改封闭。软件设计本身追求的目标就是封装变化,降低耦合,而开放封闭原则正是对这一目标的直接体现。
  开放封闭原则的实现:实现思想就是对抽象编程,而不是对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以对修改就是封闭的;通过面向对象的继承和多态机制,可以实现对抽象体的继承,通过重写其方法来改变固定的行为,实现新的扩展方法,所以对于扩展就是开放的。
  开放封闭主要是两方面,对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况;对修改封闭,意味着一旦设计完成,就可以独立其工作,而不要对类进行任何修改。
   这几周作业都基本给了类图,在很大程度上解决了我类与类之间关系设计,给我的思考提供了一个很好的思路模板,让我愈发认识到自己的不足。参考其类图设计,我也逐渐完善了自己的思路设计,受到了很大的启发。
3.测试的理解与实践
①一个代码的质量是否过硬最重要的就是他的功能是否完善,这就必须检测他的结果的准确性,所有的代码都必须经过样例测试,且结果必须完全正确才可以投入使用,否则会造成严重后果
②在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保证这些方法产生的结果是我们想要的呢?当然了,最容易想到的一个方式,就是我们通过System.out来输出我们的结果,看看是不是满足我们的需求,但是项目中这些成千上万个方法,我们总不能在每一个方法中都去输出一遍嘛。这也太枯燥了。这时候用我们的单元测试框架junit就可以很好地解决这个问题。Junit内部提供了一个断言机制,他能够将我们预期的结果和实际的结果进行比对,判断出是否满足我们的期望。
4.课程收获
①这三周我觉得最大的收获是学会了类与类之间的关系设计,能够熟悉类图。一步一步逐渐完善自己设计,这是个艰辛但成果很愉悦的过程。
②还有就是编程思维得到了训练和提升,掌握了一些基础题目的编程思想。了解了开闭原则,及继承和多态的使用,对面向对象又有了一层新的认识。
③在写PTA的过程中我意识到自己代码的可读性十分差,条理性还不够清晰,我应该注重代码书写习惯。
5.对课程的建议
   老师上课很生动形象,讲课风格较为亲和。作业难度方面没什么建议,题目数量不在多而在精。但希望老师上课提出的写代码作业应该放在课后完成而不是上课解决,因为这样比较浪费时间,代码的思维性得不到很好的保障。

猜你喜欢

转载自www.cnblogs.com/TheAlan/p/12807876.html