12

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

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

4

4 回答 4

16

事实上,Smalltalk 的方式是将私有方法放在“私有”类别中。这表明您不应该使用这些方法,但当然不会强制执行此操作。

这是设计使然 - 这是一个功能,而不是错误。Smalltalk 从一开始就被设计成一个开放系统。

一些优点:

  • 如果我只是必须——也许库设计者没有预见到需要公开一些我必须拥有的特定东西——我仍然可以调用那些私有方法。显然,这不是一件轻而易举的事情:相反,明智、谨慎地知道这是一种战术解决方案。
  • 语言简洁。
  • (根据 Alexandre Jasmin 的评论)Smalltalk 没有区分您(程序员)可以做什么和语言/环境可以做什么。这意味着 Smalltalk-the-image 公开了您构建自己的检查器/调试器/任何东西所需的所有东西,而无需使用我们可以做到这一点但你不能技术提供特殊工具。
于 2011-09-13T09:53:14.327 回答
6

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

于 2011-09-17T17:45:16.890 回答
3

第一个问题是私有/受保护的访问修饰符是关于什么的?从根本上说,这与安全或安保无关。它是关于向用户展示正确的界面。从那开始,拥有受保护/私有类别和专门为此而设计的语言结构几乎没有什么区别。

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

除此之外,我认为私有/受保护的可见性不是解决这个问题的好方法

于 2011-09-15T08:07:31.787 回答
-1

至少,Smalltalk 应该具有以“下划线”开头的方法名称的文本约定,禁止在对象本身之外调用。不幸的是,我认为不允许将“下划线”作为方法名称的第一个字符。

于 2011-09-13T14:33:36.237 回答