【发布时间】:2020-05-23 18:52:10
【问题描述】:
据我所知,过程编程使用过程和函数或子例程。它提供了有关如何操作的分步说明。尽管另一方面我并不完全确定面向对象。我所看到的是它使用“对象”并且几乎相同?有人可以澄清并解释对象到底是什么吗?
【问题讨论】:
标签: oop paradigms procedural-programming
据我所知,过程编程使用过程和函数或子例程。它提供了有关如何操作的分步说明。尽管另一方面我并不完全确定面向对象。我所看到的是它使用“对象”并且几乎相同?有人可以澄清并解释对象到底是什么吗?
【问题讨论】:
标签: oop paradigms procedural-programming
将所有编程都视为管理两个基本概念之间的关系:
状态和行为。状态是程序的数据。行为就是逻辑。
过程式编程基于分别实现这两个概念。状态保存在数据结构中。行为保存在函数(也称为过程或子例程)中。因此,过程应用程序将数据结构传递给函数以产生一些输出。
面向对象编程基于同时实现这两个概念。状态和行为合并为一个新概念:对象。因此,OO 应用程序可以通过调用 Object 来产生一些输出,而无需传递数据结构。
OO 的优点包括潜在的信息隐藏:如果调用者不需要传递任何数据结构,那么调用者就不需要知道任何数据结构,因此可以与数据格式完全解耦。
过程逻辑和对象逻辑之间的一个根本区别在于处理选择的方式。过程使用分支逻辑处理选择:熟悉的if/else 语法。对象更喜欢使用多态性来处理选择。
Procedural 和 OO 之间也有相似之处。两者都代表了一种命令式编程风格,这意味着它们通过改变其状态(无论是在数据结构内还是在对象内)并提供有关如何计算输出的逐步说明来操作。命令式编程就像写食谱。
最后请注意,这些是理想主义或“纯粹”的定义。在现实世界中,范式会合并。如果有的话,您很少会看到纯 OO 应用程序。来自多个范式的特征将被组合,无论好坏。
不同之处在于,对象同时拥有状态和功能,而函数不拥有状态。
考虑游戏中的敌人。该敌人可能能够做一些事情(即:功能),例如移动和攻击。同时,该敌人还拥有当前生命值等数据。
在过程式编程中,您必须不断将敌人的状态作为参数传递。面向对象编程的不同之处在于状态会自动传递给函数(现在称为方法)。
【讨论】: