面向对象之个人见解
星期三听了大家的讨论,让我对面向对象的概念有的更深刻的认识。但也有不同的想法,从低级语言到高级语言的变化是适应“懒人”的需求的,每一种语言的出现必须就有新技术的加入,要不就没有什么实际意义。面向对象语言出现是在面向对象这种技术的支撑下出现的。机器语言难读难懂,出现了汇编语言,汇编语言比机器语言更容易理解,但是可扩展性移植性很差,各种指令不符合人们的生活习惯,于是出现了高级语言c、pascal、fortran等,让程序员以接近问题本质的方式去思考和描述问题。随着软件规模的扩大,维护成本的增加,软件危机的出现,人们开始寻找新的思维方式,于是面向对象技术出现了,相关的语言有c++、Delphi、 java 、ruby等。
我把我想要说的总结为以下三点:
第一点:面向对象技术是未来的趋势,是对事物认知的一种方式。
在think in java的第二章说Everything is an Object,即万物皆对象。从细小的分子到巨大的天体这些实物,到人的思想、感情、态度这些无形的东西,都是对象,是人对客观世界的认知。我认为这是最基本的,如果不能理解,就无法再继续进行下去了。
第二点:无论是静止的还是运动的对象,都具有属性和方法。如果说那个对象没有方法或属性,那是因为你没用到或者没发现。曾经听一个老师说,对象是对客观事物的认识,类是对对象的抽象,而接口是对对象的二次抽象。那天在讨论中,做c++的好像不怎么同意这个观点,说黑板擦就没行为。后来想想也许跟具体的语言有关,毕竟c++和java还是有区别的,java是全面向对象的语言,而c++是c的变种,不是完全的面向对象语言(说的不太正确,java的老本还是c呢 ,呵呵~)。
最近看了《超越java---探讨程序设计语言的未来》英文《Beyond java》一书,让我更深刻了解程序设计的过去、现在和未来。讲了c++,java各自的优劣,并讨论了ruby的设计思想及其它的框架ruby on rails。分析了当今的主要流行语言,说面向对象是当今主导的技术,但并不代表着未来不会不回归到面向过程的编程当中去。于是产生了我自己的观点
第三点:不论面向对象还是面向过程,适合实际开发的需要就行。这点在那天的讨论中很明确,刘刚也讲的很清楚。
还有一点我有不同的看法,我对多态的理解是这样的,多态即多种表态,同一种事物在不同坏境下的不同形态。在java中分方法的重写Overriding和重载Overloading两种。记得老师曾经是这么举例的,说你小的时候你没见过马,也没听说过马,不知道马这个动物的概念,有一天你爸爸牵了一匹马来,你爸爸让你去喂马,你不知道用什么喂,你喂过狗,所以你就拿个骨头去喂了,你对着马说马你吃你吃啊,它怎么都不会吃,你也见过牛也喂过牛,你尝试着拿青草去,对着马说你吃吃啊,它就吃了,你很疑惑不是!其实这就是多态。你并不知道它是马,你把它当狗看了,所以你喂骨头,但是它并不吃骨头(它没有吃骨头的方法,你调不了),你把它当牛看了,你喂它草,它吃了(是它有吃草的这个方法给你调)。具这个例子的目的是说,多态重在看待事物的形态,而不在说它调什么方法做出的反应。