4.1 两种思维方式
人们起初使用计算机来进行科学计算,比如说:计算级数和,计算积分值。那时,程序要处理的都是带小数点的数字。后来,人们要处理文本,有点麻烦,好在文字也可以转换成数字。这两个时期,编写程序的思想是:一个步骤,一个步骤地告诉计算机如何做,做完一大段步骤,就算完成了一个功能模块。
再后来,人们希望计算机能应用在管理中。比如说:机场管理。一个大都市的民航机场,每天有上千架飞机起落,乘客上万,行李、包裹无数,乘务、地勤人员上千,安检信息上万,气象信息上万……这样百万、千万的数据要及时处理,靠旧的编程思维是无法实现的。
为了应付越来越复杂的管理应用,人们转变编写程序的思想:
(1). 将一架飞机看作飞机类事物的一个具体实例,将一座塔台看作塔台类事物的一个具体实例,将一名乘客看作乘客类事物的一个具体实例……
(2). 一个具体实例有变化的时候,就自己主动传递消息给相关联的具体实例;
(3). 相关联的具体实例收到消息后,根据之前定好的策略,作出应有的反应(回应,转发……)。
初期的编程思想是:以“如何做”为指导来编写代码。这时期的编程语言叫过程语言,提倡结构化地设计程序代码。代表语言是FORTRAN和C。
现在的编程思想是:以“谁将被影响”为指导来编写代码。叫面向对象的编程语言,以类为模块,以消息来驱动程序的执行。代表语言是C++ 和Java。
4.2 对象
英文Object ,计算机业界现在已经习惯翻译为“对象”;口语化一些,中文的意思就是“事物”。
“事物”这个词有点抽象,你当然可以具体到人,或是具体到交通工具。人可以再具体一些,学生?工人?如果是学生,叫什么名字?
每个事物都有一些特点,人有身高,体重,在程序中我们称之为属性;还可以有一些行为,人要吃饭,睡觉,在程序中我们称之为方法。
学生是人,自然有身高,体重,自然要吃饭,睡觉。如果你把人看作一类事物,把学生看作一类事物;那么,人是父类型,学生是子类型。子类型从父类型自然得到属性、方法,我们称之为继承。
学生要考试,工人不要;工人拿工资,学生不拿(一般而言)。同一个父类,不同的子类有不同的行为和状态,我们称之为多态。
人们编写程序,也就是在描述一类事物的特点(属性)、行为(方法)。有时候是模拟描述自然界中已有的一类事物,还有时候是创造地描述自然界中没有的一类事物。
当人们决定了代码世界中一类事物的属性、方法,在代码世界中,这类事物的属性、方法只有定义代码的人知道,其它的类是不知道的。这就是封装。
封装、继承、多态是面向对象编程的三个本质特征。
(人们可以决定代码世界中一类事物的属性、方法,当然可以修改代码世界中一类事物的属性、方法,而且可以委托其它的类来修改,甚至删除。这是动态语言超越静态语言之处。由于代码是一直运行着,与其它代码一直交互着,修改、删除应该慎重,避免产生副作用)。
完整阅读,请看我写的 Ruby语言中文教程all in one