我又来了...面向对象编程思想究竟是什么?

2020-12-17 19:44:12 +08:00
 chaleaoch

下图中的 self.pushlisher 为啥要作为参数穿进去, 直接用不好么?

提前感谢大佬.

3107 次点击
所在节点    程序员
23 条回复
Jooooooooo
2020-12-17 19:52:27 +08:00
面向对象我理解是针对某种实体定义行为的描述

举个例子, 对于一个订单, 下单后对这个订单得做一些操作, 不同类型的操作可能不一样

比如这个第三方的订单下单之后需要回调第三方接口, 某种做法是

if(订单来源 == A) {
回调 A 的接口;
} else if (订单来源 == B){
回调 B 的接口;
}

而面向对象是都围绕这个对象干活, 写出来是这样的

订单.回调接口()

而对于不同来源订单来说这个回调方法不一样, 直接省去了上面还要判断类型再去回调的问题
chaleaoch
2020-12-17 20:11:35 +08:00
@Jooooooooo 大佬没看图说话, 只看标题了. 谢谢大佬.

大佬在根据图给讲讲.
Jooooooooo
2020-12-17 20:12:33 +08:00
@chaleaoch 没学过那个语言. 看不太懂. 我猜是 py
xupefei
2020-12-17 20:14:10 +08:00
这两个 publisher 不是同一个变量…
xupefei
2020-12-17 20:15:25 +08:00
@xupefei 哦看错了,使用一个。

可能原作者想要把第一个函数写成 static 吧
aloyuu
2020-12-17 20:16:46 +08:00
面向对象编程思想究竟是什么?


过程写着写着,就成了函数


函数写着写着,就成了对象


对象是函数的集合,说白了,就是函数的再次封装,有些特性提供了很大的便利,比如。。这个。。。那个。。。
haosamax
2020-12-17 20:34:48 +08:00
可以看下面向对象之父 Alan kay 的理解 面向对象意味着消息传递...
renmu123
2020-12-17 20:41:20 +08:00
这种设计的好处就是开源直接作为类函数使用,而不是强依赖该类的这个参数,设计这个的时候应该和面向对象没什么关系(
xuanbg
2020-12-17 20:57:56 +08:00
这个问题首先要从什么是对象说起。什么是对象?对象是对事物的抽象,具体就表现为:数据模型+能力。也就是用字段来描述和存储数据,组成数据模型,用方法来实现对象能力。

所以,面向对象编程,就是通过将事物抽象为对象,来实现数据和逻辑的封装的一种编程方式。是「封装」这一思想的一种具体实现。
f6x
2020-12-17 21:00:34 +08:00
一般遇到匪夷所思的写法, 可以看下 git/svn 的历史记录.
罗 shi 马 shan 不是一天写成的,必有原因.
wellsc
2020-12-17 21:02:38 +08:00
@haosamax 这不是 armstrong 说的话吗?
xuanbg
2020-12-17 21:06:38 +08:00
和面向对象不同的是更加古老的面向过程的编程方式。

在面向过程的编程方式中,数据和逻辑是割裂的。数据存在内存之中,就如同存储在一张表里面。你必须要先规划好内存的使用,然后才能管理数据。而逻辑呢,就是一个个函数,你输入数据,函数就返回处理的结果,或者输出到内存,或者输出到屏幕,或者输出到别的什么设备。这倒是和面向对象中的方法没什么不同。

两者的根本的不同点就在数据的管理方式。面向过程需要自己管理数据,而面向对象则把数据和方法绑在了一起。
haosamax
2020-12-17 21:06:49 +08:00
@wellsc 不是吧,难道我记错了
nuistzhou
2020-12-17 21:06:49 +08:00
图片中这样把 class member 当参数传的好处是,一眼就可以看到方法 maybe_due()的 dependency,比如图片中的 publisher.
至于面向对象的编程思想,我资格不够,答不好。
Mohanson
2020-12-17 21:43:47 +08:00
erlang 之父如何评价面向对象:我想要一只香蕉,但你给了我一只拿着香蕉的猴子,还有它背后的整个森林。
aijam
2020-12-18 09:21:29 +08:00
maybe_due 还有其他地方调用呗,你瞅瞅
chaleaoch
2020-12-18 09:22:01 +08:00
@renmu123 谢谢这就是开源项目.我也不敢把公司项目贴图上来啊.
celery 源码
mrtrying
2020-12-18 09:47:44 +08:00
传参这事,能让这个方法更加通用,其他的地方也可以调用,如果外部没有调用写成私有方法直接用也可以吧!我是这么认为的
spbcu
2020-12-18 09:52:11 +08:00
maybe_due 应该不止 tick()里的这一个调用吧。tick()里传入 self.publisher,其他地方不一定是用 self.publisher,可能会传入其他 publisher 啊。
jswh
2020-12-18 10:11:52 +08:00
同意楼上

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736519

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX