Smalltalk公共方法与私有/受保护方法

Des*_*net 10 coding-style smalltalk gnu-smalltalk public-method

我注意到Smalltalk语言没有私有/受保护方法的概念.所有方法都是公开的.来自Java/C++背景,我认为这是语言的一个基本弱点,因为在Smalltalk中创建的任何应用程序都将完全开放于操作.我猜你可以依靠命名约定来记录公共API和前缀方法,以指示它们是私有的(我相信Squeak会这样做),但它仍然是完全开放的.

这种方法比使用显式访问修饰符来控制对方法调用的访问有什么好处吗?

Fra*_*rar 14

实际上,Smalltalk的方法是将私有方法置于"私有"类别.这表明您不应该使用这些方法,但当然不会强制执行此操作.

这是设计 - 它是一个功能,而不是一个错误.Smalltalk从一开始就被设计为一个开放系统.

一些优点:

  • 如果我只是必须 - 也许图书馆设计师没有预见到需要揭露一些我必须拥有的特定事物 - 我仍然可以称之为私人方法.显然,这不是一个人轻描淡写的事情:相反,谨慎,谨慎,知道这是一个战术解决方案.
  • 语言简洁.
  • (根据Alexandre Jasmin的评论),Smalltalk对您,程序员可以做什么以及语言/环境可以做什么没有区别.这意味着Smalltalk-the-image暴露了您构建自己的检查器/调试器/所需的所有东西,而无需使用我们可以做的这个但你不能使用的技术来提供特殊工具.


Ste*_*ont 6

私有方法和受保护方法实际上是 c++、java 和 c# 等语言的一个显着弱点。他们基本上对他们的用户说:我不想学习和发展。这样做的结果(以及更早的绑定)是这些语言需要更多的 BDUF,因此对于现代(敏捷)开发过程的可用性要低得多。

  • 状态由属性定义,您的方法应该是公共的,如果您觉得它们应该是私有的,那么您可能应该创建一个不同的类。面向对象理论不支持私有方法,我认为这只是一个由语言引入的概念,它是不良实践、不可维护和不可测试代码的主要来源之一。 (2认同)
  • @Angel,正如我在使用 Java 和 Delphi 10 年后转向 Smalltalk 时所看到的那样,私有和受保护的方法会扼杀可演化性和可重用性。您可能想尝试一下并学习真正的面向对象。fd8s0+1 (2认同)

mat*_*thk 5

第一个问题是私有/受保护的访问修饰符是什么?从根本上来说,这与安全或保障无关。它是关于向用户公开正确的界面。从这里开始,保护/私有类别和专门为此构建的语言结构之间没有什么区别。

我什至会说,拥有私有/受保护的可见性修饰符会给问题带来比它实际解决的更复杂的问题。

除此之外,我认为私有/受保护的可见性不是这个问题的一个很好的答案