第0篇 面向对象思想
一 面向对象思想的起源
面向对象(Object-Oriented)思想最初起源于20世纪60年代末的simula67语言。面向对象方法的基本要点首次在simula语言中得到了表达和实现。80年代,位于美国加州的Xerox研究中心推出smalltalk语言及其程序设计环境,使得面向对象程序设计方法得到比较完善的实现,掀起了面向对象研究的高潮。到80年代中后期,面向对象的软件设计和程序设计方法已发展成为一种成熟有效的软件开发方法。
伴随着面向对象思想的不断升华,作为思想的产物,面向对象编程语言也不断发展。
1972年贝尔实验室的科学家Dennis MacAlistair Ritchie(D.M.Ritchie - DM里奇)在B的基础上设计出了C语言,这是一门面向过程的高级语言,它曾经纵横四海,直到如今各大编程语言争夺市场,她的影响力也从未消减。1983 年,依旧是贝尔实验室的人,Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 在C语言的基础上推出了C++,它扩充和完善了C语言,使得C++可以以面向对象的方式编程。1995 年,Sun公司的Patrick Naughton的工作小组研发了一门完全面向对象开发的语言,这门语言的取名和logo灵感来自爪哇岛上一种美味的咖啡,是的,她的名字是java,她的logo是一杯热气腾腾的咖啡,她的编程思想是如此善解人意,使得无数程序员为之倾心。微软也逐渐意识到,万物皆为对象是多么美妙的哲学思想, 2000 年,微软公司的Anders Hejlsberg(安德斯·海尔斯伯格)研发了C++++语言,完全面向对象,四个加号这么难看的名字配不上她的气质,于是我们把加号放在一块,没错,就是传说中的C#语言。
“面向对象”是针对“面向过程”一词提出的,是从本质上区别于传统的结构化方法的一种新方法,新思路。
面向对象技术的基本原理是:按照问题域的基本事物实现自然分割,按人们通常的思维方式建立问题域的模型,设计尽可能直接自然表现问题求解的软件系统。
为此,面向对象技术引入了对象(object)概念来表现事物,用消息(message)传递建立事物间的联系。用类(class)和继承(inheritance)作为适应人们一般思维方式的描述模型。用方法(method)表示作用在对象上的各种操作。
二 面向过程与面向对象
用一个例子来说明两者在解决一个实际问题时候的区别,问题:用编程实现小明骑车去图书馆借《红楼梦》,再回家看书的业务。
面向过程的方式:分几个步骤完成业务,1 小明骑车去图书馆 2 小明借书 3小明骑车回家 4小明看书
面向对象的方式:创建类People ,带有姓名属性和三个方法:骑车(string 目的地);借书(string 书名);看书(string 书名)。之后就完成业务功能就清晰明朗了:
People p = new People(); p.姓名=“小明”; p.骑车(“图书馆”); p.借书(“红楼梦”); p.骑车(“家”); p.看书(“红楼梦”); |
分析:从上面事例中可以看出面向过程的结构化分析与面向对象的分析方式有着明显的不同,面向过程将整个业务分解为一个个具体的动作细节,而面向对象将事物属性与功能抽象成对象,再调用对象相应的功能去完成业务需求。粗一看上去感觉面向对象似乎让编程更加复杂了,因为在这个问题实现上它做了更多的处理。其实不然,当我们面临一个庞大的项目,面临更为复杂多变的业务需求时,就能感受到面向对象真正的强大。
面向过程的劣势
面向过程的设计和人的自然思维很不一致,因此对现实世界的认识与编程之间无法形成和谐的统一性。系统围绕着如何实现一定的行为来进行,当系统行为易变,需要常常修改时,修改极为困难。而造成这种情况的原因,一是在系统中模块之间的控制作用有重要影响时,由的模块间的控制作用只能通过上下之间的调用关系来进行,造成信息传递路径过长,效率低,易受干扰,甚至出错。另外,自顶向下功能分解的分析方法极大地限制了软件的可重用性。
面向对象的思维
用面向对象的思维去思考问题。当我们要完成某一件事情,我们并不一定要自己学会十八般武艺,再去把问题解决。正确的做法应该是根据对应的事情找到已经学会了处理此事情的对象,让这个对象去处理。
所以说面向对象处理的逻辑就是有事找已有对象,找不到创造新对象(类)。
三 面向对象哲学
有部电影叫《黑客帝国》。电影中的程序世界里,每个事物都是代码中的对象,大到宇宙恒星,小到微观原子,凡是可以被描述的,或者凡是有独立功能的,又或者凡是可以与外物交流的,都可以在编程中抽象为对象。唯物主义认为世界的本源是物质,精神是物质的产物和反映。因此,事无大小不可抽象,物无宏微不是对象。
面向对象的思想也是管理的思想,人尽其用,物尽其材,不过是合理调用了对象方法。空旷纳百川,哺育孕星际;一花一世界,一叶一菩提。大千世界,芸芸众生之间,你我何尝不是对象,配好属性,学些方便为人调用的方法。