大神能不能普及一下这几个编程概念

梁同学de自言自语
  • 436

面向对象编程、过程式编程、函数式编程傻傻分不清楚

回复
阅读 2.2k
5 个回答
✓ 已被采纳

不严谨地说, 比如有一个 Todolist http://todomvc.com/ , 增加了按回车增加一条 Task:

过程式编程

第一步, 删除输入框里的数据,
第二部, 生成对应的 DOM 节点,
第三部, 找到 DOM 节点, 插进去,

面向对象

把 Model 抽象成一个类, 把界面组件抽象成一个类, 界面组件监听 Model 的事件,
界面组件监听到回车, 删除对应的 DOM 输入框里的内容,
Task 插进 Model, Model 发送事件, 界面组件调用 addTaskElement 之类方法, 渲染好任务.

函数式编程

Model 用纯数据, 不可变数据, 就不要乱封装了,
监听到事件, 生成 Virtual DOM 来表示新的 DOM 结构是怎样的,
剩下的交给类库去做.

区别

过程式编程, 先怎么做, 后怎么做, 没有高级的抽象, 复杂问题不会对付.
抽象成对象, 把过程操作限制在对象内部, 对象之间抽象起来.
函数式编程, 尽可能避免过程式的操作, 那种有隐患. 然后就可以各种抽象了.

面向对象和函数式编程内容其实都很杂, 以上只是大概的一个区别.

以烧菜为例:

过程式编程:第一步放葱姜,第二部放油,第三部放菜...
面向对象编程:先搞一个"烧菜机"对象,然后把原料都扔进去,再从出口拿成品。
函数式编程:就是数学推导那一套。f(x)=sin(x)*cos(x)... 函数是求值的,没有副作用。

个人还是建议这三个方向,都找书看并且写一些代码,这样体会和认识会更深一些。面向对象找java或c++的书,过程式的找c的书,函数式的找《计算机程序的构造和解释》等

过程式体现为结构化程序设计的支持.
面向对象体现为类的支持.
函数式体现为匿名函数(闭包)的支持.

新人小白
函数式编程没怎么接触过
不过对于面向对象编程和面向过程编程 有一个这样的例子 我觉得超级好

老板让写一个 毁灭月球 的方法

面向过程的程序猿A 写了一个 毁灭月球的方法
面对对象的程序猿B 写了一个 毁灭银河系的方法,然后把月球当做参数传进去(并不在乎你到底要毁灭月球还是火星)

你知道吗?

宣传栏