Domanda

Sto cercando di implementare il modello di specifica composita, secondo il Documento delle specifiche di Fowler ed Evans.

Alla prima impressione, ho pensato all'implementazione di isGeneralizationOf sarebbe diverso per congiunzione e disgiunzione.

In particolare, ho pensato che la logica per la congiunzione sarebbe stata

(1) Sia Specx la congiunzione di SPECA e SPECB. Quindi, SPECX è una generalizzazione di SPECC solo se sia SpeCA che SPECB sono una generalizzazione di SPECC.

E ho pensato che la logica per la disgiunzione sarebbe stata

(2) Sia la SPECY la disgiunzione di SPECA e SPECB. Quindi, Specy è una generalizzazione di SPECC se SPECA o SPECB è una generalizzazione di SPECC.

Tuttavia, a pagina 16 del documento, mostrano questo metodo:

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

Il mio ragionamento in (1) e (2) è corretto? Se è sbagliato, perché? Se è corretto, allora perché gli autori hanno definito un singolo metodo da ereditare sia dalle specifiche congiunte che di disgiunzione? Qual è il loro intento qui?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top