Coding style Smalltalk公共方法与私有/受保护方法
我注意到Smalltalk语言没有私有/受保护方法的概念。所有方法都是公开的。来自Java/C++的背景,我认为这是该语言的一个基本弱点,因为在Smalltalk中创建的任何应用程序都会完全接受操作。我想您可以依靠命名约定来记录公共API和前缀方法,将它们表示为私有(我相信Squeak可以做到这一点),但它仍然是完全开放的 与使用显式访问修饰符进行控制相比,这种方法有什么好处吗Coding style Smalltalk公共方法与私有/受保护方法,coding-style,smalltalk,gnu-smalltalk,public-method,Coding Style,Smalltalk,Gnu Smalltalk,Public Method,我注意到Smalltalk语言没有私有/受保护方法的概念。所有方法都是公开的。来自Java/C++的背景,我认为这是该语言的一个基本弱点,因为在Smalltalk中创建的任何应用程序都会完全接受操作。我想您可以依靠命名约定来记录公共API和前缀方法,将它们表示为私有(我相信Squeak可以做到这一点),但它仍然是完全开放的 与使用显式访问修饰符进行控制相比,这种方法有什么好处吗 访问方法调用?实际上,Smalltalk的方法是将私有方法置于“私有”类别中。这表明您不应该使用这些方法,但当然不会强
访问方法调用?实际上,Smalltalk的方法是将私有方法置于“私有”类别中。这表明您不应该使用这些方法,但当然不会强制执行 这是经过设计的-这是一个功能,而不是一个bug。Smalltalk从一开始就被设计成一个开放系统 一些优点:
- 如果我必须——也许库设计者没有预见到需要公开我必须拥有的特定东西——我仍然可以调用这些私有方法。显然,这不是一件容易的事情:而是明智、谨慎地,知道这是一个战术解决方案
- 语言简单
- (根据Alexandre Jasmin的评论)Smalltalk不区分程序员可以做什么和语言/环境可以做什么。这意味着Smalltalk图像公开了您构建自己的检查器/调试器/任何东西所需的所有东西,而无需使用我们可以做到这一点,但您无法使用任何技术提供特殊工具
<> P>私有化和受保护的方法实际上是C++、java和C语言等语言的一个明显弱点。他们基本上对用户说:我不想学习和发展。这样做的结果(以及更早期的绑定)是,这些语言需要更多的BDUF,因此对于现代(敏捷)开发过程的可用性要低得多 另一个优点是实时检查/操作/调试系统状态。即使是私有实例变量也可以使用#instVarNamed进行访问:如果需要的话
#storeString
通常会产生一些使用#instVarAt:put:
的东西,这是另一种危险的工具。David Parnas,1970,关于将系统分解为模块时使用的标准。C、 1969年至1973年,通过不在头文件中公开函数来控制可见性。@SailatePlanet Smalltalk方法是一种折衷方法,允许用户在常见情况下将组件视为一个黑盒子,但仍然允许用户在您未涵盖/预见的情况下自由地执行他们可能需要执行的任何操作(至少对我来说,这似乎总是会出现)。在Smalltalk中,许多限制其他语言用户的因素都依赖于信任。这也是我使用Smalltalk的原因之一——我知道我可以自由地以我需要的任何方式来塑造系统,而不仅仅局限于那些现成的。@Sean我认为这与其说是一种妥协,不如说是Smalltalk实现的理想的公理:开放系统。强调在某些Smalltalk方言的选择器中允许使用。从历史上看,下划线用作左箭头(赋值运算符)的替代.使用私有类别以更自然的smalltalk方式实现了这一点。我会参考公认的答案来解释为什么这不是一个好主意。这会鼓励编写糟糕的代码。开发人员中的一些人似乎非常反对拥有大量类的想法,但这正是OOP的全部内容,拥有大量可供使用的小型类你可以重复使用。在这些语言中它不是意识形态的。你可以,但不能使用其他人编写的库。我想你不知道你在说什么。我自己的方法可能使用默认访问与其他库有什么关系?私有和受保护的方法用于隐藏内部状态。状态由属性定义,你可以r方法应该是公共的,如果您觉得它们应该是私有的,那么您可能应该创建一个不同的类。面向对象理论不支持私有方法,我认为这只是一个由语言引入的概念,它是不良做法、无法处理和不稳定代码的主要来源之一。@Angel,正如我在s在使用Java和Delphi 10年后,改用Smalltalk,私有和受保护的方法扼杀了可进化性和可重用性。你可能想尝试一下,学习真正的OO。fd8s0+1方法可以用在很多方面。作为对象接口的一部分提供服务是最突出的。但方法也可以是最低级别分解的一部分。额外ct private方法是一种非常有用的重构方法,当您想命名其他方法的某个部分时—使其更具可读性。但是,如果开始使用此private方法,它实际上会扼杀这种情况下的可进化性。private是一个有用的概念,即使在方法级别上也是如此。可能这种对private方法的使用是由复杂的企业代码组合而成的虽然Java等语言的表达能力较低,但它也有自己的用途。