我在 StackOverFlow 上看到了许多不同的主题,讨论过程和面向对象编程之间的差异。问题是:如果程序使用一个对象,它仍然可以被认为是程序性的吗?
7 回答
是的,很多早期的 Java 就是这样。你有一群 C 程序员进入 Java 是因为它很“热”,他们没有在 OOP 中思考。很多大类有很多静态方法,很多 RTTI in case 语句,大量使用instanceof
.
GLib 具有GObject,它是用纯 C 实现的面向对象编程。虽然您可以构建一个开始“感觉”像 OOP 的 API,但它仍然只是没有实际类的纯“C”代码(从编译器的角度来看)。如果你走得够远,以至于你开始实现面向对象的设计模式,那么无论它是用什么语言编写的,我都会称它为 OOP。这完全取决于代码的感觉以及你必须如何思考如何针对它进行编写。
过程式编程与您如何构建程序和为您的领域建模有关。仅仅因为在某些时候您实例化了一个对象,并不能单独使您的程序面向对象(即面向对象)。
区别完全是主观的。例如,如果您使用状态传递对 C 库进行编码,您正在实现某种“告诉”模式,将状态作为对象。
类可以被视为超类型。当我们从 VB3 转换到 VB6 时,我们的第一遍是查找我们使用的所有类型,然后查找所有以该类型为参数的子例程和函数。我们将它们移到类定义中,删除参数,然后进行测试,保持原始控制流不变
然后我们重构了我们的控制流以使用各种模式和面向对象的技术。
面向对象的核心是关于如何将问题分解为更小的部分,以及这些部分如何协同工作。这是关于哲学的。使用OO语言并不一定意味着用它编写的程序就是OO;使用支持开箱即用的常见 OO 概念的语言来执行 OO 会更容易。
回答这个问题:“如果程序使用一个对象,它仍然可以被认为是程序性的吗?” - 这取决于您对对象和过程编程的定义是什么。但在我看来,答案是响亮的“是”。“对象”只是 OO 哲学的一部分,“在应用程序的某个地方”使用它们并不意味着您正在做 OO。
你的问题的答案是,是的。例如。我有一个旧的 php 遗留页面要维护。大多数代码都是程序性的,但我认为如果我将 Zend Framework 插入现有的东西并编写一些我自己的类来替换一些旧代码,那么可以更容易地维护一些东西。通常,此应用程序仍以主要程序方式编写和运行,但有时会实例化和使用一个类或另一个类。我想程序和面向对象之间没有明确的界限。你可以做得更干净或更不干净。如果您的应用程序的大小和复杂性没有足够的层数,您最终也会自动获得更多的程序代码......