zoukankan      html  css  js  c++  java
  • 函数式编程 vs 面向对象编程

    身为一个程序员,我个人很喜欢早洗澡的时候去思考一些技术上的东西,今天有人问我什么是面向对象,其实我也不是很懂,我以前一直认为面向对象就是继承,而继承就是虚函数,但是我洗澡的时候在思考,真的是这样子的吗?错了,不管虚函数的机制是为了继承和多态而服务,而继承和多态确实为了OO的思想而服务,怎么说呢?

    我们都知道,当我们都知道学生A,B,C,D.....,都是学生,并且他们有一些共同的属性,比如年龄,性别,学号。。。,如果在面向过程的编程模式中,我们可能要为每一个学生建立一个存放他/她属性的一个东西,而面向对象呢,我们只要将他们共同的东西抽象出来形成一个类,而类中只有他的属性,那么我们只要使用这个类去创建不同的学生对象即可,但是我们都知道每一种数据类型都有它本身的运算方式,比如整形,它可以做+-*%,等等,而有学生抽象出来的这个类他也有自己对于类中属性的操作方式,所以我们就将这个属性的操作方式也放在类里面,那么整个类就真正的成为一个数据类型而存在,那么任何想使用这个数据类型的人只要定义一个关于这个数据类型的变量即可,而操作这个变量的方式也已经写好,就像int类型一样,这样你就不必为每一个学生去定义一个类型,真正实现了OO中的因为抽象而共享,增加了代码重用的可能性,减少了程序的代码量。

    当然这个思想在模版中也得到了推广,不管是模板类,还是模版函数,抽象出共同的,形成一个可悲更多时候使用的一个东西。模板类对数据类型再一次抽象,模版函数不同数据类型同一控制流的抽象。

    那么函数式编程又和面向对象编程有什么不同呢?我觉得函数式编程和面向对象编程是相辅相成的,为什么这么说,面向对象抽象出共同属性形成一个新的数据类型,暂且就这么说吧,而函数式编程将函数也当成对象,可当变量,当参数,当返回值,简直就是全能神,哈哈,函数式编程当然得讲闭包,闭包是什么,闭包其实就是类,类抽象的是数据类型,而闭包抽象的是函数,闭包通过不同的输入参数实现返回不同的函数对象。

    所以当你要抽象数据类型,请用OO,当你要抽象函数,请用FP。

  • 相关阅读:
    python---逻辑运算(and、or、not)
    VsCode预览HTML文件的方法
    Windows10下composer的安装以及配置
    Centos7上SVN客户端的安装和使用
    Centos7安装redis
    centos7下解决yum install mysql-server没有可用包
    Centos7 安装的mysql 报错 Unit mysqld.service entered failed state.
    Redis的一些规范
    PHP安装Redis扩展
    bzip2:无法 exec: 没有那个文件或目录
  • 原文地址:https://www.cnblogs.com/GODYCA/p/2867188.html
Copyright © 2011-2022 走看看