gpt4 book ai didi

oop - 这两种方法有什么区别[Smalltalk Best Practice Patterns - Kent Beck]?

转载 作者:行者123 更新时间:2023-12-03 17:15:23 24 4
gpt4 key购买 nike

如何将信息从一个对象的格式转换为另一种?
在 Kent Beck 的 Smalltalk 最佳实践模式中,他不鼓励“将所有可能需要的协议(protocol)添加到他们可能被要求的每个对象中”。相反,他建议从一个对象转换为另一个对象。
有人可以举个例子说明他所说的“压倒性对象的协议(protocol)”是什么意思吗?我试图了解这样做的坏方法,以便能够欣赏好的方法。
Reference: Smalltalk by best practice patterns - Page 28

最佳答案

正如 Beck 解释的那样,一些客户端可能需要以一种在暴露元素之前对元素进行排序的方式枚举一个集合,而另一些客户端则不需要对同一个对象进行两次迭代(可能在集合中出现两次),等等。
解决这些情况的一种方法是添加诸如 #sortedDo: 之类的方法。 , #withoutDuplicatesDo:等到集合类。迟早,这种方法会派生出用 #do: 的其他变体填充类。如#sortedSelect: , #withoutDuplicatesCollect: ,等等。问题是生成的类协议(protocol)会很快变得太大,增加了寻找正确选择器的简单任务的复杂性,增加了在搜索不够详尽时重复代码片段的风险,等等。
为避免这些副作用,该类应提供将其实例转换为其他类实例的方法。所以,而不是 #sortedDo:客户可以使用

aCollection asSortedCollection do: aBlock
或者
aCollection asSet do: aBlock
用于没有重复的迭代。
这就解释了为什么我们有丰富的转换方法: #asArray , #asOrderedCollection等。还要注意转换方法不限于集合,它们也可用于其他类: #asInteger , #asFloat , #asString , #asSymbol等等。多亏了他们,客户通常需要的服务可以通过将转换与适当的消息相结合来获得,而不会用所有可能的组合来压倒手头对象的类别,这会增加(而不是增加)所有可能性.

关于oop - 这两种方法有什么区别[Smalltalk Best Practice Patterns - Kent Beck]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66812891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com