• java学习的第二阶段总结


    前言:本次总结为java的第二阶段学习总结,共有三次作业,主要是强化了之前正则表达式的知识,进一步学习了封装性、继承性与多态性三大技术特性,并且对问题化简、设计UML类图等综合运用有了更高的要求。总的来说就是,加深了对面向对象这么一门编程语言的理解,对于问题的分解转化的技能进一步强化。

     一、作业过程总结:

    1.总结第二阶段三次作业(第4到第6次)之间的知识迭代关系

    第四次作业的第一题是水文数据校验及处理,虽然难度不大,但是对于正则表达式的使用、问题的化简要求高些,对比第一阶段都是要求有更高。这其中涉及到较多的算法思路,继承、复用的体现并不是很明显。思路其实不难,总的来讲就是读取、判断、输出三个步骤,若从做题来讲,其实读取和判断、输出可以放在一起进行,但是考虑到程序的复用性,这些基本方法分开来写是必须的。第二题是蒙特卡罗方法求圆周率,该题涉及到矩形、圆,以及各个点的坐标,因此,就拿矩形和圆来说,就可以设计一个抽象类,并建立继承关系,同继承于一个形状类(抽象)Shape,但是对于此题来讲体现的并不深,相差并不大。第三题指明了是继承(题目为:图形继承),涉及的形状有圆、矩形、球及立方体,很明显,使用继承是再合适不过了,因为其中的周长、面积、名称等等共同属性是非常适合的继承的,可以化简程序的设计。

        第五次作业第一题是图形继承与多态,一来是强化之前的继承,而来是添加新内容---抽象,在图形设计的基础上加上Shape这样的抽象类,让程序进一步封装。实体类的设计比较简单,主要是方法重载和方法重写,思路清晰,结构简单。第二题是一元多项式求导,该题主要也是设计抽象类Term,但难度更大些,需要更深层次理解,同时也要考虑复用性。

        第六次作业第一题是图形卡片排序游戏,第六次作业更注重于继承与多态的实际运用,并且新增了接口方法,让排序更加灵活。同样,也是设计一个Shape的一个抽象类,让卡牌(分别代表了圆形、矩形、三角形、梯形)对号入座,建立对应的对象,并放入list中,然后根据需求来排序,思路清晰,方法简单。第二题是图形卡片分组游戏,可以说是和第一题一样,不同的是多加了一个分组,需要将不同的卡片进行分组,计算、输出。难度也没增加多少,而是对接口的要求需要更加熟练。

        三次作业就是这样一步一步将继承、多态、抽象、接口的知识逐步体现。

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

        回顾本三次作业,封装性似乎并没有体现,但仔细思考便会发现,老师所讲的privat不正是封装的最好提现吗,没错,在我们设计一个类的时候,我们往往都会在class的属性面前加上private,而当需要访问该变量的时候,正是通过setter和getter方法来实现的,例如以下代码:

     1 class Shape{
     2     public double getArea() {//求图形面积
     3         return 0.0;
     4     }
     5     public void setter(double r) {
     6     }
     7     public double getter() {
     8         return 0.0;
     9     }
    10 }
    View Code

    对于继承与多态,其实本三次作业是循序渐进,加强实际运用。第四次作业对继承要求并不是很高,只是简单理解并运用即可,其中,涉及最多的是第三题,直接是需要使用继承与多态来解决问题,后面两次是综合的具体运用,在继承的同时,加入接口知识。第五次作业第一题是强化继承与多态,第二题是进一步具体运用。第六次前两道题是具体的综合运用,并加入了接口的知识。

     1 class Card implements Comparable<Card>{
     2     private Shape shape;
     3     public Card(){
     4     }
     5     public Card(Shape shape) {
     6         this.shape=shape;
     7     }
     8     public Shape getShape() {
     9         return shape;
    10     }
    11     public void setShape(Shape shape) {
    12         this.shape = shape;
    13     }
    14     @Override
    15     public int compareTo (Card other) {
    16         if(this.shape.getArea()<other.shape.getArea()) {
    17             return 1;
    18         }
    19         else
    20             if(this.shape.getArea()>other.shape.getArea())
    21                 return -1;
    22             else return 0;
    23     }
    24 }
    View Code

    3.作业过程中遇到的问题及解决方法

    (1)水文数据校验及处理当中遇到的格式判断比较棘手。

    解决:这里不仅要求思路清晰,还要求对正则表达式有足够熟练。在经过一两个小时的正则表达式研究之后,最终找到了格式判断的表达式,分别是:

    检测时间:[1-9]+[0-9]{0,3}/[1-9]+[1-9]{0,1}/[1-9]+[0-9]{0,1} [0-9]+[0-9]{0,1}:00

    检测水位:[1-9][0-9]{0,3}\.[0-9]{1,3}||[1-9][0-9]{0,3}

    检测开度:[1-9]{1,2}\.[0-9]{2}

    检测流量:[1-9][0-9]{0,3}\.[0-9]{1,3}||[1-9][0-9]{0,3}

    思路简单,即先切分判断是否是五个部分,再每个部分依次判断即可。

    (2)一元多项式的求导中,再判断输入时遇到问题

        解决:最纠结的地方:是直接判断整个表达式好还是先把表达式先切分,再判断好。仔细思考下还是先切分比较好,一来这样可以通过通用的正则表达式来逐个判断,二来也方便求导,但是需要考虑怎么切分问题。经过几个小时的探索之后,终于找到了切分方法,先将“-”替换成“+-”,再将”^+”替换成”^”,这样即可保证把每一项都成功切。接下来就是依次判断,逐个计算了,思路清晰,算法简单。

    4.每次作业花费的时间比例大概是2:2:1,前两次作业难度较高,有些地方测试时间很久,第六次的较为简单,比较顺手。

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

        在第四次作业当中并不理解继承与多态,只是知道他们之间能这么用,导致对复用性的思考并不多,在做题的时候没有严谨把握,这是今后需要谨记的。

    二、OO设计心得:

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

        封装性,说白了讲就是包装,把控权限,该访问的访问,不该访问的限制访问。通常,在考虑对类内部定义的属性(对象的成员变量)的直接操作导致数据的错误、混乱或安全性时,就能很好的体现封装。继承,是指子类继承父类的属性和方法,但是要注意private定义的属性和方法。多态,是指继承之后出现的各个子类,这种子类之间是有相同部分也有不同部分。

    ②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)

        所谓单一职责,就是指对于一个类而言,应该只能有一个引起他变化的原因。所谓开闭原则,就是指在所设计的实体类当中,应当是可扩展的,但不可修改的。

    ③OO编程思维的理解

        对于OO编程思维的思考并不是很多,我得理解就是,操作对象(类),在对象上下功夫,因此可以涉及到封装、继承、多态、接口等的理解。

    ④类设计心得

        在类的涉及当中,应当多考虑其基本原则,让程序的复用性提高,扩展性增强,这样设计的类才能更加健壮。

     

    三、测试的理解与实践:

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

        测试是对代码质量评判的一个最重要指标,测试能够通过的代码,才可能是好的代码。但是测试也分好坏,考虑的情况简单,设计的测试即使能通过,但也不是最好的,毕竟,还可能在运行时间、某些特殊情况被忽略没有被测试到,也都是致命的关键。

    ②查阅资料,假设使用Junit进行程序的测试是否可行

        可行,事先考虑好情况,再针对性地实现。

    四、课程收获:

    第一阶段在学习了java这么面向对象的一门语言之后,便初步学会了面向对象思维的一些编程方法及技巧。

    第二阶段学习过程中,不仅加强了之前对正则表达式的正确运用,也进一步学习了java的三大特性:封装性、继承性与多态性。并且将其综合运用,加深了对Java这么一门面向对象语言的理解。

    五、对课程的建议:

        希望老师在下一阶段的作业难度保持这样,太难了,花费的时间好多,太简单了,学的知识不够稳当;对于课程,老师按照目前这种讲法真的很赞,将一个简单问题不断扩展,循序渐进,由浅及深。

  • 相关阅读:
    Python3抓取 深圳房地产均价数据,通过真实数据为购置不动产做决策分析(二)
    Python3抓取 深圳房地产均价数据,通过真实数据为购置不动产做决策分析(一)
    学习Make your own neural network 记录(一)
    Python3 爬取Boss直聘网 工作基本信息(数据清洗)
    Python3 爬虫爬取中国图书网(淘书团) 进阶版
    Python3 爬虫爬取中国图书网(淘书团) 记录
    修改Linux最大Socket连接限制
    linux递归删除某个文件夹
    虚拟机安装Linux小技巧
    ext/hash_map 报告过期错误和警告 deprecated or antiquated header
  • 原文地址:https://www.cnblogs.com/2020zxc/p/12819303.html
Copyright © 2020-2023  润新知