首页  >  文章  >  Java  >  面向对象编程不是你想象的那样,或者至少不是你想象的那样

面向对象编程不是你想象的那样,或者至少不是你想象的那样

王林
王林原创
2024-08-22 06:38:07564浏览

Object-Oriented Programming is Not What You Think It Is, or at Least It Wasn’t Meant to Be

“当我创造“面向对象”这个术语时,让我告诉你,我并没有想到 C++。重要的想法是“消息传递”......创建良好且可扩展的系统的关键在于更多设计模块如何相互通信,而不是其内部属性和行为应该如何。”
“我很遗憾很久以前就这个主题创造了‘对象’这个词,因为它让人们关注更小的想法。大的想法是‘消息传递’。”
— Alan Kay,Smalltalk 语言的创建者。

当我们学习面向对象编程时,首先向我们展示的想法是汽车具有门和轮子等属性,电视具有打开和关闭的行为,房屋具有可以打开和关闭的窗户。打开和关闭。但真实的系统远非如此。
您将看到一个名为 HTTPRequest 的对象,但不会看到名为 TV 的对象。您将遇到 logMessage,但不会遇到 house1Joao。或者还有资源管理、文件系统等。现在,这些“对象”应该有什么行为?

对象作为现实世界对象的表示的想法甚至在 Alan Kay 之前就用 Simula 语言出现了。该语言的创建者 Ole-Johan Dahl 和 Kristen Nygaard 正在设计一种用于模拟现实的语言,例如队列、网络流量、制造过程等。过程式编程不适合解决此类问题。

这就是需要一种编程形式的开始,这种编程形式可以让您专注于真正重要的事情,而将实现留在幕后。想象一下,必须构建一个强大的大型系统,更多地考虑代码细节而不是问题本身。更不用说代码可能具有的函数数量足够大,以至于变得令人困惑和晦涩难懂。

他们迈出了抽象编程中不必要的概念的第一步。

“但这正是现代的面向对象编程!”你可能会惊呼。嗯,是的,也不是。此范例的 Simula 语言的实现是不同的。重点不是可重用和灵活的系统,而是建模事件和流程。
继承很简单。重点是改进和专业化程序,而不是灵活性和层次结构。
封装是基本的。没有像 private、public 和 protected 这样的访问修饰符的概念。
基本上,这个想法是将混乱的代码组织到具有更清晰定义的包中。

一段时间后,在施乐公司,艾伦·凯 (Alan Kay) 提出了他的消息想法。施乐公司创造了计算机图形学和 Smalltalk。
他的想法基本上是将物体视为生物,但不是动物或人类,而是细胞。 (艾伦·凯是一位受过训练的生物学家。)
由于细胞之间的通讯,活组织可以完美地发挥功能。它们的功能非常明确,并且知道如何响应从其他细胞接收到的“消息”。
这个想法是创建对象,其功能是知道如何以自己的方式响应消息。没有必要也不应该知道对象的响应是如何实现的。您唯一需要知道的是对象理解哪种消息。 (事实上​​,您可以“发送”到对象的消息集称为接口。)
例如,当您发送消息“2 + 2”时,您希望 sum 对象返回什么?
啊,是的。在 Smalltalk 中,一切都是对象,包括消息。
是的,我知道,这太疯狂了。对象通过包含其他对象的对象进行通信。但这就是这个想法。
“好的,这如何帮助创建可重用和可扩展的系统?”
软件系统更像是接线而不是文件。这就是 Alan Kay 所做的区分。
对他来说,你应该担心电线是否连接到正确的极,而不是文件的组织方式。

结论

Alan Kay 构想的面向对象编程不仅仅是将代码组织成模仿现实世界的结构,而是创建通过消息有效通信的系统。尽管现代 OOP 是从 Simula 的最初思想发展而来,并在 C++ 和 Java 等语言中流行起来,但这种方法的真正重点(对象之间的通信)往往被淡化了。

了解 Kay 最初的愿景可以让我们重新考虑今天如何设计和构建软件。我们不应该只关注对象和类层次结构的内部结构,还应该重视精心设计的模块之间的通信所带来的简单性和灵活性。

回归OOP的根源可以帮助我们开发更具弹性、模块化且易于扩展的系统。毕竟,正如凯提醒我们的那样,“伟大的想法”不在于物体本身,而在于它们的交流方式。


来源:

  1. Alan Kay,“Smalltalk 的早期历史”,编程语言史,第 2 版,由 Thomas J. Bergin 和 Richard G. Gibson 编辑,Addison-Wesley,1996 年,第 123 页。 511-578。
  2. Kristen Nygaard 和 Ole-Johan Dahl,“SIMULA 语言的发展”,收录于 编程语言史,第一版,由 Richard L. Wexelblat 编辑,学术出版社,1981 年,第 123 页。 439-493。
  3. Bjarne Stroustrup,C++ 编程语言,Addison-Wesley,2013 年,前言和第 1 章。
  4. 凯,艾伦。 “‘面向对象编程’的含义。”给 Stefan Ram 的电子邮件,2003 年。

P.S.:本文由 Moisés Cristiano 撰写,ChatGPT 编辑。

以上是面向对象编程不是你想象的那样,或者至少不是你想象的那样的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn