【问题标题】:History of access control modifiers such as public/private/protected访问控制修饰符的历史,例如 public/private/protected
【发布时间】:2010-11-22 23:55:08
【问题描述】:

这些关键字和概念是如何产生的?使它们出现的力量和问题是什么?拥有它们的第一种语言是什么?

实际上,不仅仅是public/private/protected,而是执行某些规则的整个关键字范围(abstractfinalinternal)。

但是,请不要假设事情。如果您至少知道部分答案,请回答,或者如果您经历过那些时刻,请回答。非常感谢参考。

【问题讨论】:

  • 我们仍然需要 interface 的来源。我只是希望它不是 OLE/COM。
  • 关于这个主题的信息缺乏让我很惊讶。好吧,至少我似乎不容易找到它。

标签: oop history


【解决方案1】:

Simula (1967),被认为是第一个 OO 语言,具有称为 protected and hidden 的修饰符。我假设 public 是默认值,我不记得了。它还使用虚拟

而且,感谢 Pavel,Simula 介绍了 classthisnew、downcasting 和引用类型。

Smalltalk (1980) 是一种较晚但更为基础的 OO 语言,它为我们提供了响应 消息方法。这基本上与虚拟功能具有相同的功能。消息和类后来在 C(非 OO)中被模仿,以赋予 Windows API 多态行为。但是仍然需要丑陋的 switch 语句和函数指针来代替继承。

据我所知,Properties 的第一次使用是在 Delphi 中(Object Pascal,

【讨论】:

  • 这才是真正的起源。 Simula 的hidden 就是我们今天所说的privateprotected 就是这样,而且默认确实是公开的。 Simula 还介绍了术语“类”和“对象”在今天的 OOP/OOD、类的单一继承、virtual 方法的术语和概念、字段访问和方法调用的点表示法中使用的含义,检查向下转换和类型切换的想法,以及类是具有固有引用标识的“引用类型”的概念(与其他类型的“值类型”相反)。
  • 哦,我也忘记了将广义 I/O 流作为对象的想法,以及流不必只是文件的想法——在 Simula 中,字符串本身就是流(所以它们'有点像 C# 中的StringBuilder)。
  • ... 以及 new 关键字用于实例化对象,this 用于在方法中引用对象本身。
  • 这篇论文有很多关于带来这些东西的设计过程的信息:portal.acm.org/citation.cfm?id=800025.1198392 - 但是,我不确定 PDF 是开放给所有人访问还是需要订阅。
  • Pavel,您仍然可以开始自己的答案,也可以将您的 cmets 集成到 Peters 的答案中。
【解决方案2】:

public、private 和 protected access modifiers 来自 C++。 It seems 公有和私有已经存在于“C with classes”中,这是 C++ 的短暂前身。这可能在The design and Evolution of C++中有详细说明。

认为 abstract 和 final 来自 Java,internal 来自 C#。

【讨论】:

  • 感谢您的链接。虽然不完全完整,但它提供了一些背景知识。
【解决方案3】:

这类事情始于多个语言设计者问“这个概念的简单、合乎逻辑的名称是什么”?然后,随着时间的推移,某些名字变得流行(有时是因为它们是好名字,有时只是因为)。再加上 20 年,大多数人最终都会选择相同的名字,这取决于他们所看到的。

一个类似的问题,也许是询问如何将新词添加到(比如说)英语中。

【讨论】:

  • 我实际上对产生这个概念的过程更感兴趣,而不是名称的选择。名字很重要,但有趣的是,看看他们当时有什么问题让他们觉得需要这个概念。也许有一个伟大的项目在此期间被遗忘了。谁知道呢。
  • Simula,顾名思义,是一种为模拟过程而设计的语言——最初(Simula I)它以“演员”为中心,但后来设计师认为这个概念可以进一步推广,并且因此类/对象诞生于 Simula 67。
【解决方案4】:

对于 C++,私有和公共保护的起源来自 Stroustrup 对 C With Classes 的实验之前,但来自更古老的系统 - Cambridge CAP 计算机。这在“C++ 的设计与演进”第 2.10 节中有所描述。

至于受保护,它的过去比较模糊,我没有很好的参考。

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2011-03-07
    • 1970-01-01
    • 2021-11-23
    • 2012-04-19
    • 2016-04-08
    • 2014-10-20
    相关资源
    最近更新 更多