PTA作业总结

一.前言

       pta作业量不多,每次作业大都只有一题,但是题目颇具代表性,充分考查了学生对老师教授内容成果。在这些作业中我发现很多问题,首先,题目开始涉及使用两个栈(Stack),一个运算符栈,一个操作数栈,类的封装、继承、多态,抽象类,接口等Java重点,学习和练习的题目都向更深层进发,而且题目颇具特色可以很明显地展现继承,多态等技术的优势。但这也有好处,就是让学生自己去发现问题,解决问题,从而提高学生程序编译能力和问题发现,问题解决得能力。

二.作业过程总结

  首先,雨刷程序功能扩展设计,主要考查学生对类的继承、多态,抽象类,接口的学习结果;统计Java程序中关键词的出现次数,主要考查List、Set或Map;表达式求值,主要考查涉及使用两个栈(Stack),一个运算符栈,一个操作数栈,学生对栈的认识和使用。

  继承的两个特点:1.子类可以拥有父类的“内容”。2.子类还可以拥有自己的专有的内容。在继承的关系中,”子类就是一个父类“。也就是说,子类可以被当做父类看待。例父类是员工,子类是讲师,那么“讲师就是一个员工”。封装,封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节,这就是封装的思想,在Java中通常通过建立一个实体类,用来封装对象的属性和行为,通过set()和get()方法封装起来,例如,用户在使用一款软件的时候,只需知道如何使用软件,点击某个按钮就可以实现一定的功能,用户不需要知道软件是如何被开发出来的,软件内部是如何工作的,在使用该软件时不依赖于开发时的细节和软件内部工作的。采用封装的思想保证了类内部数据结构的完整性,应用该类的用户不能轻易直接操纵该数据结构,而只能执行该类允许公开的数据。这样可以避免外部对内部数据的影响,提高程序的可维护性。

  而继承性,简单来说就是使子类的对象拥有父类的全部属性和行为,同时可以增添自己的所特有的属性和行为。这样可以节省写共同具有的属性和方法代码的时间,有利于代码的复用,这就是继承的基本思想。软件的代码使用继承思想可以缩短软件开发的时间,复用那些已经定义好的类可以提高系统和软件的性能,减少系统和软件在使用过程中出现错误的几率。一个类可以是其他类的父类,为其他类提供属性和行为,也可以是其他类的子类,继承父类的属性和方法,子类的实例都是父类的实例,但不能说父类的实例是子类的实例。

  在写这些题目时,遇到很多问题如:对类中封装性的理解不清导致的错误,对多态的理解和使用错误,而且在写代码时无法快速地想到如何用继承和多态解决问题,写题目时花费的时间太长,不仅如此而且错误率还高,要花长时间来修改代码,才可以解决问题。而且,题目测试点太多,容易出现错误。而在遇到问题时我会花大量时间在网上查资料,或者问同学并且坚持将问题解决。

  作业数量不多,但花费的时间却越来越长,与前几次作业情况差不多,时间都时增长,但是发现错误和解决错误的能力却有了很大的增长,这也算是一个进步。

  在作业变成过程中,吃了严谨性好大的亏,特别是第一次作业,明明是最简单的一次作业却还错了,只因写代码时不够严谨,导致数据错误输入。而在其他题目上,想将题目所需方法尽可能简化,却没有考虑周到,代码计算范围不够全面。所以在写代码时严谨性很重要,这关乎一个代码的对与错。

  Set和List接口继承了Collection接口 

  List:存储: 有序的(放入的先后的次序), 可重复的
            访问:可以for循环,foreach循环,iterator迭代器 迭代。
    . Set :存储:无序,不可重复
           访问:可以foreach循环,iterator迭代器 迭代
    . Map :存储:存储的是一对一对的映射 ”key=value“,key值 是无序,不重复的。value值可重复
           访问:可以map中key值转为为set存储,然后迭代这个set,用map.get(key)获取value
                也可以 转换为entry对象 用迭代器迭代,也可以直接使用values()方法获取全部的值,返回collection对象

Set是最简单的一种集合,集合中的对象无序、不能重复。
主要实现类包括:
               . HashSet      : 按照哈希算法来存取集合中的对象,存取速度比较快;
               . LinkedHashSet: HashSet子类,不仅实现Hash算法,还实现链表数据结构,链表数据结构能提高插入和删除元素的性能;
               . TreeSet      : 实现SortedSet接口,具有排序功能;
  一般用法:  Set集合中存放的是对象的引用,并且没有重复对象

   为了保证HashSet能正常工作, 要求当两个对象用equals()方法比较的结果为true时,它们的哈希码也相等。如果用户定义的Customer类覆盖了Object类的equals()方法,但是没有覆盖Object类的hashCode()方法,就会导致当 customer1.equals(customer2)为true时,而customer1和customer2的哈希码不一定一样,这会使HashSet无法正常工作。
                 TreeSet实现了SortedSet接口,能够对集合中的对象进行排序。当TreeSet向集合中加入一个对象时,会把它插入到有序的对象序列中。那么TreeSet是如何对对象进行排序的呢?TreeSet支持两种排序方式:自然排序和客户化排序。默认情况下TreeSet采用的是自然排序方式:
                  a. 自然排序
                     在JDK类库中, 有一部分类实现了Comparable接口,如Integer、Double和String等。Comparable接口有一个compareTo(Object o)方法,它返回整数类型。对于x.comapreTo(y), 如
                     返回0,      表明   x和y相等
                     返回值大于0, 表明   x>y
                     返回值小于0, 表明   x<y
                    **即:想表示出x比y大,让x.comapreTo(y)返回一个大于0的数字即可
                     TreeSet调用对象的compareTo()方法比较集合中对象的大小,然后进行【升序】排序,这种排序方式称为自然排序。

三.程序设计心得

  可以从这几次作业中发现,继承是多态的前提 ,如果没有继承,就没有多态,继承主要解决的问题就是共性抽取。面向对象可以说是一种对现实是事物的抽象,将一类事物抽象成一个类,类里面包含了这类事物具有的公共部分,以及我们对这些部分的操作,也就是对应的数据和过程。在面向对象思想中,对一个类,将数据和过程封包围起来,对外隐藏具体的实现细节 并且数据(成员变量和成员函数)在内部是完全自由使用的,而外部对数据的访问是加访问限定的,某些对操作只能根据由内部提供接口。继承可以说是一种代码复用的手段,我们在一个现有类上想扩展出一些东西的时候,不需要再次重复编写上面的代码,而是采用一种继承的思想。在派生出的子类里添加一些我们想要的数据或方法,也可以理解为从一般到特殊的过程。

 

四.测试的理解与实践

  在写pta作业时也充分体现了测试的重要性,eclipse虽然有识别错误的能力,但能否得出正确得结果还需测试后才能得知,而且测试结果需要与pta给出的结果对比是否一模一样才行。测试不仅可以检验代码的可运行性,还可以检验代码运行的正确性。

 

五.课程收获

  在作业的学习中,我从分体会到写代码时要心静这句话的真谛,心不静就不能体会到题目的真正意思,更会使代码出现错误的概率增大,数据作用范围理解不清,导致无法得到正确的答案。这也让我知道,学习不是一成不变而是不断变通,在平时应该经常看一些别人写的代码,学习别人的优点,提高对一个问题解决方式的方法,使一个问题有多个解决方法,提高自己的编程能力。

六.对课程建议

  老师的讲课能力很强,在上课时提出的写代码作业应该放在课后完成而不是上课解决,因为这太浪费时间,学生代码正确性也得不到保障。其次pta上的作业希望老师能进行一些讲解,毕竟写完后需要老师的一些提点,以帮助学生进步。作业难度方面没什么建议,题目数量不在多而在精,这点老师做的十分的好。而在课堂上希望老师可以多以例子讲解,并着手实践,以帮助理解和运用。

posted @ 2020-06-06 10:32  -+-+-  阅读(257)  评论(0)    收藏  举报