编程范式 浅析

编程范式(Programming Paradigm)是某种编程语言典型的编程风格或者说是编程方式。随着编程方法学和软件工程研究的深刻,特别是OO思想的普及,范式(Paradigm)以及编程范式等术语渐渐出如今人们面前。面向对象编程(OOP)经常被誉为是一种革命性的思想,正由于它不一样于其余的各类编程范式。编程范式也许是学习任何一门编程语言时要理解的最重要的术语。程序员

托马斯.库恩提出“科学的革命”的范式论以后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词。编程范式通常包括三个方面,以OOP为例:算法

  1. 学科的逻辑体系——规则范式:如类/对象、继承、动态绑定、方法改写、对象替换等等机制。
  2. 心理认知因素——心理范式:按照面向对象编程之父Alan Kay的观点,“计算就是模拟”。OO范式极其重视隐喻(metaphor)的价值,经过拟人化,按照天然的方式模拟天然。
  3. 天然观/世界观——观念范式:强调程序的组织技术,视程序为松散耦合的对象/类的集合,以继承机制将类组织成一个层次结构,把程序运行视为相互服务的对象们之间的对话。

简单的说,编程范式是程序员看待程序应该具备的观点。编程

为了进一步加深对编程范式的认识,这里介绍几种最多见的编程范式。 设计模式

须要再次提醒注意的是:编程范式是编程语言的一种分类方式,它并不针对某种编程语言。就编程语言而言,一种编程语言也能够适用多种编程范式。 架构

过程化(命令式)编程 

过程化编程,也被称为命令式编程,应该是最原始的、也是咱们最熟悉的一种传统的编程方式。从本质上讲,它是“冯.诺伊曼机“运行机制的抽象,它的编程思惟方式源于计算机指令的顺序排列。编程语言

(也就是说:过程化语言模拟的是计算机机器的系统结构,而并非基于语言的使用者的我的能力和倾向。这一点咱们应该都很清楚,好比:咱们最先曾经使用过的单片机的汇编语言。)函数式编程

过程化编程的步骤是:函数

首先,咱们必须将待解问题的解决方案抽象为一系列概念化的步骤。而后经过编程的方式将这些步骤转化为程序指令集(算法),而这些指令按照必定的顺序排列,用来讲明如何执行一个任务或解决一个问题。这就意味着,程序员必需要知道程序要完成什么,而且告诉计算机如何来进行所需的计算工做,包括每一个细节操做。简言之,就是将计算机看做一个有始有终服从命令的装置。学习

因此在过程化编程中,把待解问题规范化、抽象为某种算法是解决问题的关键步骤。其次,才是编写具体算法和完成相应的算法实现问题的正确解决。固然,程序员对待解问题的抽象能力也是很是重要的因素,但这自己已经与编程语言无关了。.net

 程序流程图是过程化语言进行程序编写的有效辅助手段。 

尽管现存的计算机编程语言不少,可是人们把全部支持过程化编程范式的编程语言都被概括为过程化编程语言。例如机器语言、汇编语言、BASIC、COBOL、C 、FORTRAN、语言等等许多第三代编程语言都被概括为过程化语言。 

过程化语言特别适合解决线性(或者说循序渐进)的算法问题。它强调“自上而下(自顶向下)”“精益求精”的设计方式。这种方式很是相似咱们的工做和生活方式,由于咱们的平常活动都是循序渐进的顺序进行的。 

 过程化语言趋向于开发运行较快且对系统资源利用率较高的程序。过程化语言很是的灵活并强大,同时有许多经典应用范例,这使得程序员能够用它来解决多种问题。 

过程化语言的不足之处就是它不适合某些种类问题的解决,例如那些非结构化的具备复杂算法的问题。问题出如今,过程化语言必须对一个算法加以详尽的说明,而且其中还要包括执行这些指令或语句的顺序。实际上,给那些非结构化的具备复杂算法的问题给出详尽的算法是极其困难的。 

普遍引发争议和讨论的地方是:无条件分支,或goto语句,它是大多数过程式编程语言的组成部分,反对者声称:goto语句可能被无限地滥用;它给程序设计提供了制造混 乱的机会。目前达成的共识是将它保留在大多数语言中,对于它所具备的危险性,应该经过程序设计的规定将其最小化。 

事件驱动编程 

其实,基于事件驱动的程序设计在图形用户界面(GUI)出现好久前就已经被应用于程序设计中,但是只有当图形用户界面普遍流行时,它才逐渐形演变为一种普遍使用的程序设计模式。 

在过程式的程序设计中,代码自己就给出了程序执行的顺序,尽管执行顺序可能会受到程序输入数据的影响。

在事件驱动的程序设计中,程序中的许多部分可能在彻底不可预料的时刻被执行。每每这些程序的执行是由用户与正在执行的程序的互动激发所致。 

  • 事件。就是通知某个特定的事情已经发生(事件发生具备随机性)。 
  • 事件与轮询。轮询的行为是不断地观察和判断,是一种无休止的行为方式。而事件是静静地等待事情的发生。事实上,在Windows出现以前,采用鼠标输入字符模式的PC应用程序必须进行串行轮询,并以这种方式来查询和响应不一样的用户操作。 
  • 事件处理器。是对事件作出响应时所执行的一段程序代码。事件处理器使得程序可以对于用户的行为作出反映。 

事件驱动经常用于用户与程序的交互,经过图形用户接口(鼠标、键盘、触摸板)进行交互式的互动。固然,也能够用于异常的处理和响应用户自定义的事件等等。

事件的异常处理比用户交互更复杂。 

事件驱动不只仅局限在GUI编程应用。可是实现事件驱动咱们还须要考虑更多的实际问题,如:事件定义、事件触发、事件转化、事件合并、事件排队、事件分派、事件处理、事 件连带等等。

其实,到目前为止,咱们尚未找到有关纯事件驱动编程的语言和相似的开发环境。全部关于事件驱动的资料都是基于GUI事件的。 

属于事件驱动的编程语言有:VB、C#、Java(Java Swing的GUI)等。它们所涉及的事件绝大多数都是GUI事件。 

面向对象编程 

过程化范式要求程序员用循序渐进的算法看待每一个问题。很显然,并非每一个问题都适合这种过程化的思惟方式。这也就致使了其它程序设计范式出现,包括咱们如今介绍的面向对象的程序设计范式。 

面向对象的程序设计模式已经出现二十多年,通过这些年的发展,它的设计思想和设计模式已经稳定的进入编程语言的主流。来自TIOBE Programming Community2010年11月份编程语言排名的前三名Java、C、C++中,Java和C++都是面向对象的编程语言。 

面向对象的程序设计包括了三个基本概念:封装性、继承性、多态性。面向对象的程序语言经过类、方法、对象和消息传递,来支持面向对象的程序设计范式。 

1. 对象

世间万事万物都是对象。

面向对象的程序设计的抽象机制是将待解问题抽象为面向对象的程序中的对象。利用封装使每一个对象都拥有个体的身份。程序即是成堆的对象,彼此经过消息的传递,请求其它对象 进行工做。 

2. 类

每一个对象都是其类中的一个实体。

物以类聚——就是说明:类是类似对象的集合。类中的对象能够接受相同的消息。换句话说:类包含和描述了“具备共同特性(数据元素)和共同行为(功能)”的一组对象。

好比:苹果、梨、橘子等等对象都属于水果类。 

3. 封装

封装(有时也被称为信息隐藏)就是把数据和行为结合在一个包中,并对对象的使用者隐藏数据的实现过程。信息隐藏是面向对象编程的基本原则,而封装是实现这一原则的一种方 式。

封装使对象呈现出“黑盒子”特性,这是对象再利用和实现可靠性的关键步骤。 

4. 接口

每一个对象都有接口。接口不是类,而是对符合接口需求的类所做的一套规范。接口说明类应该作什么但不指定如何做的方法。一个类能够有一个或多个接口。 

5. 方法

方法决定了某个对象究竟可以接受什么样的消息。面向对象的设计有时也会简单地概括为“将消息发送给对象”。 

6. 继承

继承的思想就是容许在已存在类的基础上构建新的类。一个子类可以继承父类的全部成员,包括属性和方法。

继承的主要做用:经过实现继承完成代码重用;经过接口继承完成代码被重用。继承是一种规范的技巧,而不是一种实现的技巧。 

7. 多态

多态提供了“接口与实现分离”。多态不但能改善程序的组织架构及可读性,更利于开发出“可扩充”的程序。

继承是多态的基础。多态是继承的目的。

合理的运用基于类继承的多态、基于接口继承的多态和基于模版的多态,能加强程序的简洁性、灵活性、可维护性、可重用性和可扩展性。

面向对象技术一方面借鉴了哲学、心理学、生物学的思考方式,另外一方面,它是创建在其余编程技术之上的,是之前的编程思想的天然产物。

若是说结构化软件设计是将函数式编程技术应用到命令式语言中进行程序设计,面向对象编程不过是将函数式模型应用到命令式程序中的另外一途径,此时,模块进步为对象,过程龟缩到class的成员方法中。OOP的不少技术——抽象数据类型、信息隐藏、接口与实现分离、对象生成功能、消息传递机制等等,不少东西就是结构化软件设计所拥有的、或者在其余编程语言中单独出现。但只有在面向对象语言中,他们才共同出现,以一种独特的合做方式互相协做、互相补充。

 

 

参考连接:http://www.nowamagic.net/librarys/veda/detail/2488

相关文章
相关标签/搜索