【问题标题】:Are functions only in non-object-oriented languages? [duplicate]函数是否仅在非面向对象语言中? [复制]
【发布时间】:2013-02-17 18:42:49
【问题描述】:

我被要求回答这个问题:

我应该把 /** 和 */ 的 Javadoc 特定注释符号放在哪里 如果我想告诉用户有关某个实例变量的详细信息 还是方法?

我的回答是:

在函数声明之上。

答案被拒绝了,原因如下:

函数使用非面向对象的语言。方法是正确的名称。

这是真的吗?

【问题讨论】:

  • 是的,确实如此。在面向对象语言中,我们将函数称为方法……因为该方法属于该特定对象……
  • 我想说你正在处理一个术语纳粹......
  • 这不是真的。它们是一回事。
  • 如果这是一个面试问题,那就跑远点。像这样痴迷于琐事的人永远不会有趣。认为自己很幸运。

标签: java oop function methods


【解决方案1】:

是否只有在非面向对象的语言中才能找到函数?

没有。有些面向对象的语言具有功能。例如,C# 是一种面向对象的语言,但它具有匿名函数

在 Java 或 C# 等面向对象语言中通常称为类型的成员的命名过程是什么?

通常它们被正确地称为方法,尽管这因语言而异。在 Java 或 C# 中,我会说“方法”。

例如,在 Visual Basic 中,函数子例程之间的区别是基于它们是否返回值,而不是基于是否返回值。它们与类型容器相关联。

JavaScript 是一种面向对象的语言,它使用原型继承而不是类继承,通常将上述所有内容称为“函数”。

人们在随便谈论 Java 或 C# 时是否经常将方法称为函数?

是的。如果我在写文档、书籍或学术文章,那么我会小心区分。尽管每个熟悉计算机编程艺术的人都会将“功能”和“方法”理解为粗略的同义词,但用普通话来说。我不会拒绝你的回答。

【讨论】:

    【解决方案2】:

    任何将其限制为特定语言的答案都存在固有缺陷。此外,您还必须有效地处理静态方法和子例程。

    计算机科学始于术语“subroutine”。可以任意执行以执行常见操作的可重复代码的小部分。在 BASIC 等早期编程语言中可以找到示例。

    函数是子程序的演变。它们接受参数,可能会也可能不会返回值。他们从数学中提取一些概念 - 输入,转换为给定的输出。

    对于对象,我们需要能够对对象调用操作,我们这样做是为了公开方法。像函数一样,它们接受参数并且可能返回值,也可能不返回值。

    静态方法旨在作用于类的所有可能对象。

    问题在于,纯粹的面向对象编程没有为函数(或实际上是子例程)的定义留下空间。发展为面向对象的语言通常会保留函数的语法来实现方法。

    Java 中,我们求助于使用“实用程序”类来提供函数作为 public static 方法。 JavaScript 中的Math 类是另一个例子。

    PHP 中,我们允许使用 function 一词来定义方法。

    C++中,我们看到了函数和方法,两者都没有界限。事实上,C++ 没有引用方法,将它们称为成员函数

    【讨论】:

      【解决方案3】:

      函数未绑定到类。

      函数类似于doStuff();

      方法类似于someThing.doStuff();SomeClass.doStuff();

      在 Java 中,没有函数这样的东西。它们都是方法。即

          class Test {
      
              public static void doSomething() {...}
              public void otherThing() {...}
      
              public static void main(String[] args) {
                  doSomething(); //implied Test.doSomething();
              }
      
              public Test() {
                  otherThing(); //implied this.otherThing();
              }
          }
      

      【讨论】:

      • 我认为这个问题超越了 Java。例如,在 Python 中,您可以同时拥有函数 方法。您想详细介绍一下什么是函数,什么是方法?
      • @Makoto 是的,但需要 FGITW :P
      • @SantoshPingale 不,我不是
      • C++ 标准使用“成员函数”术语而不是“方法”
      • @San no,这篇文章没有编辑
      猜你喜欢
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多