1

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)の私の推論は正しいですか?それが間違っているのなら、それはなぜですか?それが正しければ、なぜ作者は接続詞と論理和の両方の仕様によって継承される単一のメソッドを定義したのですか?ここでの彼らの意図は何ですか?

4

2 に答える 2

0
CompositeSpecification >> isGeneralizationOf: aSpecification
^aSpecification isSpecializationOf: self

CompositeSpecification >> isSpecializationOf: aSpecification
^self components includesAllOf: aSpecification

#includesAllOf: クラス Collection で定義されています

于 2011-02-15T21:34:39.680 に答える