是否有一个Java方法的名称被认为与任何特定的类分开?
作者:互联网
这是一个术语问题,很难问!
让我举个例子吧.假设我正在写一个符号微分算法.我有一个抽象类Exp,它是一堆表达式类型(总和,整数等)的超类.有一个抽象方法派生类,使得e.derivative()被假定为表达式e的派生类. Exp的所有具体子类(在此处设想整个层次结构)都实现了派生方法,该方法捕获了有关如何区分该类型的表达式的知识.给定的方法通常会通过组合子表达式的导数来计算表达式的导数.
该示例的细节并不重要.重要的是,所有这些分散的方法都可以视为一种(递归)算法.并非所有方法都适用,但其中许多方法都适用(将重载用于在根本上不同的操作中重用同一方法名被认为是一个坏主意).问题是,“导数”一词是什么,它被视为一个函数?这不是一种方法;在另一种语言中,它将是一个函数,并且各种子句(与和做什么,与整数做什么)将位于同一位置.我不在乎哪种方法或语言更好,或者该样式是否可以在Java中使用.我只想知道将“衍生”的哪个术语视为单个函数或过程(该思想不仅限于函数式编程,也不是递归的关键功能).当我告诉某人今天的工作时,我想说:“我尝试实现符号差分__,但是我想到的每种算法都行不通.”什么是空白?
我认为其他OO语言也会出现相同的问题,但是Java是我最熟悉的语言.我对此非常熟悉,以至于我确定没有标准术语,但是我想在得出这个结论之前,我会先问一下我们的专家小组.
解决方法:
听起来像“正常”subtype polymorphism.子类/实现可以完成工作,但接口是以基本类型定义的.与“散布”方法相反,它是Visitor Pattern(“和Java一样好”)或模式匹配(在Java中不是)或较大的开关/ if-else控制器.我不确定我是否真的可以称呼其他任何东西.
附录:您可能会觉得Are Scala case-classes a failed experiment?很不错.尤其是,关于“列”与“行”组织以及每种方法的“局部差异”的评论有:
…in OO, you divide by rows. Each row is a module, called a class. All the functions pertaining to that data variant are grouped together. This is a reasonable way of organizing things, and it’s very common. The advantage is that’s easy to add a data variant … However the disadvantage is that it’s hard to add new functions that vary by data type. You have to go through every class to add a new method.
标签:oop,terminology,java,methods 来源: https://codeday.me/bug/20191105/1996437.html