重新思考面向对象

本文探讨了面向对象编程的真正含义,指出封装、继承和多态只是其特征而非本质。作者通过洗衣的例子说明面向对象与面向过程并不冲突,而是解决问题的不同视角。强调了面向对象是一种思想,不应被简单归结为语言特性。同时,提出了在实际应用中,正确理解和运用面向对象的重要性,以及避免思维混乱导致的问题。文章预告将讨论粒度、依赖和资源共用等主题。

重新思考面向对象

封装 继承 多态这些只是面向对象的特征,并非其本质

经典例子

Jeff Goodell:请你用尽量简练的语言解释一下,究竟什么是面向对象的软件?

如果我是一个“洗衣”对象,你可以把脏衣服给我,然后告诉我说:“请帮我把这些衣服洗了吧!”而我恰好知道旧金山最好的洗衣房在哪,并且我会说英语,兜里也有美元。于是我出门大了一辆出租车,告诉司机带我去位于旧金山的洗衣房。我到了那里洗好衣服之后,又坐车回到这里。我把洗好的衣服交还给你,说:“你的衣服已经洗好了。”

你并不知道我是怎么做到的。你不知道哪里有洗衣店,也可能只会说法语,或者是兜里没钱,连车都打不了。但是我知道怎么完成这项人物,而你不需要指导任何细节。所有的这些复杂流程都隐藏在我的内部,而我们之间可以高度抽象地互动。

面向对象与面向过程并不冲突

“即使是被称为面向过程的C语言,也完全可以写出面向对象的代码”

谈到面向对象,总有人会将其与面向过程作比较,并认为之间具有差异。在我看来二者之间并不冲突。

经典例子来说,总体来看,洗衣服的过程是面向对象的,你让我去洗衣服,并得到了洗好的衣服作为结果。但对于具体的操作而言,“我”的洗衣服的过程却是面向过程的:

  1. 打车去洗衣房
  2. 在洗衣房洗好衣服
  3. 坐车回到这里

在这里的第二步,“我在洗衣房洗衣服”又可以看作是一个面向对象的交互过程:我并不需要知道衣服应该怎么洗,只需要把钱和脏衣服交给洗衣房执行就可以了。
同样的,对于总体的洗衣操作来看也可以看作是面向过程的操作,只不过这个过程只有“你把脏衣服交给我”一个步骤。

面向对象与面向过程并不冲突,他们表达的只是两种看待问题的方式。

面向对象是一种编程思想

“我们应该采取行动,认识到面向对象编程的危险,并努力学习函数式编程。”

很多文章不知道是出于何种目的,会给面向对象扣一个“糟透了”的帽子。然而其文中提到的“面向对象”的“缺点”却更多的着重于形式。我们都知道面向对象的四大特征是“抽象”、“封装”、“多态”和“继承”。那么,满足了这四个特征的就一定是面向对象了吗? 如果真的按照这种方法去归类,难免会出现“按图索骥”的错误。这四大特征只是特征,而并非本质。

面向对象是一种思想,代表的是一种看待问题的方式。还是以经典例子来看,用哪一种思路来看待问题取决于是我要去洗衣服还是我找人去洗衣服。从这个角度上来说面向对象也好面向过程也好,并没有优劣之分,只有涉及到具体问题的应用时,才有合适与否之别。

当你的思路确定下来了,在完成整体事件的描述或分析之前,都不应该让其他的思想介入你的分析过程。在我看来,使得面向对象臭名昭著的原因无非是因为你用着面向对象的语言(或框架),却使用了面向过程的思想。就好像在把脏衣服交给了别人,却没有把钱或者车钥匙给他。这种思维混乱所造成的不良后果,怎么能让一开始所选择的思维方法背锅?

因此,面向对象并不是简单的封装、继承。我们在学习了面向对象语言的这些特性之后,仅仅只是了解了这里可以这么用的问题,而这里为什么这么用的问题,值得我们一直去思考。

总结:关于方法与目的

学而不思则罔,思而不学则殆

对于方法何时使用、如何使用的问题,本人目前也只是略有所悟,有时间会结合相关代码再作具体问题的表述。本篇只是对于面向对象的概念重新作出思考,希望能有所启发。

这里预告一下后续会讨论到的一些问题,也算是开个坑:

  1. 粒度与可用性的权衡
  2. 依赖对于模块化的干扰
  3. 关于资源的共用

最后说一句,方法、框架、思想只是工具,而真正的核心在于你想做什么。舍弃了核心目的,盲目地追求技术是不可取的。

参考资料

引申链接

使用面向对象时的一些规范

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值