Functional programming OO与FP |命令与FP

Functional programming OO与FP |命令与FP,functional-programming,Functional Programming,我经常遇到面向对象编程和函数式编程之间的比较,以及命令式编程和函数式编程之间的比较。“面向对象”和“命令式”是两个截然不同的术语,在我的理解中,它们彼此无关。不过,它们都可以与函数式编程相比较。面向对象编程和命令式编程之间的关系是什么,促使了这种比较?原因很简单,主流的OO编程(即Java、C#)是命令式编程的一个子类 下面是一个粗略的图表: progamming / \ dec

我经常遇到面向对象编程和函数式编程之间的比较,以及命令式编程和函数式编程之间的比较。“面向对象”和“命令式”是两个截然不同的术语,在我的理解中,它们彼此无关。不过,它们都可以与函数式编程相比较。面向对象编程和命令式编程之间的关系是什么,促使了这种比较?

原因很简单,主流的OO编程(即Java、C#)是命令式编程的一个子类

下面是一个粗略的图表:

                   progamming
                   /        \
              declarative   imperative
                 /    \          /   \ 
         functional    \        OO   procedural  
                       logic 
                       (prolog)
在声明式编程中,您可以说出要计算的内容。假设我们要计算链表的长度:

  • 空列表的长度为0
  • 非空列表的长度比该列表尾部的长度大一倍
在命令式编程中,您基本上是按特定顺序操作内存:

int length = 0;              // put starting value in memory
while (!list.isEmpty()) {
   length++;                 // update memory
   list = list.next();       // update list pointer for next iteration
}
// result is in memory location associated with length
因此,适当的比较应该是:

  • 命令式与声明式
  • 面向对象与功能

  • 原因很简单,主流OO编程(即Java、C#)是命令式编程的一个子类

    下面是一个粗略的图表:

                       progamming
                       /        \
                  declarative   imperative
                     /    \          /   \ 
             functional    \        OO   procedural  
                           logic 
                           (prolog)
    
    在声明式编程中,您可以说出要计算的内容。假设我们要计算链表的长度:

    • 空列表的长度为0
    • 非空列表的长度比该列表尾部的长度大一倍
    在命令式编程中,您基本上是按特定顺序操作内存:

    int length = 0;              // put starting value in memory
    while (!list.isEmpty()) {
       length++;                 // update memory
       list = list.next();       // update list pointer for next iteration
    }
    // result is in memory location associated with length
    
    因此,适当的比较应该是:

    • 命令式与声明式
    • 面向对象与功能

    没有上下文不可能说。可能更适合cs.stackexchange.com没有上下文也不可能说。可能更适合cs.stackexchange.com谢谢,现在我明白了!另一方面,OO概念可以应用于命令式、函数式和声明式编程,因为代码封装和代码重用问题在任何编程范式中都是常见的。这导致了另一种观点,即命令式、函数式和声明式范式与拦截它们的OO范式处于同一级别,并且处于更高的级别。您可以很容易地找到所有三种主要编程范式的代表性语言,它们对OO概念进行了很好的集成解释/具体化。@PauloMoura代码封装/重用不像是OO发明。但你是对的,概念和想法都是朝着两个方向浮动的,这是一件好事。谢谢,现在我明白了!另一方面,OO概念可以应用于命令式、函数式和声明式编程,因为代码封装和代码重用问题在任何编程范式中都是常见的。这导致了另一种观点,即命令式、函数式和声明式范式与拦截它们的OO范式处于同一级别,并且处于更高的级别。您可以很容易地找到所有三种主要编程范式的代表性语言,它们对OO概念进行了很好的集成解释/具体化。@PauloMoura代码封装/重用不像是OO发明。但你是对的,概念和想法会朝着任何方向浮动,这是一件好事。