【知识】编程范式和编程思想

4.1 编程范式

https://forums.ni.com/t5/Thinking-in-LabVIEW/%E7%AC%AC4%E7%AB%A0-LabVIEW%E5%9B%BE%E5%BD%A2%E5%8C%96%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80%E7%9A%84%E7%BC%96%E7%A8%8B%E8%8C%83%E5%BC%8F-Chapter-4-LabVIEW-graphical-programming/td-p/3497531?profile.language=zh-CN

4.1.2 编程范式和编程思想

4.1.2.1 编程范式

       所谓编程范式就是指某种计算机语言编程的基本风格或典范模式

       计算机编程语言多达数百种,导致了不同编程范式的存在。编程范式提供了(同时决定了)程序员对程序执行的看法。 不同的编程语言会有不同的“编程范式”。

       学习一种编程语言,学习它的语法、技巧和开发工具固然重要,其实更重要的就是学习领会它的编程范式。编程范式往往被看成是心法,因为编程范式体现了编程过程中的思维方式,这种思维方式会浅易莫化引导我们的程序设计。所以通过对编程范式的学习和理解,能够增强编程语言的语感。

       这里需要强调的概念是:编程范式是一个抽象的概念,它不针对任何具体的编程语言。一种范式可以在不同的计算机语言中出现。

同时一种计算机语言也可以支持多种范式,这种计算机语言又被称为:多范式计算机语言。

……

4.2 常见编程范式

https://forums.ni.com/t5/Thinking-in-LabVIEW/4-2-%E5%B8%B8%E8%A7%81%E7%9A%84%E5%87%A0%E7%A7%8D%E7%BC%96%E7%A8%8B%E8%8C%83%E5%BC%8F-Several-common-programming-paradigm/td-p/3499306?profile.language=zh-CN

      因为编程范式(模式、方法)是某种编程语言典型的编程风格或者说是编程方式。所以为进一步加深对编程范式的认识,同时也是也更进一步深入理解和探讨LabVIEW图形化编程语言的编程思想。我们以点到为止的方式,简要介绍几种最常见的编程范式。

 

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

 

4.2.1 过程化(命令式)编程

     (面向过程编程。)

       过程化编程,也被称为命令式编程,应该是最原始的、也是我们最熟悉的一种传统的编程方式。从本质上讲,它是“冯.诺伊曼机“运行机制的抽象,它的编程思维方式源于计算机指令的顺序排列。也就是说:过程化语言模拟的是计算机机器的系统结构,而并不是基于语言的使用者的个人能力和倾向。这一点我们应该都很清楚,比如:我们最早曾经使用过的单片机的汇编语言。

       过程化编程的步骤是:首先,我们必须将待解问题的解决方案抽象为一系列概念化的步骤。然后通过编程的方式将这些步骤转化为程序指令集(算法),而这些指令按照一定的顺序排列,用来说明如何执行一个任务或解决一个问题。这就意味着,程序员必须要知道程序要完成什么,并且告诉计算机如何来进行所需的计算工作,包括每个细节操作。简言之,就是将计算机看作一个善始善终服从命令的装置。
       所以在过程化编程中,把待解问题规范化、抽象为某种算法是解决问题的关键步骤。其次,才是编写具体算法和完成相应的算法实现问题的正确解决。当然,程序员对待解问题的抽象能力也是非常重要的因素,但这本身已经与编程语言无关了。
       程序流程图是过程化语言进行程序编写的有效辅助手段。

 

       尽管现存的计算机编程语言很多,但是人们把所有支持过程化编程范式的编程语言都被归纳为过程化编程语言。例如机器语言、汇编语言、BASIC、COBOL、C 、FORTRAN、语言等等许多第三代编程语言都被归纳为过程化语言。

       过程化语言特别适合解决线性(或者说按部就班)的算法问题它强调“自上而下(自顶向下)”“精益求精”的设计方式。这种方式非常类似我们的工作和生活方式,因为我们的日常活动都是按部就班的顺序进行的。

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

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

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

       

4.2.2 事件驱动编程

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

       在过程式的程序设计中,代码本身就给出了程序执行的顺序,尽管执行顺序可能会受到程序输入数据的影响。
       在事件驱动的程序设计中,程序中的许多部分可能在完全不可预料的时刻被执行。往往这些程序的执行是由用户与正在执行的程序的互动激发所致。

事件
       就是通知某个特定的事情已经发生(事件发生具有随机性)。

事件与轮询
       轮询的行为是不断地观察和判断,是一种无休止的行为方式。而事件是静静地等待事情的发生。
       事实上,在Windows出现之前,采用鼠标输入字符模式的PC应用程序必须进行串行轮询,并以这种方式来查询和响应不同的用户操做。

事件处理器
       是对事件做出响应时所执行的一段程序代码。事件处理器使得程序能够对于用户的行为做出反映。

       事件驱动常常用于用户与程序的交互,通过图形用户接口(鼠标、键盘、触摸板)进行交互式的互动。当然,也可以用于异常的处理和响应用户自定义的事件等等。
       事件的异常处理比用户交互更复杂。

       事件驱动不仅仅局限在GUI编程应用。但是实现事件驱动我们还需要考虑更多的实际问题,如:事件定义、事件触发、事件转化、事件合并、事件排队、事件分派、事件处理、事件连带等等。
       其实,到目前为止,我们还没有找到有关纯事件驱动编程的语言和类似的开发环境。所有关于事件驱动的资料都是基于GUI事件的。

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

       同上单元一样,我们还留下一个思考题:LabVIEW属于事件驱动编程范式的编程语言吗?答案将会在4.3节给出。


4.2.3 面向对象编程

 

       过程化范式要求程序员用按部就班的算法看待每个问题。很显然,并不是每个问题都适合这种过程化的思维方式。这也就导致了其它程序设计范式出现,包括我们现在介绍的面向对象的程序设计范式。

       面向对象的程序设计模式已经出现二十多年,经过这些年的发展,它的设计思想和设计模式已经稳定的进入编程语言的主流。(Java和C++)

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

 

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


       每个对象都是其类中的一个实体。
       物以类聚——就是说明:类是相似对象的集合。类中的对象可以接受相同的消息。换句话说:类包含和描述了“具有共同特性(数据元素)和共同行为(功能)”的一组对象。
       比如:苹果、梨、橘子等等对象都属于水果类。

封装
       封装(有时也被称为信息隐藏)就是把数据和行为结合在一个包中,并对对象的使用者隐藏数据的实现过程。信息隐藏是面向对象编程的基本原则,而封装是实现这一原则的一种方式。
       封装使对象呈现出“黑盒子”特性,这是对象再利用和实现可靠性的关键步骤。

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

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

继承
       继承的思想就是允许在已存在类的基础上构建新的类。一个子类能够继承父类的所有成员,包括属性和方法。
       继承的主要作用:通过实现继承完成代码重用;通过接口继承完成代码被重用。继承是一种规范的技巧,而不是一种实现的技巧。


多态
       多态提供了“接口与实现分离”。多态不但能改善程序的组织架构及可读性,更利于开发出“可扩充”的程序。
       继承是多态的基础。多态是继承的目的。
       合理的运用基于类继承的多态、基于接口继承的多态和基于模版的多态,能增强程序的简洁性、灵活性、可维护性、可重用性和可扩展性。

 

 

 

posted on 2022-10-04 01:24  bdy  阅读(6)  评论(0编辑  收藏  举报

导航