- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将信息从一个对象的格式转换为另一种?
在 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/
我正在通读 Test Driven Development: By Example其中一个例子让我很烦。在第 3 章(人人平等)中,作者在 Dollar 类中创建了一个 equals 函数来比较两个
如何将信息从一个对象的格式转换为另一种? 在 Kent Beck 的 Smalltalk 最佳实践模式中,他不鼓励“将所有可能需要的协议(protocol)添加到他们可能被要求的每个对象中”。相反,他
我正在研究TDD by Example,到目前为止,我发现它是一本很棒的书。但有一点他告诉我们要写: // in class Money: Expression plus(Money addend)
因此,我已经完成了 Kent Beck 的书示例测试驱动开发 中的 Money 示例,并且能够使代码正常运行,直到他编写的最后一个测试为止: @Test public void testPlusSam
我正在自学 PHP 以及 TDD(使用 PHP 和 PHPUnit)。我正在读这本书Test-driven Development by Example作者:肯特·贝克。 例如,在第 3 章中,他建议
C++,未输出的预期输出取决于 students.dat 的存在。如果 students.dat 还不存在(现在还不存在),输出将是:“(infile) = 000000000 (infile.fai
我是一名优秀的程序员,十分优秀!