【问题标题】:Can someone please explain (nicely) why OOP Method Overloading is a good thing? [closed]有人可以(很好地)解释为什么 OOP 方法重载是一件好事吗? [关闭]
【发布时间】:2018-04-30 01:51:17
【问题描述】:

首先,请不要发送垃圾邮件,因为我不一定是 OOP 爱好者。也就是说,我已经断断续续做了将近 30 年的程序员,并在多个行业中创建了许多非常酷的生产代码系统/解决方案。我也完成了中断/修复、数据库开发等方面的工作。即使是 10 年的网络程序员,而不是开发人员,所以我不是一个新手,而是一个试图得到答案的人,坦率地说是躲着我。

我从 1980 年代初开始担任“C”程序员,而“C”在 2000 年代初为我提供了很好的服务(即使在今天,大多数脚本和更高级别的语言都使用“C”句法元素)。

也就是说,重载似乎违反了我所学到的“良好编码实践”的每一条原则,因为它增加了在给定条件下省略要执行的预期代码或实际运行你没有执行的例程的机会的歧义预计由于某些条件从裂缝中掉下来。通常也似乎给学习者造成了很多混乱。

我并不是说重载本身就不好,我只是想更好地理解它在实际问题中的实际应用,而不仅仅是一种提供输入验证的方法,或者只是处理来自您无法控制的其他来源的输入一个 API 或其他你不一定知道类型的东西(同样不清楚如何或为什么会实际发生)C# 有很多解析并尝试像大多数 OOP 语言一样处理这个问题。

十多年来,我还没有得到一个直截了当的、非评判性的、我敢于对这个问题说出直截了当的答案。当然,有人可以对为什么使用它提供合理的解释。

所以我向堆栈溢出专家提出了一个问题,就我个人而言,拥有一个方法/函数是否可以通过多个专有代码段以多种不同方式调用,这确实是一件好事,或者它是否只是表明缺乏良好的计划?设计软件。再说一遍,不是敲门、评判或贬低,我就是不明白……请赐教!

【问题讨论】:

  • 不要在 StackOverflow 上问这个问题。您可以在 SoftwareEngineering StackExchange 上尝试一下
  • 重载不一定是 OOP 的事情。将新签名(包括参数)视为函数名称的一部分。因此,它不必想出多余的名称,如 print_int、print_float 等。它也可以很好地与模板一起使用。
  • 这是一个很好的问题,不幸的是,机器人偏离了 stackoverflow 的主题。正如 Adrian 所写,它更适合 SoftwareEngineering。
  • 关于重载 -- C -- add_int(), add_double(), add_float(), add_long()。使用 C++,只需 add() 并提供参数。哪个看起来更易于维护?
  • 我也看不出重载如何“增加歧义”。 C++ 中的隐式转换、疯狂的函数查找和重载解析规则绝对可以。但只是超载 - 几乎没有。

标签: c# c++ methods


【解决方案1】:

我想说std::to_string 是很好地使用重载的一个很好的例子。为什么要使用不同的函数将不同的类型转换为std::string?你没有。你只想要一个 - std::to_string 并且你希望它表现得明智,无论你给出什么类型的论点 - 它就是这样做的。使用重载使客户端代码保持简单。

【讨论】:

  • 你仍然有多个函数,它们只是碰巧同名。
  • @Theodoros Chatzigiannakis - 是的。但从呼叫者的角度来看,只有to_string
  • 这是一个很好的理由 为什么?这个问题我从来没有很好的答案。而且一次都没有被嘲笑。我最初是一名“C”系统分析师和开发人员,编写过 Java、C# 和许多其他基于语言的解决方案。永远不明白为什么超载 ANYTHING 是一个好习惯。我可以忍受对象,但是超载的事情和意外结果的可能性抵消了麻烦的任何优势。
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多