zoukankan      html  css  js  c++  java
  • OO第二单元(5-8周)作业总结

    0.前言

      第二阶段的作业的难度相对前一阶段来说加大了不少,对编程能力和面向对象编程思想的要求也有所提高。在这样的情况下,这一阶段的作业,由于准备的不充分和一些相关知识的不熟悉,我完成得不算太好,三次作业分别得分50、82和130(注:第三次作业附加题是否得分不知,以PTA默认得分为准)。

    1.作业过程总结

      三次作业的难度从个人感受看依次有所降低,但从整个知识框架懒,三次作业还是循序渐进,慢慢深入。第一次作业主要考察正则表达式和类的继承,第二次作业对正则表达式进行再次巩固,同时从继承进一步到多态,第三次作业则以前两次作业为基础对接口和“开-闭”原则的应用有一定的要求。

      通过这三次作业的练习,在解题的过程中,对面向对象的封装性、继承性和多态性逐步有了一些个人见解。首先是第一次作业的第三题,通过题目提示的引导,可以对继承性有一个初步的了解,然后按照它的要求一步步实现直到最终满足所有要求,就可以对继承性从理论水平转到到实践水平,加深对继承性的理解。接着是第二次作业的第一题,这道题开始引入抽象类的概念,通过抽象父类及其子类,多态性渐渐浮现,多态将父类引用指向子类对象,以此实现灵活性、可扩充性和可替换性。就题目本身而言,Shape是抽象父类,该类中只对方法进行声明,具体方法实现在子类Circle、Rectangle和Triangle中进行重写,由于子类的属性有所差异,方法会略有不同,利用多态可以实现方法的灵活性、可扩充性和可替换性。最后是第三次作业,在这次作业中,以前两次作业的继承与多态为基础,引入接口实现分类和排序。因为这次作业的第二题是第一题的一个扩充,所以这次作业是对继承与多态的一个加深理解,对多态的可扩充性会更加熟练,同时通过扩充功能,也会对“开-闭”原则的应用有一定的了解。至于封装性,我个人认为不在某一次作业中有特别的展现,其实是在所有的作业中都有所展现,慢慢地形成了一种规范了。

      这三次作业过程中遇到的困难主要是来自前两次作业的水文校验和多项式求导,也就是正则表达式和类的设计以及方法实现,因而经常会有一道题目不知怎么切入的困惑。其实直到写这篇总结的时候,我都不一定是彻彻底底完完全全地解决了这一问题,一些思路和方法还是从老师和同学的一些解题分享中得到的。我认为的解决方法还是从细小之处做起,将一个问题逐渐拆分,对正则表达式和字符串处理有更熟练的运用。另一方面,类的设计问题则需要时间和练习不断思考、改进和提升。

      三次作业花费的时间比例大概是3:3:1。前两次作业比较复杂,难度较大,最后一次作业思路清晰,花费的时间最少。

      编程过程的严谨性在这三次作业中应该是得到了最好的展现了,除了需要考虑以往输入的边界问题和一些比较直观的属性数值,还需要考虑非常多的其他不合法的输入,比如各式各样的数据类型和格式,而且有一些不合法的输入是需要不断地分析和试错,甚至直接给提示才能知道。稍有不周,一个一个的测试点的“答案错误”就在眼前,对严谨性的要求相当高。

    2.OO设计心得

      封装性是一个基础,它封装了属性和方法,继承性和多态性都在此之上实现,都是对属性和方法的一系列操作。继承又是多态的基础,多态的实现依靠继承,但多态实现了更好的灵活性、可扩充性和可替换性。

      单一职责原则是一个类或一个方法承担某单一的一个职责,不将多个职责同时由一个类或方法承担。“开-闭”原则是面对扩展开放,面对修改关闭,保证可扩充性和复用性。

      OO编程是把问题抽象化,创造对象解决问题,一个对象有它自己的属性和方法,更符合现实中人解决问题。

      类的设计主要根据问题划分出不同的模块,一种由流程划分,以这几次作业中的水文校验为例,设计了对检验数据合法性的类和处理输入数据的类等等。另一种由对象划分,比如作业中经常使用的形状类(圆类、矩形类、三角类、梯形类),有自己的实际属性和方法,也以这几次作业中的多项式求导为例,设计了表达式类、常数类和含x的非常数类。

    3.测试的理解与实践

      通过测试可以对编码的各个功能的完成度有一个清楚直接的认知,利用Junit 4 Assert @Tset能一个一个比对测试用例的要求值和实际值。测试反映编码功能是否完备的同时,还反映编码的效率,比如编码的占用内存和运行时间。如果能设计好测试用例,可以对编码质量有全面的评估。

      利用Junit进行程序的测试是可行的,这已经在上一阶段进行过相关的教学和练习,实现结果如图所示。

    4.课程收获

      通过这四周的学习收获了很多,理解并掌握了面向对象的继承、多态和封装以及接口,也对正则表达式的基本使用有了一些认识。但在这过程中也有一些教训可谈,就是对一些问题类的设计的思路还不够清晰,总是需要依赖给定的类图来制定自己的框架,然而一旦对指导书中的分类不太接受就很难再自己去设计不同的类满足程序的所有要求。在下一个阶段的学习中要加强类的设计的锻炼。

      

    5.对课程的建议

      第三阶段作业的难度应该尽量做到循序渐进,第二阶段的第一次作业的第一题就是水文校验,个人感知上和之前的作业的难度跨越很大,反倒是第二阶段的后两次作业会相对容易一些。题量也可以根据难度做不同的调整,前期可以难度低一点题量稍稍多一点,后期则可以难度拔高一点,专注于做两道题左右或者一道题的不同的变化和扩充。

      课程内容讲解方面希望可以提前告知同学们下一周的课或下一节的课主要内容大概是什么,方便同学们在课前做到精准预习,可能会有更好的课堂效果。另外,还希望最好能适量地设置课间休息时间,一般的情况下还能适应,但如果课堂的信息量太大再加上课前不知道上课的内容,没有休息很难撑到完整的100分钟,听课效率也会打一定的折扣。

      

  • 相关阅读:
    8626 原子量计数
    17229 Lry,你除了2还是2
    11153 kill boss
    1143 多少个Fibonacci数
    8614 素数__
    We Chall-Training: Stegano I-Writeup
    We Chall-Training: Get Sourced-Writeup
    We Chall-Prime Factory-Writeup
    CTF入门指南
    pwnable.kr-collision -Writeup
  • 原文地址:https://www.cnblogs.com/senforest663/p/12818483.html
Copyright © 2011-2022 走看看