面向过程与面向对象的区别

面向过程与面向对象的区别

一直对面向对象面向过程只是一个模糊大众化的理解,查看了一些文档,也引用了一些内容 整理了下 记录自己的理解

依旧是引用了经典的蛋炒饭和盖浇饭的例子,我仔细的分析了下,和网上看的可能会有些不同

先看概念吧 这部分为摘抄和整理

面向过程

  1. 概念
    面向过程是一种以过程为中心的编程思想,它是一种基础的顺序的思维方式,面向对象方法的基础实现中也包含面向过程思想
  2. 特性
    模块化
    流程化
  3. 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开 发,性能是最重要的因素。
  4. 缺点:没有面向对象易维护、易复用、易扩展

面向对象

  1. 概念
    面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。
  2. 特性
    1. 抽象
    2. 封装
    3. 继承
    4. 多态
  3. 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护

  4. 缺点:性能比面向过程低

然后看到网上说的两个例子大致如下:

  1. 蛋炒饭和盖浇饭问题 主要表现在粒度上

    • 蛋炒饭的粒度只能是饭粒,即使添加再多东西也只是量不同而行相似的同种粒子
    • 而盖浇饭的粒度是分结构和层次的,比如 饭粒 菜片 一碗饭 一碗菜 饭菜合在一起又是一个粒度
  2. 围棋问题

    • 以面向过程设计围棋 整个对局就是一个流程,循环着 下子->判断->下子 的过程直到结束 整个程序是一个平面结构平面

    • 以面向对象设计围棋 就是一个以黑白子, 显示, 判断,等各个职能划分明确 层次分明 复杂的系统结构

两者区别在哪?想了半天 不得其解
由于世界和人的存在方式(时间 顺序),所以面向过程是最基础 实际 直接的设计方式,在面向对象设计中也必不可少的使用面向过程的设计方式,
且两者都能划分模块 层次,那么为何一个职责明确结构分明能够设计出复杂且逻辑性很强的系统,而另一个不行

然后想到了蛋炒饭和盖浇饭的例子:粒度问题

从结果状态来说

面向过程只有过程(也就是函数) 组合起来也只是一堆函数
蛋炒饭只有粒(蛋粒 肉里 饭粒 蛋饭粒 总之 他只有粒子一种形态) 组合起来也只是一堆粒子 并不能体现出之间的联系 只有饭和蛋融合在一起密不可分的联系 因为它的结合方式是炒

面向对象有过程 也有 对象 结合起来是一个系统
盖浇饭 是由饭粒 菜 饭团 菜团 还有终极形态盖浇饭 结合起来是一种复杂结构 其烹饪方式 不仅有炒( 炒是一个融合的过程 解释为封装) 还有煮(组合) 蒸(聚合)

从结合方式(系统复杂性 耦合性)上说:

原子烹饪模块: 就是做东西的过程 无论做什么 其过程都类似 点火 放材料 取结果

烹饪过程: 将各种材料(可能是原材料也可能是上次烹饪的成果)再放在一起建立关系 结合在一起

蛋炒饭永远是对整体进行炒(原子烹饪模块)的操作 即使炒的东西不同 但最后依旧只是炒成一堆散粒子的堆砌物(这是炒的特性)

盖浇饭在每一个小组成也是原子烹饪模块 但是它有几种原子烹饪模块 与蛋炒饭的不同是 它不仅有炒 还有煮( 蒸 炸 从最基础的种类上(结合方式)不同 ,由不同的结合方式结合成各种不同的对象

其中蒸的模式里 就是一种弱关联,两种材料(上一次炒和煮的成果)可以拆分 这也就造成了 盖浇饭的复用性

其中 耦合性就代表着 可维护性(运行后) 复用性(编码阶段) 易扩展(持续开发) 等等等等

这就是面向过程与面向对象最本质的区别: 结合方式的不同

种类 和 数量
世间若只有数 便只能产生有1 2 3 4 12 13 14 即使复制出再多数字相叠加 也没有什么不同
世间有数和文字 还有 那么不仅会有1 2 3 4 而且还会有 1拍1 一只小猫坐飞机

一生二 二生三 三生万物 可惜生成的万物还是局限于”一”中

参考链接:
http://www.cnblogs.com/gfsoft/archive/2007/01/13/619765.html

http://www.cnblogs.com/dbEssay/p/6358253.html

http://blog.youkuaiyun.com/kp_liu/article/details/38042975

http://blog.youkuaiyun.com/shznt/article/details/50382942

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值