RFC 188,Damian Conway著:Objects:Private Key and Methods

2020-08-16 15:38:30

2000年9月1日,达米安·康韦(Damian Conway)发出了一份提案№188,宣传私钥和方法的思想。

在那些日子里,Perl的面向对象编程在很大程度上依赖于散列。实际上,散列可以通过键以及对例程的引用来存储数据值,这就是使用数据属性和方法描述对象的方式。通过这里和那里的一些语法糖分,人们可以通过快捷方式来处理这样一个对象的状态和行为。

这听起来很简单(如果我们假设Hash本身不是对象!)。直到您尝试共享您的代码。当你贴出这个喝醉了的东西的那一刻,全世界的人都开始玩它,即使你睡着了,你也不知道他们会做什么。出于好意,有人可能会写下这样的话:

现在躺在舒适的沙发上,想着即使在你睡觉的时候,也会有人盯着你的代码看,你会注意到一件可怕的事情:你想知道一个%tipsy-object是在什么时候创建的,所以日期是远远不够的!那是早晨、晴朗的白天还是黑夜?没有强大的约会时间,谁能说出答案呢?

我们刚刚看到的对于每个程序员来说都是一小步,但并不少见,而对计算机科学来说则是一大飞跃:我们破解了某人的代码!

在第二天来自%的醉对象用户的所有这些咆哮之后,活下来的一课就是学到的一课:很难低估人们可以对您的代码做的假设的数量,所以不要让他们猜测,只要告诉规则,隐藏其他所有事情就行了。

在面向对象的编程中,这个非常、非常通用的概念跨越了两个不同的概念,其中一个概念被命名为封装。

简而言之,封装允许我们说";任何人都不应该接触这个…。(除非有人真的、真的想让它成为现实)。它为您提供了将您的编码工作划分到两个不同领域的方法,其中一个领域没有人,但我可以使用这个策略,而它的反面是著名的随您使用,我们将非常非常努力地避免在知情的情况下破坏任何东西。

虽然封装本身并不是一个很好的代码问题解决程序(无论如何,您都可以编写可怕的代码!)。它也不会减少bug的数量(就像它发生了一样!),但它肯定可以在重写代码期间减轻您的一些紧张情绪(这有时是解决问题的好方法),并减少组件之间的耦合(这确实减少了bug的数量,对吧?希望永不熄灭)。

在这里,受Tie::SecureHash模块方法的启发,Damian Conway提出了一种在基于散列的Object-y系统中支持封装的方法。

该提案描述了一个名为private的一元函数,该函数可以应用于单个散列条目、条目片段或整个散列:

此函数应用程序将哈希条目限制为当前包,并使所有备用的";公开";:

当然,对于前面提到的,有人真的、真的希望它发生,有一个B计划已经准备好了:

虽然这几乎不可避免地是一个非常糟糕的想法,我们以后可能都会后悔,但是应该可以指定私有散列的某些条目仍然是公开的。例如,当从遗留代码继承时,这可能是必需的。

当谈到方法时,顺便说一下,这些方法只是带有一两个转折的子例程,PRIVATE变成了前缀关键字:

Raku智慧说,赫夫曼化你的语法,因为强大的赫夫曼编码告诉你,让常见的打字内容更容易打字。

随着Raku对象系统的大修,封装问题并没有被忘记!不!。在……里面!。一个!。咬一口!(对于您刚才听到的所有线路噪音,我深表歉意)。

乐库的私人物品都标有感叹号。首先,它向读者表明码位是重要的。其次,对于属性,它充当次要符号,即#34;twigil&34;,这告诉读者这里涉及一些有趣的作用域。第三,它看起来有一定的档次。第四,…。你真的希望这里有更多的理由吗?请在评论中提出您的想法!

看到感叹号在这两种情况下的意思都很有趣,所以如果您曾经记住给定的语法,现在您可以希望地笑一笑。

另一个普遍的看法是,相似的东西应该看起来相似,不同的东西看起来应该不同,这种方法是从所做的提案演变而来的,它很好地反映了这一点(只是不要告诉任何人,类似的东西也应该看起来不同,因为这将是下一层次的智慧)。