2.1 面向对象程序设计
在整个世界中,所有的事物和发生的事件都可以抽象为“对象”,因此世界是由对象组成的。每一个对象都具有其自身的属性、特征和行为方式,区别在于属性和特征的不同,以及一些对象的行为较另一些对象更为活跃而已,所以可以将不同的对象划分成各种“类”描述。类是由其属性和行为方式构成的,因此,对于编程人员而言,类中定义的数据则是对象的属性(特征或特性),而方法(函数)或过程则是描述对象的行为。
面向对象程序设计(OOP)是把一个对象的特征及其行为封装到单独的源代码中,于是特征和行为在物理上(在同一个代码块中)和概念上(在一个对象中)都集中到一个地方,这样比把方法或过程与数据分散开来更为方便和安全,其含义更明确。OOP的基本成分包括:类、类的继承、对象、方法等。Java语言面向对象程序设计的核心就是构造类,确定类的属性以及编写类中的操作方法。
2.1.1 面向对象的程序设计方法
对于软件开发人员而言,早期的面向过程的程序设计方法是将整个应用软件系统进行模块的分解和功能的抽象,将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子程序,即根据处理任务确定的各模块数学模型编写处理函数,但是,随着计算机科学的发展和应用领域的扩大,对计算机技术的要求越来越高,面向过程的程序设计语言和结构化分析与设计已无法满足软件系统的设计要求,因为面向过程的程序设计语言不支持代码的重用,缺乏统一的接口规范等。另外,在软件设计和开发过程中,常会遇到软件使用者不断提出各种更改设计及使用要求的问题,使得软件开发人员不得不对软件进行修改,这将导致软件开发进度放慢、开发成本增加,同时还会伴有软件模块结构的合理性、模块间界面的复杂性、修改和扩充程序的灵活性等问题,应用程序规模达到一定程度时,程序员很难控制其复杂性。在应用软件投入使用后,为了排除在设计和开发过程中遗留下来的错误或缺陷、改进软件的性能、增强软件的功能,都需要对软件进行修改,而修改有可能出现旧的错误没有彻底纠正,又产生了新的错误,从而导致软件质量下降及使用寿命缩短等问题。针对以上问题,软件设计人员开始尝试使用面向对象的程序设计方法,根据该方法出现了许多面向对象程序设计语言,例如Java语言。
面向对象的程序设计方法是将应用软件的系统结构建立在现实世界中的实体或对象的基础上的,由于软件使用者提出的修改要求大多是功能上的,所面对的对象基本上是不动的,因此软件功能被分散到了各个对象中。对于使用面向对象技术开发出来的软件,软件修改主要集中于封装在软件对象内部的属性和服务上,只要对象界面(接口)不动,整个软件的体系结构是可以不动的,这种修改的局部化保持了软件结构的稳定性,使得在修改过程中引入新错误的可能性最小,同时也减轻了软件修改的工作量和难度。
面向对象的程序设计方法是按照现实世界的特点管理复杂的事物,把它们抽象为对象,通过对它们所具有的属性(状态)和行为的描述,以及使用统一的接口实现整体软件的功能。面向对象程序设计语言是根据面向对象程序设计方法创建的,支持代码的重用,具有统一的接口规范等,简化了应用软件的设计和开发。
2.1.2 Java面向对象程序设计
如同“面向对象”这个名称中所隐含的,对象是理解面向对象技术的关键,有很多现实世界中的对象,例如动物、植物、电视机、自行车以及数学方程式等。这些现实世界中的对象有两个相同的特征,即状态和行为。例如动物有状态(名字、颜色、种类等)和行为(跑、叫、吃、生长等);自行车有状态(两个轮子、车架、车把等)和行为(行驶、刹车、加速、减慢等)。
面向对象就是使用“软件对象”表示现实世界中的对象,即表示现实世界中对象的抽象概念,软件对象是以现实世界中的对象为模型描述它们的状态和行为的。
软件对象的描述是使用数据常量和变量描述现实对象的状态,对象的行为是通过表达式、流控制结构等实现的数学模型描述的,在Java语言体系中被称为“方法(method)”,在其他语言中被称为“函数(function)”。例如,人-机交互对话框窗口是一个软件对象,对话框的形状、要求输入的参数等表示对象的状态,在对象中发生的事件,即用户在对话框中输入文字、选择一个选项或者单击鼠标,则表示了发生在该对象上的行为。
从软件编写程序人员的角度看,对于面向对象编程,数据常量或变量是对象的状态(对象所具有的属性、特征或特性),而处理数据的过程或通过数学模型描述对象的方法则是它的行为。
在面向对象编程技术中,把数据及与对象相关的变量和处理数据的操作及方法放在一起则被称为“封装”,它是面向对象的程序设计中最重要的一点。封装为软件开发者提供了两个好处:其一是模块化,一个对象的源代码可以独立的编写和维护,同时,对象也可以容易地在系统中传送;其二是信息的隐藏,在一个对象内部可以通过定义数据和方法的属性,例如public(公共)、private(私有),确定对象中哪些是开放的,哪些是隐藏的,一个对象无法操作另一个对象中隐藏的内容。
Java语言是一种纯粹的面向对象的程序设计语言,定义Java类的规则充分体现了“封装”的特性,面向对象编程技术强调的代码重用则体现在Java类的继承性上。除此之外,该语言还具有多态和动态等面向对象编程技术的特性。
对于单一对象而言,对象本身是没有什么大的用处的,它通常是作为包含很多对象的更大的程序或应用程序的一个组件而存在的,通过这些对象的交互作用,可以得到更高级别的功能和更复杂的行为,而Java的统一接口规范就起到了对象之间进行交互和沟通的作用,通过它可以指定(调用)每个对象所要做的事情。