是否有一个被认为与任何特定类分开的java方法的名称?

时间:2010-12-07 03:21:56

标签: java oop methods terminology

这是一个术语问题,很难问!

让我举个例子。假设我正在编写一个符号微分算法。我有一个抽象类Exp,它是一堆表达式类型(sums,积分等等)的超类。有一个抽象方法导数,使得e.derivative()被认为是表达式e的导数。 Exp的所有具体子类(想象一下这里的整个层次结构)实现了一种衍生方法,该方法捕获了如何区分该类型表达式的知识。给定方法通常通过组合子表达式的导数来计算表达式的导数。

示例的细节并不重要。重要的是所有这些分散的方法都可以被认为是一个(递归)算法的一部分。所有方法都不是这样,但对于其中许多方法都是如此(并且使用重载来为根本不同的操作重用相同的方法名称被认为是一个坏主意)。问题是,“衍生物”一词被认为是一个单一的功能?这不是一种方法;在另一种语言中它将是一个功能,各种条款(如何处理总和,如何处理积分)将在同一个地方。我不关心哪种方法或语言更好,或者这种风格是否可以在Java中使用。我只是想知道什么术语用于'衍生'被认为是单个函数或过程(这个想法不仅限于函数式编程,递归也不是一个关键特性)。当我告诉别人我今天做了什么时,我想说“我试图实现一个符号 - 差异 __ ,但我想到的每个算法都不起作用。”什么在空白?

我认为其他OO语言也会遇到同样的问题,但Java是我最熟悉的。我对它很熟悉,我很确定没有标准术语,但我认为在得出这个结论之前我会先问好我们的专家。

4 个答案:

答案 0 :(得分:2)

听起来像“正常”subtype polymorphism。子类/实现可以完成工作,但接口是以base-type定义的。这种“分散”方法与Visitor Pattern(“和Java一样好”)或模式匹配(不是Java)或者一个大的manky switch / if-else控制器形成对比。我不确定我真的会把它称为聚合物。

附录:你可能会发现Are Scala case-classes a failed experiment?很好看。特别是,每个方法的“专栏”与“行”组织和“地方差异”的评论都有:

  
    

...在OO中,您按行划分。每行都是一个模块,称为类。与该数据变体相关的所有功能都组合在一起。这是组织事物的合理方式,而且非常普遍。优点是可以轻松添加数据变量......但缺点是很难添加因数据类型而异的新功能。你必须通过每个类来添加一个新方法。

  

答案 1 :(得分:1)

我不确定这是否是您正在寻找的但我想我可以用设计模式术语来回答这个问题。你的例子听起来像GoF Strategy Pattern。这是一个example of the Strategy Pattern implemented in Java

答案 2 :(得分:1)

相反,我认为“方法” 是Java上下文中的标准术语。

答案 3 :(得分:0)

多态函数可以应用于不同类型的值。该函数可以通过多种Java方法实现。