【问题标题】:Is encapsulation possible without OOP?没有 OOP 是否可以封装?
【发布时间】:2019-03-09 19:11:27
【问题描述】:

我在一次采访中被问到一个问题:如果没有 OOP 封装是否可行,例如用程序语言?

【问题讨论】:

  • 如果一个模块提供了一些服务,其他请求这些服务的模块(也就是客户端)无权访问未公开的数据结构。
  • 你认为struct/record是OOP还是程序性的?
  • 可能但不是在语言级别,例如在早期的 PHP 开发人员使用例如方法名称开头的 __ 表示这是私有方法 oop 这就是代码的组织方式
  • 你在采访中给出了什么答案?
  • 我回答说没有 oop 是不可能的,因为它是 oop 的重要功能之一。如果没有 oop 是可能的,那么就不需要 oop :-P

标签: oop language-agnostic encapsulation procedural-programming


【解决方案1】:

Bob Martin 表示,封装不仅可能没有 OOP,而且在 OOP 出现之前更好

这是他 2014 年在耶鲁管理学院提供的 talk 的摘录。

我们有完美的封装。在 C 中,您所要做的就是前向声明您的函数和数据结构。您不必实施它们。您将在头文件中转发声明它们,然后在 C 文件中实现它们。你的用户会#include你的头文件。他们看不到您的实施。完美封装。您的任何用户都无法看到您的任何数据值。他们所能看到的只是你的函数签名。他们可以看到您的数据结构的名称,但看不到您的数据结构中的任何成员。绝对完美的封装。

【讨论】:

  • 但他们问的是一般意义上的问题,而不是特定的语言
  • 这在某种程度上是一个弱概念:通过混淆进行封装。如果用户了解内部结构,则没有什么可以阻止通过使用适当制作的标头而不是公共标头来访问底层数据。在 Smalltalk 等一些语言中,您只能通过向另一个对象发送消息来与另一个对象交互,无法通过 *((char *) foo+offset) 访问其数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2012-09-04
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
相关资源
最近更新 更多