编程范式思维

488 阅读3分钟

程序设计有一个范式问题:就是组织程序的基本思想。它反映了程序设计者对程序的一个基本的哲学观,也就是说,他认为程序的本质是什么,他认为一个大的程序是由什么组成的。

范式目前有三种:过程范式、函数范式、对象范式。


  1. 过程范式认为,程序是由一个个过程经过顺序、选择和循环的结构组合而成。反映在现实世界,过程范式体现了劳动分工之前“大包大揽”的工作特点—能胜任所有事情,拥有所有的资源,高度集中在这个“人”身上,只不过具体的事情得一步步地有顺序来处理。
  2. 对象范式反映了劳动分工之后的团队协作的工作特点–每个人各司其职,各有所长,各自拥有私有资源,工件和信息彼此传递,最后完成工作。因此,对象范式也就形成了自己对程序的看法—程序是由一组对象组成,这些对象各有所能,通过消息传递实现协作。

后者较前者具有3个优势:

  1. 由于实现了逻辑分工,降低了大规模程序的开发难度。
  2. 灵活性更好–若干对象在一起,可以灵活组合,可以以不同的方式协作,完成不同的任务,也可以灵活的替换和升级。
  3. 对象范式更加适合图形化、网络化、消息驱动的现代计算环境。

对象范式的两大基本观念:

  • 程序是由对象组成的。
  • 对象之间互相发送消息,协作完成任务。

为了方便对象的构造,引入了类、继承等概念。 smalltalk构造了更灵活和纯粹的消息发送机制。

它实现了一个与目标对象无关的消息发机制,不管那个对象是谁,也不管他是不是能正确的处理一个消息,作为发送消息的对象来说,可以毫无顾忌的抓住一个对象就发送消息过去。接到消息的对象,要尝试理解这个消息,并最后调用自己的处理过程来处理消息。如果这个消息能被处理,那个对象自然会处理,如果不能处理,Smalltalk系统会向消息的发送者回传一个doesNotUnderstand消息,予以通知。对象不用关心消息是如何传递格给一个对象的,传递过程被分离出来(而不是向Simula那样明确地以成员函数调用的方式实现),可以是在内存中复制,也可以是进程间通讯。到了Smalktalk-80,消息传递甚至可以跨越网络。

不妨把源自Smalktalk的消息机制称为“动态消息机制”。

把源自Simula的消息机制称为“静态消息机制”。

对于消息转发机制的不同选择,主要是因为用途。Simula用于仿真程序开发,smalltalk用于图形界面环境构建。

到了1980年代,C出现了。Bjarne Stroustrup在博士期间深入研究Simula,于是在C语言基础上,几乎把Simula思想照搬过来,形成了最初的C。 大约在同期,Brad Cox根据Smalltalk的思想设计了Objective-C,可是由于其语法怪异,没有流行起来。只有Steve Jobs这种具有禅宗美学鉴赏力的世外高人,于1988年把Objective-C的团队和产品一口气买了下来。