编程范式,程序员的编程世界观

简介: 编程范式,程序员的编程世界观  编程范式的重要性 在 2013年06月17日 那天写的     已经有 14796 次阅读了 感谢 参考或原文   服务器君一共花费了19.580 ms进行了2次数据库查询,努力地为您提供了这个页面。

编程范式,程序员的编程世界观

 编程范式的重要性

服务器君一共花费了19.580 ms进行了2次数据库查询,努力地为您提供了这个页面。
 
试试阅读模式?希望听取您的建议  
 

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

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

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

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

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

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

过程化(命令式)编程 

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

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

过程化编程的步骤是:

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

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

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

尽管现存的计算机编程语言很多,但是人们把所有支持过程化编程范式的编程语言都被归纳为过程化编程语言。例如机器语言、汇编语言、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的很多技术——抽象数据类型、信息隐藏、接口与实现分离、对象生成功能、消息传递机制等等,很多东西就是结构化软件设计所拥有的、或者在其他编程语言中单独出现。但只有在面向对象语言中,他们才共同出现,以一种独特的合作方式互相协作、互相补充。

目录
相关文章
|
15天前
|
开发者
从代码到哲学:编程中的思考与启示
【10月更文挑战第34天】在数字世界的编织中,每一行代码都蕴含着深邃的逻辑与创造的火花。本文通过探索编程的本质、代码与生活的关联、以及技术发展带来的社会影响,揭示编程不仅仅是技术的堆砌,更是人类智慧与哲学思考的体现。我们将一起走进代码的世界,发现那些隐藏在逻辑背后的哲理与人生启示。
|
1月前
|
算法
从代码到哲学:编程中的人生启示
【9月更文挑战第35天】在代码的世界中,我们不仅是在编写程序,更是在书写生活。每一行代码都蕴含着逻辑与美,每一个算法都承载着智慧与挑战。本文将通过编程的视角,探讨人生的意义、选择的重要性以及面对困难的态度,带你领略技术背后的深刻哲理。
|
14天前
从代码到哲学:编程中的思维模型与生活智慧
【10月更文挑战第35天】在编程的世界里,代码是构建数字宇宙的基石。本文将通过浅显的语言和实际代码示例,探讨编程思维如何影响我们的日常生活决策,并揭示技术背后的哲学思考。我们将一起探索代码的逻辑结构如何映射到生活的选择中,以及如何通过编程提升问题解决的能力。
27 2
|
1月前
|
算法 JavaScript 前端开发
程序员需要掌握的 5种编程范式!
本文介绍了编程范式的基本概念及其重要性,详细解析了命令式编程与声明式编程两种主要范式。命令式编程包括面向过程与面向对象编程,强调逐步执行与模块化;声明式编程涵盖函数式、逻辑及响应式编程,注重描述目标而非具体步骤。通过对比各种范式的优缺点及示例代码,帮助读者理解不同场景下的适用性。
33 2
|
1月前
|
算法 程序员
从代码到哲学:编程中的启示与人生思考
在编写代码的过程中,我们不仅构建程序,也在无形中编织着生活的哲理。每一行代码都像是生命中的一步,它们共同构成了复杂而精彩的生命之旅。本文将从编程的角度出发,探讨技术实践中的深刻启示,以及这些启示如何影响我们对生活、工作和自我成长的理解。
|
4月前
|
算法 程序员
代码之美:我的编程哲学
【7月更文挑战第31天】在数字世界的构建中,编程不仅仅是一项技术活动,它更是一种艺术,一种哲学。本文将通过个人的技术感悟,探讨如何将编程艺术化、哲学化,以及这种转变如何影响我们的思维方式和解决问题的策略。
|
3月前
|
机器学习/深度学习 前端开发 小程序
探索编程世界的奥秘
本文旨在通过个人经验分享,探讨编程学习过程中遇到的常见问题及解决策略。内容涵盖编程基础概念的建立、语言选择的建议、实践与理论的结合、以及持续学习的重要性。文章意在为初学者提供实用的建议和鼓励,帮助他们在编程之路上迈出坚实的步伐。
|
3月前
|
存储 程序员 容器
从代码到哲学:编程中的启示与人生智慧
【8月更文挑战第31天】在编程的世界里,代码不仅仅是命令和逻辑的集合,它更像是一面镜子,反映出我们对待问题的态度和方法。本文通过探索编程中的一些基本原则和实践,揭示它们如何与我们日常生活中的决策和行为相互映射。从简单的代码片段到复杂的系统设计,每一步都蕴含着深刻的哲理,指引我们在面对生活和工作中的挑战时,如何保持清晰的思路和坚定的意志。文章将带领读者走进编程的内在世界,发现那些隐藏在代码行间的智慧和启示。
|
5月前
|
存储 人工智能 算法
计算机编程:从基础到实践,探索编程的奥秘
计算机编程:从基础到实践,探索编程的奥秘
62 1
|
6月前
|
人工智能 供应链 算法
探索编程思维的奥秘
【4月更文挑战第27天】 在数字化时代,编程已成为一种全新的语言艺术。本文将深入探讨编程思维的本质及其对现代社会的影响。不同于传统的摘要方式,我们将通过一系列故事和案例来揭示编程不仅仅是代码的堆砌,而是一种逻辑严密、创造性和解决问题的能力。文章将带领读者了解如何通过编程思维来优化生活和工作中的决策过程,并提升个人的逻辑分析能力。
下一篇
无影云桌面