Java第二次博客作业

0.前言
主要说明本次博客针对的作业情况
1.作业过程总结
第一次作业练习的主要是正则表达式的书写,第二次增加了多态以及ArrayList,第三次则是多了接口的应用;第一次作业用了4天,第二次作业花了两三天,最后一次作业也有三四天之久,JAVA编程的难度及严谨性可见一斑。此后我清楚的认识到,不去亲自动手练习编程,只是照着模板看两眼是不会有进步的,知行合一才能发挥最大功效。第一次用正则表达式,因为没有认真听讲,结果花了不少苦头在上面,其深奥性可见一斑。
2.OO设计心得
①面向对象三大技术特性:封装,继承,多态

首先是封装:对类里面的成员变量通过使用private修饰符进行隐藏,通过使用public 修饰符来编写它们对应的方法来进行访问和修改。这样做可以确保我们某些成员变量的密封性,只能通过方法来决定它们是否能被访问以及修改。

在封装以及构造方法中,会经常使用this关键字,通过this.成员变量或者this.方法表示调用当前的成员变量和方法,比如在编写修改器set的时候,set的参数名字与类的成员变量名相同的时候(一般编写程序的时候都会使它们的名字是相同的,既美观又方便),用this就可以解决重名的情况,同样在构造方法里面也是一样的。

其次是继承:继承属于类与类之间的一种很重要的关系。继承是指从已有的类中派生出新的类,新的类可以继承父类的成员变量和方法(private修饰符修饰的除外)的同时,还可以扩展自己的成员变量以及属于自己的方法。

super可以用来调用被隐藏的成员变量和父类的方法,也可以用来调用父类的构造方法。在子类的构造方法里面,即使没有显示调用父类的构造方法也还是是会自动调用父类的构造方法(父类的无参构造方法)的,而且调用语句必须得出现在子类构造方法的第一句。

成员变量被final修饰时,便成了不可修改的成员“变量”,即常量,故在定义的时候就需要对该成员进行初始化操作。方法被final修饰时,也是不可以被修改即重写的了,注意final不能修饰构造方法,但是被final修饰的方法可以被继承。

最后是多态:就是指一个父类引用(类型)在不同的情况下的多种状态。通过父类的引用去访问继承层次中子类的对象,调用子类重写父类的方法产生不同的操作(多态)。多态分为运行时多态和编译时多态。

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

开放封闭原则:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。开放封闭原则主要体现在两个方面1、对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。2、对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对其进行任何尝试的修改。 实现开开放封闭原则的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以修改就是封闭的;而通过面向对象的继承和多态机制,又可以实现对抽象类的继承,通过覆写其方法来改变固有行为,实现新的拓展方法,所以就是开放的。 
OO语言之父Alan Kay,Smalltalk的发明人,在谈到OOP时是这样说的:

I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning -- it took a while to see how to do messaging in a programming language efficiently enough to be useful).
...
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP.
OOP应该体现一种网状结构,这个结构上的每个节点“Object”只能通过“消息”和其他节点通讯。每个节点会有内部隐藏的状态,状态不可以被直接修改,而应该通过消息传递的方式来间接的修改。

OO方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
④在这几次的作业过程中,我通过类的编写,更加明确了封装继承多态在各种情况下的使用,与此同时,我也与我直接一股脑塞到main方法里的代码进行了对比,深感类的重要性。
3.测试的理解与实践
①在学习c的时候,我就已经学会在各中题目中搜寻范围,寻找特殊样例来测试自己的代码,因为我知道:测试是维护和审查自己的程序的必要环节。在玩手游页游或是单机游戏时,一些恶性bug时常困扰着广大的玩家。程序员的失误悄悄的流入了用户身上,对于一个服务行业来说,甚是失败。然而鄙人时间有限,而且方法死板,一些难题通常会有许多要注意的点,而我不可能全把时间花在上面,于是细枝末节的小错误还是草草了之。这次通过学习编写测试类,我便了解了更因为有效的测试方法。
②使用Junit进行程序的测试是可行的,这样可以强制你在写代码之前好好的思考代码(方法)的功能和逻辑,否则编写的代码很不稳定,那么你需要同时维护测试代码和实际代码,这个工作量就会大大增加。因此在极限编程中,基本过程是这样的:构思-> 编写测试代码-> 编写代码-> 测试,而且编写测试和编写代码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。
4.课程收获
这四周来,我通过这几次的作业,明确了封装继承多态在各种情况下的使用,课后也与同学进行了讨论,并了解了更多便捷的方法。
5.对课程的建议
①后期的作业难度肯定是会逐步增加的,但各位同学的进度不一样,希望能尽量照顾到在后面的同学。
②目前课程内容方面感觉老师讲的挺好的。

猜你喜欢

转载自www.cnblogs.com/chaoschampion/p/12819362.html