Java课程第二阶段作业总结

0.前言

  不知不觉,我们学习Java已经近三个月了。到现在为止,基础语法基本上完成了学习。那么相应的作业也到了第二阶段的尾声,本次博客,主要针对第二阶段作业做出总结。相关题目如下:

  ①使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算。(具体需求参见附件 2020-OO第05次作业-1指导书V1.0.pdf ) 

  ②使用蒙特卡洛仿真方法求圆周率。(具体要求见作业指导书 2020-OO第05次作业-2指导书V1.0.pdf )  

  ③编写程序,实现图形类的继承,并定义相应类对象并进行测试。

  掌握类的继承、多态性及其使用方法。具体需求参见作业指导书。 2020-OO第06次作业-1指导书V1.0.pdf

  使用类的继承、多态性编写程序对简单多项式的导函数进行求解。详见作业指导书 2020-OO第06次作业-2指导书V1.0.pdf

  掌握类的继承、多态性使用方法以及接口的应用。详见作业指导书 2020-OO第07次作业-1指导书V1.0.pdf

  掌握类的继承、多态性使用方法以及接口的应用。 具体需求参考作业指导书。 2020-OO第07次作业-2指导书V1.0.pdf

  求素数练习,考查算法设计与优化。输入一个整数,输出小于等于这个整数的所有素数及数量。 注意:本题目为加分题,总分30分,得分计算方式如下:

     (所有得到满分的同学程序所用时长的平均值-你的程序运行所用时长)/所有答案所用时长最小值*30分,为负值者不得分。

1.作业过程总结

 ①总结三次作业之间的知识迭代关系;

  第四次作业(具体题目为前言所列①②③)主要目的是初步提出Java继承的概念以及让我们熟悉正则表达式的相关用法。第③题中,初步锻炼对继承的用法。继承其实就是在我们当前的类(子类)后面加上一个extends关键字,再加上要继承的类(父类),即class A extends B就行了。这样做以后,子类就继承了父类所有的东西(当然private成员除外,即继承了父类所有的非private属性和方法。下面举一个例子:

public class Main {

    public static void main(String[] args) {
        System.out.println("I'm GeometricObject..");
        GeometricObject geometricobject = new GeometricObject("Blue");        
        geometricobject.show();
        
        System.out.println("");
            
        System.out.println("I'm rectangle..");        
        Rectangle rectangle = new Rectangle();                        
        rectangle.show();
    }
}

class GeometricObject {
        private String color;    
    
    public GeometricObject(String color){
        this.color = color;
    }
    
    public void setColor(String color){
        this.color = color;
    }
    
    public void show(){
        System.out.println("The color is:" + color);
    }
} 
class Rectangle extends GeometricObject{            
    
    public Rectangle() {
        super("Red");
    }
            
}   

输出如下:

I'm GeometricObject..
The color is:Blue

I'm rectangle..
The color is:Red

那么上述例子可以看到,rectangle这个对象是Rectangle类的一个实例,但是Rectangle里面没有show方法,却实现了show,原因是它继承的父类里面有show方法,这就是继承的初步。此次作业还有的一个重要内容是正则表达式,其实这不仅限于Java,很多计算机语言都要用到。它能帮助我们判断输出的格式是否符合设定等。

  第五次作业(具体题目为前言所列④⑤)比第四次作业新增加了一个知识点,叫做多态。顾名思义就是拥有“多种形态”的含义,是指属性或方法在子类中表现为多种形态在JAVA中有两种多态是指:运行时多态和编译时多态。多态性是面向对象的核心特征之一,类的多态性提供类中成员设计的灵活性和方法执行的多样性。在上课时,老师一直重复这句话“所有的子类对象都是父类的一个对象”。那么为什么要多态?那是为了是程序具有更好的扩展性,并可以对类进行通用的处理。

  第六次作业具体题目为前言所列⑥⑦⑧)难度有所下降,且前两题联系紧密,第⑦题主要是对第⑥题进行完善,这次作业对继承和多态进一步巩固,让我们更深刻地体会到了它的用法和妙处。那么第题跟目前所学内容无关,是加分题,锻炼我们的思维,此处不过多解释。

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

  总体上的理解我感触最深的就是面向对象的三大特性都是围绕一个主题在转——让类结构具有更好的复用性。对于封装性,我想说,封装就是将对象的属性,方法定义到一个类里。打个比方说,对象就好像密封舱,你可以把它看成一个整体来使用。但里面具体的东西是怎样的,我们是看不到的。作业中每个类都需要封装,这也是第一节课就讲了的所有的东西都必须放在类里面,否则就会语法报错。对于继承性,了解很初步,但感觉貌似也就这些吧,没有太多的东西,我的理解在上面的举例代码已给出,这里就不再重复辣耳朵(或者说眼睛)了。对于多态性,我想说,作业给出的例子很多,比如第六次作业的卡片排序啊这些,涉及到的比较全面,我也是在这里渐渐感受到它的特性和好处的所谓多态,就是拥有“多种形态”的含义,是指属性或方法在子类中表现为多种形态相同的事物,调用相同的方法使用相同的参数,但是表现的行为不同.子类以父类的身份出现,但是做事情还是用自己的方法实现.子类以父类的身份出现时需要向上转型,向上转型是JVM自动实现的,是安全的,但是向下转型是不安全的,需要强制转换.子类以父类的身份出现时自己特有的属性和方法不能使用。对于多态,它的一般形式如下:

class A ...{  
         public String show(D obj)...{  
                return ("A and D");  
         }   
         public String show(A obj)...{  
                return ("A and A");  
         }   
}   
class B extends A...{  
         public String show(B obj)...{  
                return ("B and B");  
         }  
         public String show(A obj)...{  
                return ("B and A");  
         }   
}  
class C extends B...{}   
class D extends B...{}

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

  老实说,第四次和第五次作业中都还有一题遇到的问题还没有办法解决(第①和),那两题是真的写的头都大了,无奈啊,这里就分享一些平常自己能解决问题的方法吧。首先语法错误不用多说了,上课好好听,根据eclipse的提示,要不了多久就解决了,实在不懂先上网查,再不懂就找同学找老师问一下,可能某个地方卡壳了,不要着急,心态放平就行了。然后再就是逻辑错误了,也就是放在pta中提交后的测试点,这个的解决,初步是根据题目的输入输出样例在eclipse里验证一边,看看是不是对的上,稍微简单的题目也没多久就能发现。但有时候题目里的输出样例符合之后还是有错,这个时候先考虑边界值,还有就是一些特殊情况,先把这些情况单独列出,再运行尝试是否能够通过,再不能过的话,就一般会截图给同学,问问他们怎么做的这个点,然后这个时候其实麻烦还是挺大的,因为解题思路、逻辑的不同,听起来有点云里雾里。之后就是再静心想一想同学的思路,对比一下,想一阵子之后,差不多能够发现自己疏忽的问题了。

 ④每次作业花费的时间比例

  第四次作业应该最久,写了好几天,最终也没能解决;第五次作业稍微好点,但还是卡点,没有得到满分;第六次作业就比较顺手,在语法错误和逻辑错误上都没花多少时间就解决了,可以说几乎没测试吧。比例大概6:3:1吧。

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

  经过这几次的作业,深刻认识到了逻辑严谨性的重要性。因为这几次作业都是有很多的不同情况,然后根据不同的情况进行不同的处理。因为逻辑的严谨性不够,导致有很多一些比较特殊的情况就没有能够进行讨论,导致最后结果出问题,然后就需要通过debug来找到问题所在,就会花费很多很多时间。通过这两次作业,我深刻体会了逻辑严谨性的重要性,逻辑严谨了,就会为自己节省很多时间,不需要做很多无用功,同时对自己代码进行优化或改正也会变得很容易,所以逻辑严谨对编程而言很重要。

2.OO设计心得

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

  总体上的理解我感触最深的就是面向对象的三大特性都是围绕一个主题在转——让类结构具有更好的复用性。对于封装性,我想说,封装就是将对象的属性,方法定义到一个类里。打个比方说,对象就好像密封舱,你可以把它看成一个整体来使用。但里面具体的东西是怎样的,我们是看不到的。作业中每个类都需要封装,这也是第一节课就讲了的所有的东西都必须放在类里面,否则就会语法报错。对于继承性,了解很初步,但感觉貌似也就这些吧,没有太多的东西,我的理解在上面的举例代码已给出,这里就不再重复辣耳朵(或者说眼睛)了。对于多态性,我想说,作业给出的例子很多,比如第六次作业的卡片排序啊这些,涉及到的比较全面,我也是在这里渐渐感受到它的特性和好处的所谓多态,就是拥有“多种形态”的含义,是指属性或方法在子类中表现为多种形态相同的事物,调用相同的方法使用相同的参数,但是表现的行为不同.子类以父类的身份出现,但是做事情还是用自己的方法实现.子类以父类的身份出现时需要向上转型,向上转型是JVM自动实现的,是安全的,但是向下转型是不安全的,需要强制转换.子类以父类的身份出现时自己特有的属性和方法不能使用。

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

  单一职责:简单来说就是每一个类应该专注于做一件事情。它可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;提高类的可读性,提高系统的可维护性;变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。需要说明的一点是单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责原则。

  开闭原则:貌似还不太理解,在百度上了解了一下,知道了它是一种编程思想,而不是编程方法。面向的是扩展开放,是修改关闭。开放封闭原则主要体现在对扩展开放、对修改封闭,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。软件的需求总是变化的,世界上没有一个软件的是不变的,因此对软件设计人员来说,必须在不需要对原有系统进行修改的情况下,实现灵活的系统扩展。

 ③OO编程思维的理解

  oo设计主要任务是将设计尽量和现实世界的事务一致化。要尽量使代码得到重用、复用。注意体现单一职责,开闭原则等七大原则。此外,表现出三大特性:封装性、继承性、多态性。

 ④类设计心得

  其实我觉得类本身这个名字就取得好,我们设计类的时候,可以按照常识什么可以分成一类,根据包含和并列关系可以分别设计继承和接口等类。还有就是老师常提到的“所有的子类对象都是父类的一个对象”,所以说使用时要注意转型。

4.课程收获

  收获:掌握了继承和多态的基础用法,了解了正则表达式的一些简单操作。

  教训:一定要乘早开始作业,到最后来做碰到难的题会来不及,让心里产生抵触感;要多加注意单一职责,重复的代码要另外做成一个方法。

5.对课程的建议

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

  这个没有太多的想法,按照老师安排来就行了,前一阶段都安排的还挺好的,继续就行。要是题目少,就适当增加难度,反之降低一些难度。还有就是希望老师能在作业截止后一段时间能够把参考代码提供一下,感觉我们少了对答案这一环节,我个人认为还是挺重要的。会做的人可以比对自己的不足,进一步完善;不会做的可以对照参考,不然有的题不会做一直卡着也不是办法。

 ②课程内容讲解方面的建议

  多加一些示例,讲一个用法就讲一个简单的示例,多注重教我们怎么操作,感觉会操作之后再理解未尝不可,熟能生巧。

  

编写程序,实现图形类的继承,并定义相应类对象并进行测试。

  1. 类Shape,无属性,有一个返回0.0的求图形面积的公有方法public double getArea();//求图形面积
  2. 类Circle,继承自Shape,有一个私有实型的属性radius(半径),重写父类继承来的求面积方法,求圆的面积
  3. 类Rectangle,继承自Shape,有两个私有实型属性width和length,重写父类继承来的求面积方法,求矩形的面积
  4. 类Ball,继承自Circle,其属性从父类继承,重写父类求面积方法,求球表面积,此外,定义一求球体积的方法public double getVolume();//求球体积
  5. 类Box,继承自Rectangle,除从父类继承的属性外,再定义一个属性height,重写父类继承来的求面积方法,求立方体表面积,此外,定义一求立方体体积的方法public double getVolume();//求立方体体积
  6. 注意:
  • 每个类均有构造方法,且构造方法内必须输出如下内容:Constructing 类名
  • 每个类属性均为私有,且必须有getter和setter方法(可用Eclipse自动生成)
  • 输出的数值均保留两位小数

主方法内,主要实现四个功能(1-4): 从键盘输入1,则定义圆类,从键盘输入圆的半径后,主要输出圆的面积; 从键盘输入2,则定义矩形类,从键盘输入矩形的宽和长后,主要输出矩形的面积; 从键盘输入3,则定义球类,从键盘输入球的半径后,主要输出球的表面积和体积; 从键盘输入4,则定义立方体类,从键盘输入立方体的宽、长和高度后,主要输出立方体的表面积和体积;

假如数据输入非法(包括圆、矩形、球及立方体对象的属性不大于0和输入选择值非1-4),系统输出Wrong Format

猜你喜欢

转载自www.cnblogs.com/zou-yu/p/12815150.html