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

2023-12-21

如今,我几乎到处都听到“事件驱动”编程。

维基百科说:

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

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


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

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

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

  4. 有/没有 EDP 的 OOP 之间的区别在于对象之间的控制流。

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

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

  5. 结论:OOP+EDP“正是我们的老朋友 OOP”,由于事件驱动设计,控制流被颠倒了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 注册模式和注册对象的延迟实例化

    让我们想象一下我们有注册表模式
  • 如何使PHP库松耦合? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 现实世界抽象类使用简单示例

    有没有使用抽象类的现实世界简单示例 我试图进入 PHP 的 OOP 但我仍然无法理解 为什么应该使用抽象类以及何时使用 是的 我知道不可能创建抽象类实例 只能创建继承它的类的实例 也许您有一个图像类 并且有 2 个驱动程序 GD 和 Ima
  • 使用组合来表示“is – a”关系时出现的问题

    我正在为人力资源系统开发系统 有会计员工和程序员员工 加入公司的第一个月 员工没有被赋予任何角色 一名员工可以同时担任会计师和程序员 我有一个由以下代码所示的设计 现在 我需要通过实现新功能来增强系统 解雇所有会计师 终止意味着将员工的状态
  • 为什么我不能将一个类划分为多个文件

    我正在尝试创建一个类TestClass它分为几个文件 我将它分成 3 个文件 其中第一个文件TestClassPart1 php已经开始上课了class TestClass 和最后一个文件TestClassPart3 php有班级的右括号
  • PHP - 多个不同的数据库依赖注入类

    我花了过去几个小时试图找到 最佳 最合乎逻辑的方法的答案 以编写一个 php 数据库类以同时连接到一个 postgresql 数据库和一个 mysql 数据库 另外 我想采用依赖注入设计 但对整个概念还是陌生的 到目前为止我已经想出了 cl
  • 为什么json序列化器不符合多态性?

    我在 NET 4 5 Windows 应用商店应用程序中使用库存 JSON 序列化器 System Runtime Serialization Json DataContractJsonSerializer 我有一个由 API 提供商提供的
  • 在 init 之外在 java 中创建对象

    因此 对于我正在创建的游戏 我有一些扩展 GameDriver 的类 到目前为止 在所有其他类上我都能够扩展 GameDriver 然后在 GameDriver 中我可以执行以下操作 ArrayList
  • 为什么 'self.self' 在 swift 中编译并运行?

    昨天我回顾了 Swift 中的一段代码 其中包括这一行 self self someProperty 这让我很惊讶 因为这个词self被保留并用作对当前实例的引用 起初我用其他语言检查了这种现象 但都给出了错误 这并不奇怪 但是 为什么它能
  • JavaScript - 这个这个

    String prototype foo String prototype foo bar function How can you reference the grandparent string console log this par
  • 两个对象相互依赖。那不好吗?

    当我为我的项目构建自己的系统时 我学到了很多关于设计模式的知识 我想问你一个我找不到答案的设计问题 目前我正在使用套接字构建一个带有多个客户端的小型聊天服务器 现在我有三门课 人级其中包含昵称 年龄和房间对象等信息 房间级它保存诸如房间名称
  • 工厂模式和策略模式

    我需要创建一个类来负责结果集处理 但可能会发生应该使用不同的算法来处理该结果集的情况 我知道以下选项 1 使用策略模式 伪代码如下 interface Strategy processResultSet ResultSet rs class
  • Javascript:我应该隐藏我的实现吗?

    作为一名 C 程序员 我有一个习惯 将可以而且应该私有的东西设为私有 当 JS 类型向我公开其所有私有部分时 我总是有一种奇怪的感觉 而且这种感觉并没有被 唤起 假设我有一个类型draw方法 内部调用drawBackground and d
  • Facebook api 回调的上下文?

    有没有办法在 javascript facebook sdk api 回调中传递上下文 这是一个简单的例子 现在这不起作用 因为我的回调函数中的变量 this name 将是未定义的 因为它不在我的用户对象上下文中 知道怎么做吗 funct
  • 使用 NSError 检查错误的正确结构

    我正在编写各种例程 并尽力保持其整洁和重构 我正在创建的方法开始看起来与此代码类似 IBAction buttonPress id sender Create Document Shopping List with this documen
  • 无法在类对象的 ArrayList 中存储值。 (代码已编辑)

    这基本上是一个 Java 代码转换器 它涉及一个 GUI 让用户输入类类型 名称和方法 为了存储值 我创建了一个类VirtualClass与ArrayList
  • 为什么需要在 Python 方法中显式使用“self”参数? [复制]

    这个问题在这里已经有答案了 当在 Python 中的类上定义方法时 它看起来像这样 class MyClass object def init self x y self x x self y y 但在其他一些语言中 例如 C 您可以使用
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository

随机推荐