面向对象的程序设计方法继承了结构化程序设计方法的优点,同时又比较有效地克服了结构化程序设计的弱点。
面向对象的程序设计思路更接近于真实世界。真实世界是由各类不同的事物组成的,每一类事物都有共同的特点,各个事物互相作用构成了多彩的世界。例如,“人”是一类事物,“动物”也是一类事物;人可以饲养动物、猎杀动物;动物有时也攻击人……
面向对象的程序设计方法要分析待解决的问题中有哪些类事物,每类事物都有哪些特点,不同的事物种类之间是什么关系,事物之间如何相互作用等,这跟结构化程序设计考虑如何将问题分解成一个个子问题的思路完全不同。
面向对象的程序设计有“抽象”、“封装”、“继承”、“多态”四个基本特点。
在面向对象的程序设计方法中,各种事物称为“对象”。将同一类事物的共同特点概括出来,这个过程就叫作“抽象”。
对象的特点包括两个方面:属性和方法。属性指的是对象的静态特征,如员工的姓名、职位、薪水等,可以用变量表示;方法指的是对象的行为,以及能对对象进行的操作,如员工可以请假、加班,员工可以被提拔、被加薪等,可以用函数表示。
方法可以对属性进行操作,如加薪“方法”会修改“薪水”属性,“提拔”方法会修改“职位”属性。
在完成抽象后,通过某种语法形式,将数据(即属性)和用以操作数据的算法(即方法)捆绑在一起,在形式上写成一个整体,即“类”,这个过程就叫作“封装”。
通过封装,数据和操作数据的算法紧密联系起来。
通过封装,还可以将对象的一部分属性和方法隐藏起来,让这部分属性和方法对外不可见,而留下另一些属性和方法对外可见,作为对对象进行操作的接口。这样就能合理安排数据的可访问范围,减少程序不同部分之间的耦合度,从而提高代码扩充、代码修改、代码重用的效率。
以现有代码为基础方便地扩充出新的功能和特性,是所有软件开发者的需求。结构化的程序设计语言对此没有特殊支持。而面向对象的程序设计语言通过引入“继承”机制,较好地满足了开发者的需求。
所谓“继承”,就是在编写一个“类”的时候,以现有的类作为基础,使得新类从现有的类“派生”而来,从而达到代码扩充和代码重用的目的。
“多态”则是指不同种类的对象都具有名称相同的行为,而具体行为的实现方式却有所不同。例如,游戏中的弓箭手和刀斧手都有名为“攻击”的方法,但是两者的实现方式不同,前者是通过射箭实现攻击,后者则是通过劈砍实现攻击。
在面向对象的程序设计方法中,沃斯教授的公式需要修改了,应该变成:
对于面向对象的程序设计方法来说,设计程序的过程就是设计类的过程。面向对象的程序模式如下图所示,class 即代表“类”。
需要指出的是,面向对象的程序设计方法也离不开结构化的程序设计思想。编写一个类内部的代码时,还是要用结构化的设计方式。
而且,面向对象程序设计方法的先进性主要体现在编写比较复杂的程序时。编写一个百十行的简单程序,并不一定要用面向对象的设计方法。本来写几个函数就能解决的问题,一定要使用“抽象”、“封装”、“继承”、“多态”等机制,只会使事情变得更加复杂。