我注意到Smalltalk语言没有私有/受保护方法的概念。所有方法都是公共的。作为一个Java/C++背景的人,我认为这是一种根本性的弱点,因为任何在Smalltalk中创建的应用程序都可以完全被操纵。我猜你可以依靠命名约定来记录公共API,并在方法前缀中指示它们为私有(我相信Squeak就是这样做的),但它仍然是完全开放的。
相对于使用显式访问修饰符控制方法调用的访问权限,这种方法是否有任何好处?
我注意到Smalltalk语言没有私有/受保护方法的概念。所有方法都是公共的。作为一个Java/C++背景的人,我认为这是一种根本性的弱点,因为任何在Smalltalk中创建的应用程序都可以完全被操纵。我猜你可以依靠命名约定来记录公共API,并在方法前缀中指示它们为私有(我相信Squeak就是这样做的),但它仍然是完全开放的。
相对于使用显式访问修饰符控制方法调用的访问权限,这种方法是否有任何好处?
实际上,Smalltalk的做法是将私有方法放在“private”类别中。这表示您不应该使用这些方法,但当然并没有强制执行。
这是设计上的考虑 - 这是一种特性而不是缺陷。从一开始,Smalltalk就被设计成一个开放的系统。
一些优点:
私有和受保护的方法实际上是像C++、Java和C#这样的语言的一个重要弱点。它们基本上告诉其用户:我不想学习和发展。这样做的后果(以及更多的早期绑定)是,这些语言需要更多的BDUF,因此对于现代(敏捷)开发过程来说可用性较差。
#storeString
经常会产生使用#instVarAt:put:
的代码,这也是其中一个危险的工具。 - Frank Shearar