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

本文探讨了面向对象(OO)与面向过程(OP)两种编程思想的优缺点,并提出了一种融合这两种思想的方法:在模块级别采用OP进行设计,在内部单元采用OO进行封装。文章还举例说明了这一理念在实际项目中的应用。

近段时间关于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在一个项目中的体现.

【Koopman】遍历论、动态模态分解库普曼算子谱特性的计算研究(Matlab代码实现)内容概要:本文围绕【Koopman】遍历论、动态模态分解库普曼算子谱特性的计算研究展开,重介绍基于Matlab的代码实现方法。文章系统阐述了遍历理论的基本概念、动态模态分解(DMD)的数学原理及其与库普曼算子谱特性之间的内在联系,展示了如何通过数值计算手段分析非线性动力系统的演化行为。文中提供了完整的Matlab代码示例,涵盖数据驱动的模态分解、谱分析及可视化过程,帮助读者理解并复现相关算法。同时,文档还列举了多个相关的科研方向技术应用场景,体现出该方法在复杂系统建模与分析中的广泛适用性。; 适合人群:具备一定动力系统、线性代数与数值分析基础,熟悉Matlab编程,从事控制理论、流体力学、信号处理或数据驱动建模等领域研究的研究生、博士生及科研人员。; 使用场景及目标:①深入理解库普曼算子理论及其在非线性系统分析中的应用;②掌握动态模态分解(DMD)算法的实现与优化;③应用于流体动力学、气候建模、生物系统、电力系统等领域的时空模态提取与预测;④支撑高水平论文复现与科研项目开发。; 阅读建议:建议读者结合Matlab代码逐段调试运行,对照理论推导加深理解;推荐参考文中提及的相关研究方向拓展应用场景;鼓励在实际数据上验证算法性能,并尝试改进与扩展算法功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值