导航:首页 > 编程语言 > 式编程

式编程

发布时间:2022-01-23 10:17:38

① 式编程命令式编程()和函数式编程的区别

编程语言主要有四种类型

② 为什么说面向对象编程和函数式编程

先从结构化编程说起

很久以前,软件开发的世界还是一片浑浑噩噩,不管开发什么软件都面临着复杂性这个问题,代码里面到处是goto语句,程序的流程随意跳转。众生写代码时,越写到后面越不知道自己写的是什么。这时候出现一位巨人,它就是结构化编程。

结构化编程的基本思想是:

有序地控制流程,即把程序的执行顺序限制为顺序、分支和循环这三种;
把共通的处理归结为例程(函数)。
结构化编程的好处是:

三大限制:大大降低了程序的自由度,减少了各种组合,使得程序不至于太过复杂。对于这一点,结构化编程的顺序、分支和循环可以实现一切算法,虽然降低了程序的复杂性和灵活性,但是程序的实现能力并没有降低。
例程(函数):我们只需要知道过程(函数)的名字,而不需要知道过程的内部细节,即“黑盒化”。
虽然结构化解决了程序控制流的复杂问题,但程序里面不仅包括控制结构,还包括要处理的数据。随着处理数据的增加,程序的复杂性也会上升。这时候,面向对象编程来了!

面向对象的由来

“分别管理程序处理内容和处理数据对象所带来的复杂性”问题是,为了得到正确的结果,必须保持处理和数据的一致性,这在结构化编程中是非常困难的,解决这一问题的方案就是数据抽象技术。

数据抽象是数据和处理方法的结合。这便是最初“对象”一词的得来。面向对象编程也因此得名。

然后,从抽象原则来说,多个相同事物出现时,应该组合在一起,即DRY原则(Don't Repeat Yourself),便又引出了类这一概念。

根据数据类型来进行合适的处理(调用合适的方法),本来就应该是编程语言这种工具应该完成的事。这便是多态的引出了。

而对于继承,大部分的观点是“继承是随着程序的结构化和抽象化自然进化而来的一种方式”。结构化和抽象化,意味着把共通部分提取出来生成父类的自底向上的方法。(如果继承是这样诞生的话,那么最初,有多个父类的多重继承就会成为主流,而实际上最初引入继承的Simula语言只提供单一继承。松本行弘认为继承的原本目的实际是逐步细化)

③ 函数式编程和响应式编程有什么区别

1. 我暂且认为你说的RP是指Rx*框架的Reactive programming,(如果不是,就先认为是一下吧)
Rx*框架的RP,其实应该叫FRP(Functional Reactive Programming)(误,感谢 邵成的指正,具体见补充部分),那和FP基本上就是一种派生(derive)关系了
FRP基本上就是面向异步事件流的编程了,这个异步事件流叫:Observable,一般叫:Stream

Stream就是一个 按时间排序的Events(Ongoing events ordered in time)序列
Stream是不可变(Immutability)的,任何操作都返回新的Stream, 且它是一个Monad(它有map和flatMap方法)。
FRP的关注点在Stream,而FP的关注点在(Type, Operate),Stream -> (Type, Operate)是一种泛化(generic),(Type, Operate) -> Stream 是一种派生。
RP本身是建立于观察者模式之上的一种编程范式(级别同MV*),FP则更偏向底层解决一般化问题。

④ 什么是积木式编程

就是把各种功能的代码,封装成模块,比如有ADC功能,I2C功能,ISP功能,串口,定时器。。。等等全都封装好,需要用什么功能直接复制过来引用就可以了,因为接口都是按照某一特殊定义封装好的,编程就像堆积木一样。所以称为积木式编程

⑤ 为什么要用函数式编程

以 C 语言源程序为例,使用函数式的编程风格主要是有利于程序的调试!而且程序的可读性也很好。程序思路很清楚!!以下面的源程序进行讲解就一目了然了。在以下题目中,三次用到了求阶乘的代码(A!、(A-B)!、B!),现在使用调用子函数的编程风格,程序简洁明了、且可读性很强。如果不使用函数式编程,那么求阶乘的代码你就必须要重复三次。你说到底是哪一种编程风格好呢?
例如:求组合数C(A,B) = A!/( (A-B)! * B! )
int jie_cheng( int ) ;

void main( )

{
int a = 0,b = 0 , c = 0 ;

scanf("%d %d",&a,&b);

c = jie_cheng(a) / (jie_cheng(a-b)*jiecheng(b)) ;

printf("Zu he shu C is: %d\n", c);
}
int jie_cheng(int num)

{
if( num == 1)
return 1 ;
else
return num*jie_cheng(num-1) ;
}

⑥ 对话式编程 什么意思

大概是一种 数控机床操作语言,这种编程语言主要针对即时工作中使用的,对于数控机床的工作所使用的一种编程,也可以想象成是人与数控机床之间对话所使用的一种语言。

⑦ 什么是过程式编程

通俗点:面向过程是以代码为中心,组织编程过程。面向对象,是以一个具体的对象为中心,比如程序中的按钮,列表框等等组件,需要掌握继承等关键概念。

⑧ 函数式编程是什么意思

C语言是面向过程的编程,它的最重要特点是函数,通过主函数来调用一个个子函数。程序运行的顺序都是程序员决定好了的。它是我学的第一种程序语言。 C++是面向对象的编程,类是它的主要特点,程序执行过程中,先由主函数进入,定义一些类,根据需

⑨ 什么是函数式编程思维

试着把函数想象成一个根据一个指定输入产出指定输出的黑盒,就能简化成逻辑电路中的各种门的样子或者是各种流通管道的样子。

然后试想数据通过这些组合起来的管道/门,变成你要的结果。

或者是通过现有的管道或门,构建(抽象)出更复杂/更通用的管道/门。

这就是函数式编程。

任何支持函数的语言都可以进行函数式风格的编程 注意到与命令式风格不同的是没有赋值,这意味着reason 程序的时候每个变量的值是不变的 不用考虑程序变量随着时间的变化 -- 大大降低了程序的复杂性。

既然C/C++(98) 也能进行函数式风格的编程 为什么不认为它是一门函数式语言呢,因为需要容易的进行函数式编程需要以下几个语言特性支持

  1. closure

  2. 按照上面的三条规则函数式是first class 的 是可以直接传递作为参数的,而因为lambda演算作用于是lexical scope 的,variable capture 意味着语言要支持GC才能更方便的操作。 这意味着像Java(8以前), C/C++ 这两门工业界语言函数式编程并不非常适合.

  3. 2. 高阶类型推断

  4. 因为函数可以作为参数,其类型可以非常复杂 比如下面的函数类型其实非常普遍:

  5. val callCC : (('a -> 'b -> 'c) -> ('a -> 'c) -> 'd) -> ('a -> 'c) -> 'd

  6. 如果没有类型推断,其实很难写对或者理解它的语义

  7. 3. tail-call

  8. 因为函数式风格没有赋值,也就没有for循环, 要实现循环操作 只能通过递归调用, 比如下面简单的例子:

  9. let rec even n = if n = 0 then true else if n = 1 then false else odd (n - 1)

  10. and odd n = if n = 1 then true else if n = 0 then false else even (n - 1)

  11. 这需要编译器保证上面的例子不能有stackoverflow 能提供这样保证的编译器并不多,比如所谓的 "函数式" 语言scala 就不能提供这种保证 也就实际上不是函数式语言.

  12. 相比函数式风格我觉得更重要的一个语言特性的时代数数据类型和模式匹配

⑩ 函数式编程有什么弊端

不论是面向对象编程还是函数式编程,如果你走了极端,那都是错误的。面向对象编程的极端是一切都是对象(纯面向对象)。函数式编程的极端是纯函数式编程语言。
面向对象编程的问题
面向对象的问题在于它对“对象”的定义,它试图将所有事情就纳入到这个概念里。这种做法极端化后,你就得出来一个一切皆为对象思想。
但这种思想是错误的,因为有些东西不是对象。函数就不是对象。

阅读全文

与式编程相关的资料

热点内容
python超简单编程 浏览:257
获取命令方 浏览:976
怎样制作文件夹和图片 浏览:58
调研编译写信息 浏览:859
python冯诺依曼 浏览:417
同时安装多个app有什么影响 浏览:253
奥术杀戮命令宏 浏览:182
用sdes加密明文字母e 浏览:359
单片机原理及应用试题 浏览:423
易语言开启指定文件夹 浏览:40
马思纯参加密室大逃脱 浏览:322
文件夹冬季浇筑温度 浏览:712
京东有返点的aPp叫什么 浏览:603
如何查看u点家庭服务器是几兆 浏览:262
python应用接口怎么接 浏览:67
腐蚀怎么进不去服务器啊 浏览:359
linuxcpiogz 浏览:631
安卓中的布局是什么文件 浏览:397
dex反编译部分代码无法查看 浏览:464
linuxandroid编译 浏览:603