History of access control modifiers such as public/private/protected
这些关键词和概念是如何产生的?使他们出现的力量和问题是什么?第一种语言是什么?
实际上,这不仅仅是关于public/private/protected,而是执行某些规则的整个关键字范围(abstract、final、internal)。
但是,请不要想当然。如果你至少知道答案的一部分,那就回答;如果你经历过那些时刻,那就回答。非常感谢参考文献。
- 好问题!
- 我们仍然需要一个接口的来源。我只是希望它不是OLE/COM。
- 我真的很惊讶关于这个主题的信息的缺乏。嗯,至少我似乎不容易找到它。
Simula(1967)被认为是第一种OO语言,它有被称为保护和隐藏的修饰符。我想公众是默认的,我不记得了。它还使用虚拟。
而且,由于pavel的帮助,Simula引入了类中最重要的关键字(和概念),这个、新的、向下转换和引用类型。
smalltalk(1980),一种后来更基本的OO语言,为我们提供了响应消息的方法。这基本上是与虚拟函数相同的功能。消息和类随后在C(非OO)中被模仿,以提供WindowsAPI多态行为。但是仍然需要丑陋的switch语句和函数指针来替换继承。
据我所知,第一次使用属性是在delphi中(object pascal,<1994)。
- 这才是真正的起源。Simula的hidden就是我们今天所说的private,protected就是它,违约事实上是公开的。Simula还介绍了"class"和"object"这两个术语在今天的oop/ood中的含义,类的单继承,virtual方法的术语和概念,字段访问和方法调用的点符号,检查下推和类型切换的概念,以及类是具有内在的"引用类型"的概念。引用标识(与"值类型"的其他类型不同)。
- 哦,我也忘记了将通用I/O流作为对象的想法,以及流不必只是文件的想法——在Simula中,字符串本身就是流(因此它们有点像c中的StringBuilder)。
- …还有new关键字来实例化对象,this从方法中引用对象本身。
- 本文提供了很多关于这些东西的设计过程的信息:portal.acm.org/cidenation.cfm?ID=800025.1198392-我不确定PDF是否对每个人都开放,或者需要订阅。
- 帕维尔,谢谢你的加入。我整合了大部分。
- 哇,好消息。谢谢你们俩。帕维尔,我只能+1你的评论,对不起。我真的很高兴我问了这个问题。
- 帕维尔,你仍然可以开始自己的答案,并将你的评论和彼得斯的答案结合起来。
公共、私有和受保护的访问修饰符来自C++。在"C类"中,"公有"和"私有"似乎已经存在,C++的短命先驱。这可能在C++的设计和进化中有详细说明。
我认为抽象和最终来自Java,内部来自C语言。
- 谢谢你的链接。虽然不完全完整,但它提供了一些背景。
对于C++,私有和公共保护的起源来自于Stroustrup对C类的实验,但是从一个更旧的系统——剑桥CAP计算机开始。这在《C++设计与演化》第2.10节中有所描述。
至于受保护的人,他们的过去比较模糊,我没有很好的参考资料。
这类事情始于多个语言设计师问"这个概念的简单逻辑名称是什么?"然后,随着时间的推移,某些名字变得流行起来(有时因为它们是好名字,有时仅仅因为)。再加上20年,大多数人最终会根据他们所看到的情况选择相同的名字。
一个类似的问题,也许是问如何在英语中添加新词。
- 事实上,我更感兴趣的是导致这个概念的过程,而不是名字的选择。名字很重要,但有趣的是,看看他们当时有什么问题让他们觉得需要这个概念。也许有一个伟大的工程在这期间被遗忘了。谁知道呢。
- 顾名思义,Simula是一种为过程模拟而设计的语言——最初(Simula I)它以"参与者"为中心,但后来设计者认为概念可以进一步推广,因此类/对象诞生在Simula 67中。