Java编程详解(微课版)
上QQ阅读APP看书,第一时间看更新

2.1 面向对象的概念

2.1.1 从结构化程序设计到面向对象程序设计

面向对象类和对象的介绍

面向对象程序设计与结构化程序设计都是设计和构造程序的方法。近年来,面向对象程序设计的方法越来越受到人们的重视,已成为解决软件危机的新途径,而结构化程序设计方法的使用在逐渐减少。几乎每一种最新推出的程序开发工具或语言都采用了面向对象程序设计的思路,面向对象程序设计形成了一套与结构化程序设计具有很大差异的方法。

结构化程序设计方法又称面向过程设计方法,起源于20世纪70年代。在这之前的程序设计基本采用过程式程序设计,虽然汇编语言已经取代了机器语言,但是对于一般的程序设计人员而言,它还是太抽象、太隐晦。如果计算机要得到更大的发展,必须发明一些比汇编语言更易于阅读和编写的程序语言。在这种需求的刺激下,结构化程序设计方式产生了结构化程序设计,主要特点是采用自顶向下逐步求解的程序设计方法:使用3种基本控制结构构造程序,任何程序都可由顺序、选择、重复3种基本控制结构构造。结构化设计的根本目标就是把复杂的系统分解成简单模块的层次结构。例如装修房子,以前的过程式程序设计要求必须从客厅开始装修,然后是卧室、厨房、卫生间,顺序不能颠倒;而结构化程序设计方式将客厅、卧室、卫生间、厨房分别独立成一个模块,互相之间可以互不干扰地逐个进行。

虽然结构化程序设计解决了软件设计开发中的一部分问题,但是它仍然存在不足。用结构化方法开发的软件,稳定性、可修改性和可重用性都比较差,这是因为结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,这样一层一层分解下去,直到仅剩下若干个容易实现的子处理功能,再用相应的工具来实现各个最底层的功能。因此,结构化方法是围绕实现处理功能的“过程”来构造系统的。然而,用户需求的变化大部分是针对功能的,因此,这种变化对于基于过程的设计来说是灾难性的。用这种方法设计出来的系统结构常常是不稳定的,用户需求的变化往往会造成系统结构的较大变化,从而需要花费很大的代价才能实现这种变化。

结构化程序设计的局限性催生了面向对象的思想。面向对象(Object Oriented,OO)并不是一个新概念,它在20世纪70年代就出现了,因为受到软/硬件的限制,直到20世纪90年代才为大众所接受,并成为程序设计的主流思想。面向对象的方法与结构化程序设计的根本区别在于把系统看成一个完成某项任务的对象集合,对象是系统对消息做出响应的事物,所以面向对象方法中关注的不是它应该做什么,而是它如何做出反应,也就是消息。

在面向对象设计思想的指导下,产生了第一个面向对象的语言——20世纪60年代的Simula-67。它的作用是解决模拟问题。典型应用是模拟银行系统的运作(银行是最早采用计算机的行业之一),将银行的出纳部门、客户、业务等实体模拟成一个个对象,把这些程序的运行中除了状态外其他方面都一样的对象归纳在一起,就成了更高抽象层面的“类”。然后,在面向对象的思想指导下产生了成功的面向对象编程语言——Smalltalk,并在其基础上诞生了应用更加广泛的面向对象编程语言——C++及Java。

2.1.2 面向对象的特征

1.对象唯一性

每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。

2.抽象性

抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样的一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

3.封装性

封装性就是把对象的属性和服务结合成一个独立的单位,并尽可能隐蔽对象的内部细节。

4.继承性

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础上进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象程序设计语言不同于其他语言的最重要的特点,是其他语言所没有的。

5.多态性

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象收到同一消息可以产生不同的结果,这种现象称为多态性。