面向对象编程

事实上,所有的Java程序都是面向对象的,你别无选择。

所有的计算机程序都由两类元素组成:代码和数据。程序可以以它的代码或是数据为核心进行组织编写。一些程序围绕“正在发生什么”编写,而另一些程序则围绕“谁将被影响”编写。

第一种方法被称为面向过程的模型(process-oriented model),用它编写的程序都具有线性执行的特点。面向过程的模型可认为是代码作用于数据。

第二种方式,也就是面向对象的编程(object-oriented programming)。面向对象的编程围绕它的数据(即对象)和为这个数据严格定义的接口来组织程序。面向对象的程序实际上是用数据控制对代码的访问。

面向对象编程的一个实质性的要素是抽象。人们通过抽象(abstraction)处理复杂性。通过层级抽象对复杂的系统进行管理。

传统的面向过程程序的数据经过抽象可用若干个组成对象表示,程序中的过程步骤可看成是在这些对象之间进行消息收集。

每一个对象都有它自己的独特行为特征。你可以把这些对象当作具体的实体,让它们对告诉它们做什么事的消息作出反应。这是面向对象编程的本质。

面向对象编程的3个原则

更精确地说,每个Java程序都具有封装性、继承性及多态性。

封装

封装(Encapsulation)是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。理解封装性的一个方法就是把它想成一个黑匣子,它可以阻止在外部定义的代码随意访问内部代码和数据。对黑匣子内代码和数据的访问通过一个适当定义的接口严格控制。封装代码的好处是每个人都知道怎么访问它,但却不必考虑它的内部实现细节,也不必害怕使用不当会带来负面影响。

Java封装的基本单元是类。一个类(class)定义了将被一个对象集共享的结构和行为(数据和代码)。

一个给定类的每个对象都包含这个类定义的行为和结构。类定义的数据称为成员变量(member variables)或实例变量(instance variables)。操作数据的代码称为成员方法(member methods)或简称方法(methods)。

类的目的是封装复杂性,在类的内部就应该有隐藏实现复杂性机制。类中的每个方法或变量都可以被标记为私有(private)或公共(public)。

类的公共接口代表类的外部用户需要知道或可以知道的每件事情;私有方法和数据仅能被一个类的成员代码所访问,其他任何不是类的成员的代码都不能访问私有的方法或变量。既然类的私有成员仅能被程序中的其他部分通过该类的公共方法访问,那么你就能保证不希望发生的事情就一定不会发生。

继承

继承(Inheritance)是一个对象获得另一个对象的属性的过程。继承很重要,因为它支持了按层分类的概念。使用了继承,一个对象就只需定义使它在所属类中独一无二的属性即可,因为它可以从它的父类那儿继承所有的通用属性。所以,可以这样说,正是继承机制使一个对象成为一个更具通用类的一个特定实例成为可能。

如果你想以一个抽象的方式描述动物,那么你可以通过大小、智力及骨胳系统的类型等属性进行描述。动物也具有确定的行为,它们也需要进食、呼吸,并且睡觉。这种对属性和行为的描述就是对动物类的定义。

我们说哺乳类动物是动物的子类(subclass),而动物是哺乳动物的超类(superclass)。

继承性与封装性相互作用。如果一个给定的类封装了一些属性,那么它的任何子类将具有同样的属性,而且还添加了子类自己特有的属性。这是面向对象的程序在复杂性上呈线性而非几何性增长的一个关键概念。 新的子类继承它的所有祖先的所有属性。它不与系统中其余的多数代码产生无法预料的相互作用。

多态性

多态性(Polymorphism)是允许一个接口被多个同类动作使用的特性,具体使用哪个动作与应用场合有关。多态性的概念经常被说成是“一个接口,多种方法”。这意味着可以为一组相关的动作设计一个通用的接口。多性允许同一个接口被必于同一类的多个动作使用,这样就降低了程序的复杂性。

多态性、封装性与继承性相互作用

如果用得当,在由多态性、封装性和继承性共同组成的编程环境中可以写出比面向过程模型环境更健壮、扩展性更好的程序。精心设计的类层级结构是重用你花时间和努力改进并测试过的程序的基础,封装可以使你在不破坏依赖于类公共接口的代码基础上对程序进行升级迁移,多态性则有助于你编写清楚、易懂、易读、易修改的程序。

人们在汽车上看见的总是封装好的特性。刹车和踏脚板隐蔽着不可思议的复杂性,但接口却是如此简单,你的脚就可以操作它们。

所有的驾驶员依靠继承性很快便能掌握驾驶不同类型(子类)车辆的技术。不管是接送学生的校车,或是保时捷汽车,或是家庭汽车,司机差不多都能找到方向盘、制动闸和加速器,并知道如何操作。手动档与自动档的超类就是「传动」。

多态性,在汽车制造商基于相同的交通工具所提供的多种选择的能力上得到了充分反映。刹车系统有正锁和反锁之分,但是无论设置如何, 你都得脚踩刹车板来停车, 同样的接口能被用来控制许多不同的实现过程。

通过封装、继承及多态性原理,各个独立部分组成了汽车这个对象。这在计算机程序设计中也是一样的。通过面向对象原则的使用,可以把程序的各个复杂部分组合成一个一致的、健壮的、可维护的程序整体。

results matching ""

    No results matching ""