Как реализовать isGeneralizationOf с помощью шаблона составной спецификации? - PullRequest
1 голос
/ 11 февраля 2011

Я пытаюсь реализовать составной шаблон спецификации согласно Документу спецификаций Фаулера и Эванса.

На первый взгляд, я думал, что реализация isGeneralizationOf будет отличаться для соединения и дизъюнкции.

В частности, я думал, что логика для соединения будет

(1) Пусть specX - это соединение specA и specB. Тогда specX является обобщением specC, только если specA и specB являются обобщением specC.

И я думал, что логика для дизъюнкции будет

(2) Пусть specY будет дизъюнкцией specA и specB. Тогда specY - это обобщение specC, если specA или specB - это обобщение 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)? Если это не так, то почему? Если это правильно, то почему авторы определили один метод, который должен быть унаследован спецификациями соединения и дизъюнкции? Каково их намерение здесь?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

Примеры:

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

Синтаксис можно получить таким приятным в Squeak, если вы сначала определите объекты a и b, поскольку {} - это специальный синтаксис для литералов динамического массива (определите isSpecializationOf: in classArray).

0 голосов
/ 16 февраля 2011
CompositeSpecification >> isGeneralizationOf: aSpecification
^aSpecification isSpecializationOf: self

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

# includesAllOf: определяется в классе Collection

...