Question

Je suis mise en œuvre du modèle de cahier des charges. Le NotSpecification semble simple au premier abord:

NotSpecification.IsSpecialCaseOf(otherSpecification)
    return !this.specification.isSpecialCaseOf(otherSpecification)

Mais cela ne fonctionne pas pour toutes les spécifications:

Not(LesserThan(4)).IsSpecialCaseOf(Equals(5))

Cela devrait retourner false au lieu de vrai. Jusqu'à présent, je pense que la seule façon d'accomplir la isSpecialCaseOf la NotSpecification est de mettre en œuvre la remainderUnsatisfiedBy (de subsomption partielle dans le document sur le modèle de cahier des charges). Mais peut-être que je manque quelque chose de plus simple, ou un aperçu logique qui rend cette inutile.

Question: Y at-il une autre façon de mettre en oeuvre à ne pas utiliser remainderUnsatisfiedBy

?
Était-ce utile?

La solution

J'ai essayé de mettre en œuvre ce en Java et il est allé sans problème et remainderUnsatisfiedBy (). Vous avez probablement un problème dans votre mise en œuvre, voici le mien:

public boolean isSpecialCaseOf(Specification spec) {
    if (spec instanceof GreaterThan) {
        return ((GreaterThan) spec).boundary > this.boundary;
    }
    return false;
}

Le crochet est dans la méthode Non (), qui doit construire correctement type opposé de son argument.

static final Specification Not(Specification spec) {
    return spec.not();
}

Alors tout ce que je besoin est d'avoir mise en œuvre correcte de ne pas () pour chaque spécification, par exemple pour LesserThan:

    @Override
public Specification not() {
    return new GreaterThan(boundary);
}

Si vous avez des problèmes, s'il vous plaît fournir votre implémentation de GreatherThan.isSpecialCaseOf et de ne pas, je vais essayer de vous aider.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top