java第二阶段作业小结

一、前言:

   本次博客主要针对pta(程序设计类实验辅助教学平台)上的三次java作业(java-homework04、java-homework05、java-homework06)进行第二阶段进行总结,并在写这三次作业的过程中的点点收获与心得进行概述。

二、作业过程总结:

1、三次作业之间的迭代关系:

  阶段的难度是循循渐进的,第二阶段的作业难度相对于第一阶段难了不少,相比第一阶段,第二阶段的所有题目都有指导书,题目量有点大。这三次作业的关系还是非常的大,第四次作业的正则表达式的字符串处理与图形的继承:

java 两阶段提交原理 java第二阶段项目_java 两阶段提交原理

然后第五次作业的继承与多态:

java 两阶段提交原理 java第二阶段项目_多态_02

 

再到第六次作业的接口的使用:

java 两阶段提交原理 java第二阶段项目_java 两阶段提交原理_03

 

这些方法的使用也是循循渐进的,这几次作业题目也有点相似性,比如图形的继承,连续两题用到了这个方法,都是求面积啥的,但是细微的差别就是增加了一点小难度。但总体难度不大,除了第四次的第一题水文数据检验,的确有点麻烦。

 

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

  通过第二阶段的这三次作业,面向对象的三大特征,封装、继承、多态性,继承是多态的前提,如果没有继承,就没有多态,继承当中的特点:(1)、子类可以拥有父类的”内容“;(2)、子类也可以拥有自己的内容。继承的格式为比如以下代码:

 

定义父类的格式:(一个普通的类的定义)
public class 父类名称{
    //...
}

定义子类的格式:
public class 子类名称 extends 父类名称{
    //...
}

 

代码当中体现多态性,就是父类引用指向子类对象。

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

  这几次作业相对来说难度有升高,但是题目量有减少,最难的应该是第四次作业第一题吧,水文数据校验处理,这题通过率挺低的,其实这题我比较烦题目量,确实有点大,我主要的问题有正则表达式不太会使用,这题因为放弃了,所以也没去解决;然后就是第五次作业的多项式求导,也有点难度,同样用到了正则表达式,这题也放弃了;第六次作业就相对简单了,不过也出现了一些小错误,比如排序,当时不知道怎么写这段代码,然后问了同学就改了:

public void cardSort() {  //排序
        this.cardList.sort(new Comparator<Card>() {
            public int compare(Card p1,Card p2) {
                if(p1.getShape().getArea()<=p2.getShape().getArea())
                    return 1;
                else
                    return -1;
            }
        });

然后有了第一小题的教训,第二小题就会写了,这里用了接口;这小题还有一个小错误就是太马虎了,输出时写错了一个字母System.out.println("The sorted list:");就是这,我把sort的s写成了大写S,导致自己检查了很久。第二小题总体没出什么错,也是马虎问题,只输入0时输出Wrong Format,以及List的L没有大写,稍微改改就好了。

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

  这几次作业用的时间前两次用的多,第三次少点,大致比例为1天半:1天半:半天吧。

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

(1)、设置参数问题:尽量不要设置相同的参数,之后运行出错的话找错会比较麻烦,就是不知道到底是哪个参数错了;

(2)、尽量一个类一种方法,不要相互穿插,也就是单一功能原则;

(3)、养成一个习惯吧,就是在写的代码后面有适当的注释,这样后期出错的话对自己也有一定的帮助;

(4)、好好利用debug,使用debug找错的话,有时候会容易很多。

(5)、写完代码仔细检查一些“边边角角”的地方,以免出一些马虎操作。

三、OO设计心得:

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

  三大技术特性也就是封装性、继承性、多态性,封装:对类里面的成员变量通过使用private修饰符进行隐藏,通过使用public 修饰符来编写它们对应的方法来进行访问和修改;在封装以及构造方法中,会经常使用this关键字,通过this.成员变量或者this.方法表示调用当前的成员变量和方法。继承:继承属于类与类之间的一种很重要的关系。继承是指从已有的类中派生出新的类(子类),新的类(子类)可以继承父类的成员变量和方法(private修饰符修饰的除外)的同时,还可以扩展自己的成员变量以及属于自己的方法;super可以用来调用被隐藏的成员变量和父类的方法,也可以用来调用父类的构造方法。多态:就是指一个父类引用(类型)在不同的情况下的多种状态。通过父类的引用去访问继承层次中子类的对象,调用子类重写父类的方法产生不同的操作(多态)。

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

开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。

3、OO编程思维的理解:

  本次作业主要的就是封装、继承与多态,然而OO编程的三个特征就是它们三个,熟悉掌握OO编程的特征对于解题有着非常大的帮助。

4、类设计心得:

  其实我自己做这几次作业都没有太多的去想过怎么设计类,因为题目里面都给出了指导书,然后指导书里都有UML类图,我就根据类图来设计的,每次写之前都会把类的框架拟好,之后的作业希望我可以该掉这个习惯吧,写之前先想想怎么设计类,再动手。

四、测试的理解与实践:

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

  测试对于编程质量无外乎是非常重要的,就我们这三次作业而言,pta没有测试点的话,那么我们就不知道我们的代码是不是对的,我们也无法评判其分数。

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

  我看了几篇关于Junit的程序测试的博客论文,感觉是可以的,如下:

java 两阶段提交原理 java第二阶段项目_子类_04

 

 具体可不可行需要操作一下才知道。

五、课程收获(总结这四周来在OO方面的教训及收获):

  通过这个阶段的学习,学到的东西还是很多,同时也吃了很多教训,比如看题不仔细,写代码时马马虎虎,犯一些小毛病,有时候对于一些逻辑性很强或者过于抽象的题目

想的不透彻,不完全理解OO编程。随然如此,但我还是学到了很多吧,搞清楚了OO编程的三大特征(封装、继承、多态),知道单一功能原则和“开-闭原则”。我不会停下学习java的

脚步,希望获得更多的OO编程方面的知识。

六、对课程的建议:

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

  相对来讲,第一阶段的难度偏大,题目量也偏大,第二阶段难度偏小,题目量也小了,第三阶段的作业难度的话,中等吧,题量可以再增加一题左右,主要是难度不要太大,我知道这可能不好,但是希望不要太难。

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

  又经过这几个礼拜的学习,感觉这种上课模式还是很不错,直接拿着代码开讲,讲完即练(课堂作业),这样就能够很好的保留上课记忆,打好基础,比期之前的C语言、数据结构的学习模式来说真的很不错,所以我没有太多的建议。