Oop 为什么我要让程序超负荷工作?为什么不添加一个procedurename?

Oop 为什么我要让程序超负荷工作?为什么不添加一个procedurename?,oop,polymorphism,overloading,Oop,Polymorphism,Overloading,我重载过程已经有一段时间了,但最近我问自己,与只添加一个名称稍有不同的过程相比,它的实际优势是什么 所以基本上,我为什么要使用 Public Void DoSomething(Int FirstParam, String SecondParam) Public Void DoSomething(String FirstParam, String SecondParam) 代替 Public Void DoSomething(Int FirstParam, String SecondParam)

我重载过程已经有一段时间了,但最近我问自己,与只添加一个名称稍有不同的过程相比,它的实际优势是什么

所以基本上,我为什么要使用

Public Void DoSomething(Int FirstParam, String SecondParam)
Public Void DoSomething(String FirstParam, String SecondParam)
代替

Public Void DoSomething(Int FirstParam, String SecondParam)
Public Void DoSomething_V2(String FirstParam, String SecondParam)

如果有什么不同的话,那么使用不同的过程名称实际上可能会减少对调用哪个过程的混淆。

这是因为您不必不断地发明名称。为了让其他人更容易识别该函数需要两个字符串,您必须将同一个函数命名为DoSomething_TwoStrings

如果有另一个函数接受一个字符串和一个int,那么必须将其命名为DoSomething_string_int

如果要更改元素的顺序并将其创建为另一个函数,该怎么办?如果您选择将您的过程命名为V2和V1等,这将创建另一层供用户记住。V2的输入是什么,V1的输入是什么
如果不使用重载,所有这些都会创建数百个超出用户实际需要记住的名称


由于词汇表较少,函数名较小,因此程序也会变得清晰。一旦您知道IDE将明确地为您提供有关所有重载的智能感知,并且您可以选择您想要的内容,那么使用重载就很容易了,而且不会太杂乱。

您是否还记得,几个月后编写代码时,
DoSomething\u V2
就是使用两个
字符串
参数的那个
V2
是一个非常糟糕的名字

现在如果你问为什么不合理地命名它们,那么你可以从
新文件(…)
文件.getInstanceFromParentFileAndChildString(文件父,字符串子)
文件.getInstanceFromPathString(字符串路径)
文件.getInstanceFromParentandChildString(字符串父,字符串子)
File.getInstanceFromURI(URI)


这就是Objective C的发展方向,新来者对该语言最大的抱怨之一是它的冗长程度令人惊讶。

同意V2可能不好,但我并不真正相信你的观点,我不记得哪个过程是有两个字符串的。使用代码完成工具,这应该不是什么问题。相比之下,如果我有5个同名的重载过程,那么很难看到您正在查看哪个版本。虽然我也能看到许多名称略有不同的过程的问题:这不仅仅是为了编写代码,也是为了可读性。Java的原理是,如果它生成一个新的
文件
,我们称之为
新文件(…)
。如果它正在连接数据库,我们将其称为
connect(…)
。无论参数是什么,只要语义得到了充分的描述,这就足够自然了。另一方面,ObjC没有重载,在这里,人们依靠IDE来消除输入非常详细的方法名的工作,例如
[addObserver:obs-forKeyPath:path-options:opts-context:ctx]
。这使得ObjC非常可读,但同时也是一种不可或缺的IDE。哦,我意识到我没有回答一个显而易见的问题:是什么阻止了您在Java中采用ObjC方法?有两件事:1)Java不会在方法名的单词中穿插参数,使具有许多参数的方法的有意义的名称无法读取(
addobserver forkeypath with options和context(obs,path,opts,ctx)
),以及2)文化:所有ObjC代码都使用ObjC约定,所有Java代码都使用Java约定。按照惯例编写会降低项目对其他开发人员的可读性。因此,主要是您不必考虑新的(相关的)名称,并且在查找(版本的)过程时不会出现任何错误。公平点,绝对。。这是一个方便的问题。