OOP(面向对象编程) 和 OPP(面向过程编程) 的异同点及系统总结

近段时间关于OO的思想和OP思想的争论不绝于耳, 不敢确信自己能否做一个全面的分析, 因此参考网上一些经典的文章来总结一些这两种思想在软件架构上的异同。

首先我个人的倾向是: OO和OP的思想务必要结合. OO适合细节上做封装;OP适合在模块级别, 架构级别上做统筹. 后面我会借用一些资料来辅佐这样的论点.

首先还是需要稍微介绍下OO和OP 的基本定义和区别:

在以下两方面, 面向对象和面向过程会有区别(下面考虑的都是软件工程中一般的做法, 不考虑生僻情况):

  • 封装性上
    • 面向对象的封装将一系列的数据和方法集中在类中
    • 面向过程的封装, 方法一般不做封装, 数据用Struct封装, 方法和数据分离

  • 代码复用性上
    • 面向对象利用继承的方式复用
    • 面向过程只能以普通的函数复用
  • 其它的细节区别, 比如overload, overwrite之类的区别, 属于语义上的区别, 不影响本文的主题.

下面的文章来自于JavaEye, 见解比较深刻.

面向对象之弊,面向过程之优

这篇文章的思想是:

1. OO的特点, 就是把数据和逻辑封装成一个整体, 带来了强耦合的问题.

2. OP的特点, 数据和逻辑分开, 绝对的松耦合, 但封装性不够.

上述两个东东的互斥的特性, 给我们带来了非常重要的提示:

  1. 模块 之间的设计, 为了维护代码(修改bug, 增加新功能, 独立协调成员工作). 严重关注耦合度, 要求尽量即插即用, 模块间完全独立. 这个时候我们需要尽量的按照OP的思路. 模块和模块之间的协作, 务必按照OP的思路. 逻辑分离得非常彻底.
  2. 内部单元 的设计, 尽量封装良好, 利用OO的思想, 将各个零部件整理成一个类整体.

比如, 电脑的组装, 在整体上, 我们是通过电源线将机箱和插座, 以及显示器连接, 这个上面的设计思路, 是按照OP来的直观的连接流程(连接线可以视为胶合层, 《Unix编程艺术》上明确的要求这个层面尽量薄), 但机箱内部, 各个零件, 如DVD, 硬盘, 主板, 都是一个分装完美的对象, 包含数据, 也包含处理的动作. 这个可以实现插件的管理模式.

特别强调的一点, OP和OO的设计思路, 主要是看在哪个层次, "模块"和“内部单元”实质上是一个非常抽象的概念, 在某个层面上, “内部单元”可能是一个“模块”, 而在更大的层面上, "模块"也被当做一个“内部单元来处理”, 所以, 如何选择OO的设计方式, 还是OP的设计方式, 需要视情况而定. 我们所设计的任何一个点, 都停留在产品金字塔结构的一个“内部单元”中, 同时也停留在一个"模块中". 下图概括了上文的表述内容:

结合一下目前了解的一个GPS项目来说明下OP和OO在一个项目中的体现.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值