如何使用复合规范模式实现isGeneralizationOf?

我正在尝试实现复合规范模式,根据Fowler和Evans的规范文档。 在第一印象中,我认为
isGeneralizationOf
的实现对于连接和分离是不同的。 特别是,我认为结合的逻辑是 (1)让specX成为specA和specB的结合。然后,只有当specA和specB都是specC的泛化时,specX才是specC的推广。 我认为分离的逻辑是 (2)让specY成为specA和specB的分离。然后,如果specA或specB是specC的泛化,则specY是specC的推广。 但是,在文档的第16页上,它们显示了以下方法:
CompositeSpecification >> isGeneralizationOf: aSpecification
"True if each component is subsumed. False if any component is not subsumed."
^ (self components contains:
        [:each |(each isGeneralizationOf: aSpecification) not ]) not
我在(1)和(2)中的推理是否正确?如果这是错的,为什么呢?如果它是正确的,那么为什么作者定义了一个单独的方法来继承连接和析取规范?他们的意图是什么?     
已邀请:
例子:
The following models: the spec "a AND b" is specialization of "a OR b"

({a,b} isSpecializationOf: {a}) & ({a,b} isSpecializationOf: {b})
-> true

This following models: the spec "a OR b" is specialization of "a AND b"

({a} isSpecializationOf: {a,b}) | ({b} isSpecializationOf: {a,b})
-> false
如果你首先定义对象a和b,你可以在Squeak中获得这个语法很好,因为{}是动态数组文字的特殊语法(在类Array中定义isSpecializationOf:)。     
CompositeSpecification >> isGeneralizationOf: aSpecification
^aSpecification isSpecializationOf: self

CompositeSpecification >> isSpecializationOf: aSpecification
^self components includesAllOf: aSpecification
#includesAllOf:在Collection类中定义     

要回复问题请先登录注册