第二阶段作业总结

前言

  经过初步地学习过后,课程《java面向对象》第二阶段的学习更快也更顺利地结束了,为了巩固加深第二阶段学习中的各种知识点,现在有必要通过作业整理分析阶段学习任务所思所感所得。拥有了第一次作业完成所积累的java编程知识和ecplise使用技巧,这次作业在难度上虽然有了一个较大的提升,但却能够比第一次更加从容自主地解决编程中的各种问题并完成任务。本次作业中包含很多要求我们自主查阅资料学习的内容,我觉得可以很好地提升我们对javaOO思想的理解和编程方法的掌握。

 

  作业过程总结

  1. 三次作业之间的知识迭代关系

  第一次作业:

学习java中字符串处理类和正则表达式在java语言的运用,使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算.

  第二次作业:

掌握类的继承、多态性及其使用方法。

  第三次作业:

在掌握类的继承、多态性使用方法的基础上了解学习java接口的应用。

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

  第一次作业要求我们对水文数据进行校验及处理,使用字符串处理类储存水文数据并通过正则表达式检验数据的合法性,主要训练正则表达式和字符串处理类的运用;

  第二次作业要求我们设计Circle、Rectangle及Triangle类处理图形数据,我们发现Circle、Rectangle及Triangle类有一个相同的特征——图形类;我们可以设计创建一个图形代表类对Circle、Rectangle及Triangle类的信息进行处理封装。因此通过此次作业我们映入了java继承的概念:“继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力”。Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。

  第三次作业与第二次格式相似,设计创建图形类并加创图片类。运用继承多态储存图形和卡片数据信息,并实现java接口处理特定问题。

java接口:“Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为”。

该题我们实现 Comparable 接口中的 CompareTo()方法。从而实现通过指定方式对对象进行排序。

 

  第二次作业Circle、Rectangle及Triangle类均属图形,完美吻合了继承的适用条件,将程序复用性提升一个层次,且不同子类可以有不同的具体的实现方法,这就是继承的延伸——多态的思想。

第三次作业则在要求我们创建多个同属性类去实现多态继承的运用时引入接口的概念——通过重写java包中已实现的方法达到实现现实指定功能。

 

 

  因此通过这三次作业基本对java继承、多态、接口封装有了一个基本的理解。

 

 

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

 

 

  第一次作业第一题:

第一题是相对我来说困扰最久的题,对字符串类的了解运用不够深入让我在进行数据的录入、存取、计算频频出错,不时进行百度查阅相关知识。

问题1:一次性数据录入后无法对数据进行分离

 

解决方案:使用String类split()方法进行变形对不同数据信息进行分割。

 

public void getDealDateResult() {     
        //System.out.println("111");
        int i=0;
        String str=new String();
        str=sb.toString();    
        String[] str2=str.split("\\*");
        CheckData checkData=new CheckData(str,str2.length);
        checkData.validateDate();
    }

    第二次作业第二题:

  问题1:分隔多项式时无法区分减号和指数的“-“符号。

  解决方法:通过负号和减号前一位字符的不同判别。

List<Tern> list = new LinkedList<Tern>();
		data=data.replaceAll(" {1,}","").replaceAll("\\^-","\\^b").replaceAll("-","c-").replaceAll("\\+","d\\+");
		if(data.charAt(0)=='c')
			data=data.replaceFirst("c-","-");
		String[] PoverFunction=data.split("[dc]");
		for(int i=0;i<PoverFunction.length;i++) {
			PoverFunction[i]=PoverFunction[i].replaceAll("b", "-");
		}

    第三次作业第二题

   问题:数据输入格式要求每个数据单股带个[]括号。

   解决方法:设计运句

for(int i=0;i<cardlist.size();i++) {
			System.out.printf("%s:%.2f ",cardlist.get(i).getShape().getShapeName(),cardlist.get(i).getShape().getArea());
		
			if(cardlist.get(i).getShape().getList()==1)
				a[0]++;
			if(cardlist.get(i).getShape().getList()==2)
				a[1]++;
			if(cardlist.get(i).getShape().getList()==3)
				a[2]++;
			if(cardlist.get(i).getShape().getList()==4)
				a[3]++;
		}
		System.out.println("]");	
		this.cardSort();
		System.out.println("The Separated List:");
		System.out.print("[");
		for(int j=1;j<cardlist.get(0).getShape().getList();j++)
			System.out.print("][");		
		for(int i=0;i<cardlist.size();i++) {				
			System.out.printf("%s:%.2f ",cardlist.get(i).getShape().getShapeName(),cardlist.get(i).getShape().getArea());
			allarea[cardlist.get(i).getShape().getList()-1]+=cardlist.get(i).getShape().getArea();
			if(i+1==a[0])
				System.out.print("][");		
			if(i+1==a[0]+a[1])
				System.out.print("][");		
			if(i+1==a[0]+a[1]+a[2])
				System.out.print("][");		
		}	

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

    因为第一次对字符串处理类掌握的不全面,第一次花费时间可能更长;

 

 

 

  后面几次虽然功能更复杂,但花费时间在可控范围内。大致为:  3:2:2。

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

  编程的严谨十分重要,一份不严谨马马虎虎的程序代码健壮性必然不合格,一旦出现错误情况调试修改十分麻烦。而一份严谨的代码存在严格的检验机制和精简不拖沓的代码组成,严谨的代码简洁性也更高复用性更强!

      OO设计心得

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

  1、抽象:

  抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。

  2、继承:

  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法,提供代码重用。

  3、封装:

  封装是面向对象的特征之一,完成了 接口与实现的分离,提高可维护性是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。

   4、多态性:

  多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不一样;由继承而延申,主要目的是为了模拟现实的需要(即不同子类有不同的具体的实现方法),一定程度提高了代码重用(不同子类可公用同一段代码)。

2. 面向对象设计的基本原则理解

  一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而大大损伤其内聚性和耦合度。通常意义下的单一职责,就是指只有一种单一功能,不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因

3. OO编程思维的理解

  OO编程就是面向对象的思想,不同于其他语言面向过程的思想。面向对象针对程序功能而设计对象,它的每一部分都是可分隔而单独存在,真因为这一特性,java能够拥有不俗的移植性,很多软件从pc断移植到移动端都依靠java的面向对象的思想为基础。

测试的理解与实践

 

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

  保证代码质量真的很重要。著名程序工程师任正非任老爷子说过:我们要从最基础的编码质量做起,视高质量代码为尊严和个人声誉。真的很认同这个观点,保证自己代码的质量本是是基本的事,但很多时候我们却保证不了。所以他才把代码质量提到那么高的高度,而代码质量离不开测试。代码质量保证了,功能才能稳定,稳定可靠的功能就是最好的宣传。保证代码质量就是程序员练内功,内功扎实,才能在上面构建更多的可能性。

 

课程收获

经过这4周老师的辅导和编程作业的练习,我基本能够理解javaOO思维的独特之处和巧妙优势。

学会了继承对于代码的可复用性;多态性可以说是是继承的延伸,它既可以创建一个让所有子类无偿调用的父类,也可以重写方法让不同子类有不同的具体的实现方法。

学会了接口的实现重写。

 

 

 

 

 

posted @ 2020-05-02 23:23  上白  阅读(151)  评论(0)    收藏  举报