“事件驱动”和“面向对象”编程的关系是什么?

时间:2014-02-28 17:19:27

标签: oop event-driven paradigms

这些天,我几乎到处都听说'事件驱动'编程。

维基百科说:

  

在计算机编程中,事件驱动编程是一种编程范例,其中程序流程由用户操作(鼠标单击,按键),传感器输出或消息等事件决定来自其他程序/线程。事件驱动编程是图形用户界面和其他应用程序(例如Javascript Web应用程序)中使用的主要范例,这些应用程序以响应用户输入执行某些操作为中心。

这不是我们的老朋友OOP吗?如果这不是OOP有什么区别?

5 个答案:

答案 0 :(得分:11)

  1. 面向对象编程(OOP)和事件驱动编程(EDP)是正交的,这意味着它们可以一起使用。

  2. 在使用EDP的OOP中,所有OOP原则(封装,继承和多态)都保持不变。

  3. 在带有EDP对象的OOP中,获取了一些发布事件通知和订阅来自其他对象的事件通知的机制。

  4. 有/无EDP的OOP之间的差异是对象之间的控制流。

    • 在没有EDP控制的OOP中,在方法调用上从一个对象移动到另一个对象。 Object主要调用其他对象的方法。

    • 在具有EDP控制的OOP中,在事件通知时从一个对象移动到另一个对象。对象订阅来自其他对象的通知,然后等待来自其订阅的对象的通知,根据通知执行某些操作并发布它自己的通知。

  5. 结论:OOP + EDP正是我们的老朋友OOP"由于事件驱动设计,控制流程被反转。

答案 1 :(得分:6)

面向对象编程是通过将数据和动作配对到现实世界对象的模型中来定义的。事件驱动编程是一种编程风格,其中我们有一个服务器,无论是在通信端口还是用户界面上,等待输入命令。然后它将处理该命令并显示/产生所需的结果。

大多数事件驱动的语言都是面向对象的。对象等待事件。面向对象语言中的程序不一定是事件驱动的,并且事件驱动编程不一定需要面向对象的语言。他们是无关的。

答案 2 :(得分:4)

顺序(非事件驱动)程序的算法就像一个食谱:从头开始,一直工作直到你到达终点,然后停止。

事件驱动的程序更像是汽车的控制:任何时候任何事情都可能以任何顺序发生。

面向对象的原则似乎更适用于事件驱动的模型,因为每个"控件"与其他人基本无关(关注点分离),事件顺序大多不重要,因为时间巧合:你可以打开雨刷,关掉除霜器,同时转向和加速所有,以及行动不会相互影响。在某些情况下使用配方也是可能的,但是由厨师(编译器/优化器/ cpu)来推断它。

顺序程序可以是OO:如果搅拌机和烤箱断开连接并做自己的事情,没有人会介意。我希望这是一个有用的比喻。

答案 3 :(得分:1)

我刺中它。这是三个隐喻:

事件编程似乎类似于硬件总线的工作方式:一种总线用于外围设备相互通信。同样,蜂窝塔是消息总线,手机通过该总线相互通信。还要考虑良好的旧式星形网络拓扑模型(https://en.wikipedia.org/wiki/Star_network)。哎呀,看看家用路由器如何将计算机和IoT设备连接到家用网络。

我们对对象进行编码,而不是外围设备,手机或设备。我们没有按照传输协议发送数据包,而是将事件或消息发送到消息代理(例如,消息队列或Kafka)。对此事件感兴趣的任何人都可以对事件进行操作,或者在工作流的情况下,该事件应该由特定的人来处理,并且发送者将期望找到一个结果事件,并带有适合该事件的响应。结果。

优势:经验教训

因此,我们有可能针对硬件制造商和电信工程师已经遇到并解决的事件驱动消息传递问题提供解决方案。

答案 4 :(得分:0)

• 面向对象编程(OOP) 和事件驱动编程(EDP) 是正交的,这意味着它们可以一起使用。 • 在带有 EDP 的 OOP 中,所有 OOP 原则(封装、继承和多态)保持不变。 • 在带有 EDP 对象的 OOP 中,获取一些发布事件通知和从其他对象订阅事件通知的机制。 • OOP 与 EDP 的区别在于对象之间的控制流。

  1. 在没有 EDP 的 OOP 中,控制从一个对象移动到另一个对象的方法调用。对象主要是调用其他对象的方法。
  2. 在带有 EDP 的 OOP 中,根据事件通知,控制从一个对象移动到另一个对象。对象订阅来自其他对象的通知,然后等待来自它订阅的对象的通知,根据通知做一些工作并发布它自己的通知。

• 结论:OOP+EDP 正是“我们的老朋友 OOP”,由于事件驱动设计,控制流被反转。