Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coding style Smalltalk公共方法与私有/受保护方法_Coding Style_Smalltalk_Gnu Smalltalk_Public Method - Fatal编程技术网

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

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

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

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

这是经过设计的-这是一个功能,而不是一个bug。Smalltalk从一开始就被设计成一个开放系统

一些优点:

  • 如果我必须——也许库设计者没有预见到需要公开我必须拥有的特定东西——我仍然可以调用这些私有方法。显然,这不是一件容易的事情:而是明智、谨慎地,知道这是一个战术解决方案
  • 语言简单
  • (根据Alexandre Jasmin的评论)Smalltalk不区分程序员可以做什么和语言/环境可以做什么。这意味着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等语言的表达能力较低,但它也有自己的用途。