- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我的理解是,对 Ruby 对象的方法调用正在向该对象发送消息(这可以使用 send
方法手动完成)。
当我使用 Python 时,我不会考虑如何处理方法/函数调用;如果它已定义或可用,则它会执行,否则我会收到错误消息。
1) Ruby 对消息的使用是否独特(即 Python 是否也在幕后使用消息)?
2) Ruby 对消息的使用只是一个实现细节,还是它是您应该如何使用 Ruby 的基础(即,如果我忽略它并继续像在 Python 中那样调用我的方法,我是否会错过某些东西) ?
最佳答案
消息是基本的,不仅在 Ruby 中,而且在一般的 OO 中也是如此。
术语“面向对象”是由 Alan Kay 发明的,他定义了它 this way :
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.
用更现代的话来说:
在实现方面,消息传递是一个后期绑定(bind)的过程调用,如果过程调用是后期绑定(bind)的,那么您在设计时就无法知道您要调用什么,因此您无法关于状态的具体表示的任何假设。所以,它实际上是关于消息传递的,后期绑定(bind)是消息传递的一种实现,封装是它的结果。
他后来澄清了“The big idea is 'messaging'”,并后悔将其称为“面向对象”而不是“面向消息”,因为“面向对象”一词将重点放在了不重要的事情(对象)上并分散真正重要的事情(消息):
Just a gentle reminder that I took some pains at the last OOPSLA to try to remind everyone that Smalltalk is not only NOT its syntax or the class library, it is not even about classes. I'm sorry that I long ago coined the term "objects" for this topic because it gets many people to focus on the lesser idea.
The big idea is "messaging" -- that is what the kernal of Smalltalk/Squeak is all about (and it's something that was never quite completed in our Xerox PARC phase). The Japanese have a small word -- ma -- for "that which is in between" -- perhaps the nearest English equivalent is "interstitial". The key in making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be. Think of the internet -- to live, it (a) has to allow many different kinds of ideas and realizations that are beyond any single standard and (b) to allow varying degrees of safe interoperability between these ideas.
(当然,在今天,大多数人甚至不关注对象而是关注类,这是错误的。)
消息传递是 OO 的基础,无论是作为隐喻还是作为一种机制。
如果您向某人发送一条消息,您不知道他们用这条消息做了什么。您可以观察到的唯一是他们的 react 。你不知道他们是否自己处理消息(即对象是否有方法),他们是否将消息转发给其他人(委托(delegate)/代理),他们是否理解它。这就是封装的意义所在,这就是 OO 的意义所在。您甚至无法将代理与真实事物区分开来,只要它按照您的期望做出响应即可。
“消息传递”的更“现代”术语是“动态方法调度”或“虚拟方法调用”,但这失去了隐喻,而侧重于机制。
On Understanding Data Abstraction, Revisited中也有类似的观点通过 William R. Cook还有他的Proposal for Simplified, Modern Definitions of "Object" and "Object Oriented" .
Dynamic dispatch of operations is the essential characteristic of objects. It means that the operation to be invoked is a dynamic property of the object itself. Operations cannot be identified statically, and there is no way in general to exactly what operation will executed in response to a given request, except by running it. This is exactly the same as with first-class functions, which are always dynamically dispatched.
在 Smalltalk-72 中,甚至没有任何对象! 只有 消息流被解析、重写和重新路由。首先是方法(解析和重新路由消息流的标准方法),然后是对象(共享一些私有(private)状态的方法分组)。继承来得晚得多,引入类只是作为支持继承的一种方式。如果 Kay 的研究小组已经了解原型(prototype),他们可能一开始就不会引入类。
关于ruby - Ruby 中的消息是实现细节还是基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25179914/
vue3 快速入门系列 - 基础 前面我们已经用 vue2 和 react 做过开发了。 从 vue2 升级到 vue3 成本较大,特别是较大的项目。所以许多公司对旧项目继续使用vue2,新项目则
C# 基础 C#项目创建 这里注意win10虚拟机需要更新下补丁,不然直接下载visual studio 2022会显示版本不支持 HelloWorld C#的类文件都是以.cs结尾,入口方法为sta
关于 iPhone 内存管理的非常基本的问题: 假设我有一个 viewController,其中有几个 subview 也由 viewController 控制。当我删除顶部 viewControll
我仍在努力适应指针。不是概念——我理解内存位置、匹配可变长度的指针增量等——这是语法。这是一个我认为是我感到困惑/无法直观把握的原因之一: int a = 42; 在一个int大小的内存空间中分配并放
1. 简介 Kafka(Apache Kafka) 是一种分布式流数据平台,最初由LinkedIn开发,并于后来捐赠给Apache软件基金会,成为了一个Apache顶级项目。它被设计用于处理大规
1.想要在命令提示符下操作mysql服务器,添加系统变量。(计算机-系统属性——环境变量——path) 2.查询数据表中的数据; select selection_lis
MySQL表的增删改查(基础) 1. CRUD 注释:在SQL中可以使用“–空格+描述”来表示注释说明 CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Dele
我有一个网页,可以在加载时打开显示模式,在这个模式中,我有一个可以打开第二个模式的链接。当第二个模式关闭时(通过单击关闭按钮或单击模式外部),我想重新打开第一个模式。 对于关闭按钮,我可以通过向具有
使用 Core Data Fetched Properties,我如何执行这个简单的请求: 我希望获取的属性 ( myFetchProp ) 存储 StoreA ,它应该这样做: [myFetchPr
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 8年前关闭。 Improve this
最近,我得到了一个现有的Drupal项目,并被要求改进前端(HTML,JavaScript,CSS)。我在Django,PHP,Ruby等方面具有大量的前端和后端开发经验,但是我没有任何Drupal经
我试图让我的用户通过使用扫描仪类来决定要做什么,但我有一个问题,代码一旦运行就不会激活,并且它不会让我跳过任何行。我的代码如下所示: Scanner input = new Scanner(S
对模糊的标题表示歉意,因为我想不出这个名字是什么。 基本上创建一个计算学生财务付款的小程序。当我运行它时,它计算对象限额没有问题。然而,无论我尝试什么,对象“助学金”似乎除了 0 之外什么也没有提出。
这是我的代码 - main() { double x; double y = pow(((1/3 + sin(x/2))(pow(x, 3) + 3)), 1/3); prin
如果我的术语在这个问题上有误,我们深表歉意。 采取以下功能: i = 1; v = i * 2; for (j = 0; j < 4; j++ ) { console.log(v);
我的应用程序中有不同的类文件。我有 5 个类,其中 2 个是 Activity ,1 个是运行的服务。其他 2 个只是类。这两个类中变量的生命周期是多少。我知道一个 Activity 可以被操作系统杀
例如,一个方法返回一个 List 类型的对象。 public List bojangles () ... 一些代码调用方法FooBar.bojangles.iterator(); 我是 Java 的新
我遇到了一个奇怪的问题,网格的大小不适合我的屏幕。当我使用 12 列大时,它只占据屏幕的 1/3 的中间,请参见图像。我不确定是什么导致了这个问题。我没有任何会导致这种情况发生的奇怪 CSS。我不会在
我尝试使用头文件和源文件,但遇到了问题。因此,我对我正在尝试做的事情做了一个简化版本,我在 CodeBlocks 中遇到了同样的错误(undefined reference to add(double
我正在为我的网格系统使用基础,但这在任何网格系统中都可能是一个问题。我基本上用一个容器包裹了 3 个单元格,但其中一个单元格应该长到页面边框(留在我的 Sampe-Image 中)但这也可能在右侧)。
我是一名优秀的程序员,十分优秀!