专注于快乐的事情

理解函数式编程/面向对象编程

函数式编程和面向对象编程

面向对象编程是一种自顶向下的程序设计方法。用面向对象方法构造软件时,我们将代码以名词(对象)做切割,每个对象有某种形式的标识符(self/this)、行为(方法)、和状态(成员变量)。识别出名词并且定义出它们的行为后,再定义出名词之间的交互。

现代面向对象设计倾向于定义出“服务类”,将操作多个领域对象的方法集合放在里面。这些服务类,虽然也是对象,但通常不具有独立状态,也没有与它们所操作的对象无关的独立行为。

函数式编程倾向于将软件分解为其需要执行的行为或操作,而且通常采用自底向上的方法。

函数式编程中的函数概念具有一定的数学上的含义,纯粹是对输入进行操作,产生结果。所有变量都被认为是不可变的。函数式编程中对不变性的强调有助于编写并发程序。函数式编程试图将副作用推迟到尽可能晚。

在面向对象中,采用继承,而在面向函数的过程,可以将行为封装为行为函数。

函数式编程的精髓在于尽可能地推迟副作用。

人类在认识和分析软件所要解决的业务领域问题时,一般由两个部分组成:业务流程业务规则。前者,回答了业务活动中先做什么后做什么的问题;后者,则回答了遇到什么情况时应该怎么做的问题。两者结合后,得到我们需要的业务结果,或者叫作“实现业务目标”。

如何将上述思维结果映射到软件中去的呢?
使用面向对象的思考方式:
对于业务流程,我们将其表达为若干对象之间的合作,比如UML里序列图的对象与消息,进而具化为具体的类及其职责,比如类及其若干业务方法。
对于业务规则,我们将其表达为若干的判断逻辑,比如UML流程图里的判断分支,进而具化为业务方法里的if-else语句,或者再复杂一点,表达为工厂、策略等设计模式的实际运用。

函数:
对于复杂业务规则的梳理,可以象数学归纳法一样进行演绎:假设一个函数y=f(x),给定x的定义域,确定y的值域。特别是在排列组合等方面的一些问题,也经常采用递归的方式来解决。

参考
http://zhidao.baidu.com/link?url=5DFTKngwDswtymrJEeutBx5BvWo0vzmV9Omov8Vpdn8DBM8nVkb6UG7qir6TEJVnQxmUqcu9c00vFdLo3kMpKITEtI_XBYNJmHLYkline7i

评论系统未开启,无法评论!