【问题标题】:Why "class" for class in Java? [closed]为什么在 Java 中为类“类”? [关闭]
【发布时间】:2010-01-22 15:58:40
【问题描述】:

为什么 Java 的创建者在 Java 中为类使用名称“类”?这个词是怎么来的?

【问题讨论】:

  • 你的名字是什么?
  • 为什么他们给类命名为类????这里有什么问题?
  • 我不明白为什么这么多人对这个问题有这样的问题。如果答案对您来说显而易见,请记住英语不是每个人的第一语言。
  • @danben,所以我们应该问一下forwhileswitch也是从哪里来的?
  • @danben 我不认为“英语”是这里的主题,问题是 gurukulki 已经知道 Java 是一个 OOPL(因为他知道 class 被使用)忽略了事实上,OO最基本的概念是什么。虽然怀疑是合法的,但提出的方式会导致投票失败。他在这道题上的得分刚刚超过 60 分。

标签: java nomenclature


【解决方案1】:

Java 并没有发明名称类 - 它在之前的语言中使用过,例如 C++。

我认为“类”这个名称是指一类对象,如分类(或类型)。然后一个对象就是该类型的一个实例。

这是dictionary.com中“类”的第一个定义:

  1. 一些人或事物被认为是一个群体的原因 具有共同的属性、特征、 品质或特征;种类;排序。

所以这正好符合我们所知道的计算机科学课程——“特征/品质/特征”是领域和方法。

【讨论】:

  • Java 的设计目的是为了吸引 C++ 程序员。这意味着概念被继承了。
【解决方案2】:

责备Ole-Johan DahlKristen Nygaard,他们显然是Simula 概念的始作俑者;还有给他们灵感的Tony Hoare

根据history of Simula

随着这一追求在 1966 年夏秋两季的进行,他们越来越专注于 Tony Hoare 的创纪录类结构中蕴含的机会,该结构首次出现在 ALGOL 公告第 3 号中。 1965 年 1 月 21 日。在仔细检查了 Hoare 的唱片提案后,他们最终得出结论,尽管它显然具有许多非常有用的特性,但它并不能完全满足他们的要求。他们真正想要的是某种具有记录类属性的通用流程概念。

他们的问题的答案突然出现在 1966 年 12 月,当时引入了前缀的概念。一个过程,后来称为一个对象,现在可以被视为由两层组成:一个前缀层包含对其前任和后继的引用以及许多其他属性,以及一个包含相关对象属性的主层。除了这个重要的新特性,他们还引入了类概念,大致可以说是 SIMULA I 活动概念的高度提炼版。这个强大的新概念使得建立串联对象的类和子类层次结构成为可能。

当然,对对象进行分类的想法远远早于任何编程语言。

【讨论】:

    【解决方案3】:

    事实上,我认为“类”这个词的起源早于计算机科学领域。分类学已经存在了很长时间,我敢说它的根源是哲学中的某个地方,或者可能不那么抽象地出现在生物学中。编程语言的人只是采用了另一个领域的类比:)。

    【讨论】:

      【解决方案4】:

      类是定义,元数据;对象是实例。这是正常的 OOP 语言使用。

      【讨论】:

        【解决方案5】:

        因为它们用于“分类”相同性质的对象。

        Employee 对象不同于 Account 对象。

        所有这些concepts are the base of Object Oriented Technology。 Java 恰好是面向对象的编程,这就是他们首先使用所有这些术语的原因。

        【讨论】:

          【解决方案6】:

          请注意,Java 中的 Class 类是由反射类引入的,并非偶然。

          这里有 Class 和 Method 对象,可以让您执行以下操作:

          Class cls = java.lang.String.class;
          
          // By obtaining a list of all declared methods.
          Method[] methods = cls.getDeclaredMethods();
          
          // By obtaining a list of all public methods, both declared and inherited.
          methods = cls.getMethods();
          for (int i=0; i<methods.length; i++) {
              Class returnType = methods[i].getReturnType();
              Class[] paramTypes = methods[i].getParameterTypes();
              process(methods[i]);
          }
          
          // By obtaining a particular Method object.
          // This example retrieves String.substring(int).
          try {
              Method method = cls.getMethod("substring", new Class[] {int.class});
              process(method);
          } catch (NoSuchMethodException e) {
          }
          

          http://www.exampledepot.com/egs/java.lang.reflect/Methods.html

          换句话说,调用在编译时确定的代码。调用可选功能非常方便。

          【讨论】:

            猜你喜欢
            • 2014-07-28
            • 2011-05-21
            • 2013-08-12
            • 2016-03-10
            • 1970-01-01
            • 2013-10-21
            • 1970-01-01
            • 2014-03-13
            • 1970-01-01
            相关资源
            最近更新 更多