OO第二单元(5-8周)作业总结

前言

  本篇博客主要针对第四次作业到第六次作业的作业情况和最近几周的学习情况做一个总结。

作业过程总结

  1. 知识迭代关系

  第四次作业主要考察了继承,第五次作业则涉及到了继承与多态,第六次作业在之前的基础上加上了抽象类与接口的考察。三次作业的知识点层层递进,将java面向对象的内容由浅到深的展现出来;另外,第四次作业和第五次作业都考察了正则表达式的书写。

  1. 面向对象的三大特性

封装性:修改属性的可见性来限制对属性的访问(一般限制为private),对每个值属性提供对外的公共方法访问,即创建一对赋取值方法,用于对私用属性的访问。

继承性: 类的继承分父类和子类,子类包含了父类的所有属性与方法。如第四次作业7-3图形继承,类Shape为父类,类Circle和类Rectangle为类Shape的子类。

多态性: 多态性是父类和子类之间的一种性质,可以理解为是继承性的一种扩展。这种多态性为父类与子类之间的联系提供了一种更方便的方法。

  1. 问题及解决方法
  • 第四次作业

    • 7-1水文数据校验及处理

    问题:正则表达式的书写

    解决办法:一开始没有掌握好正则表达式的书写规则,后来查阅了许多资料后,顺利的写出了正则表达式,之后也就一遍过了。部分正则表达式如下:

    //判断数据合法性
    data.matches("[^	]{1,}\t[^	]{1,}\t[^	]{1,}\t[^	]{1,}\t[^	]{1,}");
    
    //判断日期合法性
    measureDateTime.matches("[1-9]\d{0,3}/(([1-9])||([1][0-2]))/(([1-9])||(([1-2][0-9])||([3][0-1]))) (([0-9])||(([1][0-9])||([2][0-4]))):00");
    
    
  • 第五次作业

    • 7-1一元多项式求导

    问题:测试点“数字中带空格”错误

    解决办法:指导书中说的是“带符号整数内不允许出现空白字符,其他位置均可以存在空白字符”,而实际情况是任何位置都可以出现空格,所以我在输入完后直接将数据里的空格全部去除,再去进行处理。代码如下:

    public static void main(String[] args) {
    		Scanner sc=new Scanner(System.in);
    		String s=sc.nextLine();
    		Polynomial p=new Polynomial(s.replace(" ",""));		//先把空格去掉
    		if(p.isPolynomial())
    		{
    			Expression e=new Expression(p.getPolynomial());
    			System.out.println(e.toString());
    		}
    		else
    		{
    			System.out.println("Wrong Format");
    		}
    	}
    
  • 第六次作业

    • 7-2图形卡片分组游戏

    问题:测试点“只输入0”错误

    解决办法:指导书中说的图形数量非法是小于等于0,包括了0的情况,所以我在第一次输入后判断一下是否为0就可以了。

  1. 时间比例

    第四次:1 day;第五次:1 day;第六次:3h

    时间比:8:8:1

  2. 认识及教训

整体来说,这几次的作业较前几次作业在严谨性上有了很大进步,不会犯一些低级错误,但是还是容易考虑不完整,导致一些情况的疏漏。之后的学习当中,我会训练自己思维的严谨性,这样也会提高自己编程的严谨性。

OO设计心得

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

  封装性是对类本身的封装,可以方便其他类对类的属性和方法的调用;继承性是类与类之间的关系(父子关系),父类的属性和方法子类都可以调用;多态性是继承性的一种延伸,使得父类和子类之间的关系联系更紧密了。比如第六次作业的7-1给出的类参考图就有封装、继承、多态、抽象类、接口等。

类

  1. 面向对象设计的基本原则理解
  • 单一职责原则

定义:类有且应当只有一个改变的理由。

  单一职责原则在类的设计中是十分重要的,实现单一职责简单点说就是对职责分工,每个类都有自己的职责。这种设计对代码的复用性有很大的帮助,要用到某个类的功能时可以直接拿过来用。

  • 开-闭原则

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

  类的属性和方法只有类本身可以修改,其他类是不能修改的,但其他类可以调用类的方法,这就是对扩展开放,对修改关闭。

  1. OO编程思维的理解

  面向对象,对象可以理解为是一种实体,一种实体就是一种类,对类进行封装,类与类之间可以有继承关系,有继承关系之间的类呈现多态性。另外还有抽象类,类的方法可以重载,还提供了各种接口。

  1. 类设计心得

  在编程过程中,设计好类就是成功了一半。设计类时,首先要考虑类要实现的功能,接着就是类的属性与方法的实现,最后还要考虑类与类之间的关系。这几次作业当中,对类的设计要求很高,因为指导书中给出了类图,这也降低了一些难度,在之后的学习中,我还需要提高自己类设计的能力。

测试的理解与实践

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

  一个题目需要考虑的情况往往有许多种,而人有时候考虑的情况往往不是很全,这时候就需要测试来检验代码的正确性。测试可以提高程序员的编码的质量,测试越全面,发现的漏洞可能就越多,通过不断的改进,可以提高一个人的编程水平,在编码质量上也会有巨大的提升。

  1. 使用Junit进行程序的测试

  使用JUnit可以方便地对类的方法进行测试,通过比较方法的返回值与期望值是否相等来判断方法是否正确。所以使用Junit进行程序的测试是可行的。

课程收获

  对面向对象编程有了更深的理解,学会了封装、继承、多态,还有抽象类和重载、接口。这些特性是面向对象设计中重要的特性,面向对象更注重类的设计,类设计的好就是成功了一半。另外,还学会了正则表达式的书写,正则表达式在许多地方都会用到,正确使用好正则表达式往往可以达到事半功倍的效果。不过,这几周的学习也暴露了一些问题,基础的知识不牢固,比如:final关键字和static关键字,这种基础的知识掌握不清楚,往往会影响整个编程。

对课程的建议

  1. 第三阶段的作业难度可以适当提高,题量可以适当下降。
  2. 老师上课时对一些重点难点可以有适当的扩展,也可以多一些这方面的练习。
原文地址:https://www.cnblogs.com/code-hacker/p/12811407.html