zoukankan      html  css  js  c++  java
  • 函数式和面向对象

    什么是面向对象编程

    面向对象是一种设计思想,面向对象的核心是 (class)和 对象 (object),通过类来抽象现实世界,通过对象来模拟现实世界。 面向对象的难点在于抽象,抽象的好坏很大程度决定了整个程序设计的好坏。

    面向对象的设计中会有很多的层次结构,然后现实世界很多时候并没有那么多层次结构, 这时,如果强行用面向对象的设计方式,反而会把问题复杂化,也会让应对变化没那么容易,所以产生了 设计模式 这种概念。 设计模式被很多人推崇,个人感觉设计模式进一步让设计远离现实世界,把对解决实际问题的关注变为对重构代码的关注。

    当然,面向对象也有它明显的优势,在代码组织上结构清晰,有严格的访问控制,同时简单易懂,相对于函数式编程,更容易上手。

    面向对象的核心概念

    • 封装
    • 继承
    • 多态

    什么是函数式编程

    函数式编程其实是比面向对象更早的编程方式,但是由于其对使用者有更高的要求(主要在代码组织方面,将实际问题转换为函数方面), 所有面向对象设计方式出现之后,一度被忽略,成为一种小众的编程方式。

    函数式的编程范式使得它更加适用于复杂数据处理,高并发的环境,这也是函数式编程最近又兴起的原因之一。

    • 函数是一等公民,也就是函数和变量等其他数据类型一样使用
    • 没有副作用,函数保持独立,和外部的交互仅限于 函数参数返回值

    函数式编程核心概念

    • 不变性
    • 纯函数
    • 高阶函数

    函数式 和 面向对象 比较

    面向对象核心是状态,函数式核心是数据

    所以面向对象更适合对业务(复杂的状态变化)的设计,而函数式适合对功能(复杂的数据变化)的设计, 我想,这也是面向对象应用广泛的原因之一,毕竟大部分人接触的都是业务开发。

    随着面向对象设计方式的发展,理论是越来越完善,复杂度也越来越高,面向对象的设计方式很多时候不再把目光投向实际的问题, 而是追求所谓的设计技巧。 函数式编程则更加直接,将问题转化为对数据的处理,关注点更容易集中在问题本身。

    函数式 和 AI

    函数式编程能够再度火起来,和 AI 也有一定的关系,机器学习本身就是对大量数据的学习和处理,通过数据来训练出算法。 这种模式更加适合函数式编程,而面向对象面对这种未知结果的学习,抽象会非常困难。

  • 相关阅读:
    SQL Azure (17) SQL Azure V12
    Microsoft Azure News(5) Azure新DV2系列虚拟机上线
    Azure Redis Cache (3) 在Windows 环境下使用Redis Benchmark
    Azure PowerShell (11) 使用自定义虚拟机镜像模板,创建Azure虚拟机并绑定公网IP(VIP)和内网IP(DIP)
    Windows Azure Virtual Machine (31) 迁移Azure虚拟机
    Windows Azure Web Site (16) Azure Web Site HTTPS
    Azure China (12) 域名备案问题
    一分钟快速入门openstack
    管理员必备的Linux系统监控工具
    Keepalived+Nginx实现高可用和双主节点负载均衡
  • 原文地址:https://www.cnblogs.com/wang_yb/p/8558775.html
Copyright © 2011-2022 走看看