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

时间:2011-09-13 09:06:30

标签: coding-style smalltalk gnu-smalltalk public-method

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

与使用显式访问修饰符进行控制相比,此方法是否有任何好处 访问方法调用?

4 个答案:

答案 0 :(得分:14)

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

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

一些优点:

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

第一个问题是私有/受保护的访问修饰符是什么?从根本上说,它不是关于安全或安全。它是关于向用户公开正确的界面。从那开始,具有protected / private类别和专门针对该类别的语言构造之间几乎没有区别。

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

除此之外,我认为私人/受保护的可见性不是这个problem

的良好答案。

答案 3 :(得分:-1)

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