对象导论
想要开始着手学习java,首先应该了解java,明确他是怎样的一种语言。
1、抽象过程
所有编程语言都具备抽象机制,人们所能解决的问题的复杂性直接取决于抽象的类型和质量。
以下是java的五个基本特性(表现了一种纯粹的面向对象程序设计方式)
a、万物皆为对象。将对象视为奇特的变量,它可存储数据,此外、还可要求它在自身上执行操作。
b、程序是对象的集合,它们通过发送消息来告诉彼此所要做的。要想请求一个对象,就必须对该对象发送一条消息。具体的说即把消息想象为对某个特定对象的方法的地调用请求。
c、每个对象都有自己的由其他对象所构成的存储。
d、每个对象都拥有其类型。通用说法“每个对象都是某个类(class)的一个实例(instance)”,类即类型的同义词;每个类最重要的区别于其他类的特征就是"可以发送什么样的消息给他"。
e、某一特定类型的所有对象都可以接收同样的消息。(圆形类型的对象同时是几何类型的对象 所以一个圆形对象必然能够接受发送给几何形对象的消息------可替代性)。
2、每个对象都有一个接口
类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型,例如所有的浮点型数字具有相同的特性和行为集合。二者差异在于,程序员通过定义类来适应问题,而不再被迫只能使用现有的用来表示机器中的存储单元的数据类型。可根据需求,通过添加新的数据类型来扩展编程语言。编程系统欣然接受新的类,并且像对待内置类型一样地照管他们和进行例行检查。
一旦类被建立,就可以随心所欲地创建类的任意个对象,然后去操作他们。
每个对象都只能满足某些请求,这些请求由对象的接口所定义,决定接口的便是类型。以电灯泡为例:
Light lt = new Light(); lt.on();
3、每个对象都提供服务
当试图开发或理解一个程序时,最好的方法之一就是将对象想象成“服务提供者”。程序本身将向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建/在api中寻找能够提供理想的服务来解决问题的一系列对象。
将对象看成是服务提供者还有一个附带的好处:有助于提高对象的内聚性(即每个对象都有一个它所能提供服务的内聚的集合,而保证一个对象中不塞入过多的功能:例打印机的功能),在良好的oop设计中,每个对象都可以很好的完成一项任务,但他并不试图做更多的事。
4、复用具体实现
最简单的复用某个类的方式就是直接使用该类的一个对象,此外也可将那个类的一个对象置于某个新的类中--------创建一个成员对象。
组合(has-a):新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成;即使用现有的类合成新的类。
聚合:如果组合是动态发生的。
在建立新的类时,首先考虑组合,因为更加简单灵活,使用这种方式会使得设计更加清晰,有了一定经验后,便能够看出必须使用继承的场合了。
5、继承(is-a)
基类:即某一类型共性的东西。
导出类:则是根据其自身拥有其独有的属性和方法及继承过来的东西。
两种使基类和导出类产生差异的方法:a、直接在导出类中添加新的方法;b、覆盖。
通常称基类和导出类之间的关系为is-a(例:一个圆形就是一个集合形状)
但有时需要在导出类中添加新的接口元素,也就扩展了接口,此种情况被描述为is-like-a(像是一个)关系。 新类型仍有旧类型的接口,但是他还包含其他方法。新类型可以替代基类,但并不完美,因为基类无法访问新添加的方法。
6、单根继承结构
在单根继承结构中的所有对象都具有一个共用接口,终极基类为Object。单根继承结构保证所有对象都具有某些功能。
7、容器
对容器进行选择的原因:a、不同容器提供了不同类型的接口和外部行为
b、不同的容器对于某些操作具有不同的效率(例:ArrayList&LinkedList;可以在一开始使用LinkedList构建程序,在优化系统性能时改用ArrayList)。