TP Rule Q1

Programmation Avancée

Moderator: douinj

Post Reply
coste_v
Posts: 16
Joined: 18 Oct 2021 10:53

TP Rule Q1

Post by coste_v » 26 Dec 2021 3:27

Bonsoir et bon Noël à tous,

Je me trouve devant un souci existentiel à la Question 1 du TP Rule.
Dans la classe de tests unitaire, on peut trouver la méthode testTableDeVeriteNoneNone(). Plusieurs endroits me font penser que je n'ai pas bien compris quel devait être le résultat attendu par la méthode isSatisfiedBy() de la classe None.
Pour moi, cette méthode soit retourner 'true' si toutes les conditions sont fausses et 'false' si l'une d'elle est vrai.
Si c'est bien le cas, je ne comprends pas les lignes suivantes :

Code: Select all

       
       assertTrue(none.isSatisfiedBy(null));
        CompositeSpecification<Object> nonne = new None<>().add(none);
        assertTrue(nonne.isSatisfiedBy(null));
        
En effet, on a un objet none qui retourne vrai (puisque c'est ce que suggère le premier assertTrue).
On construit un nouvel objet nonne qui ne contient qu'une condition : l'objet none mentionné ci-dessus et qui donc est une condition Vraie. Dans ce cas, nonne.isSatisfiedBy(null) devrait retourner 'false'. Or le dernier assertTrue semble indiquer que l'on doit s'attendre à Vrai.

Tout cela est bien abstrait et j'en suis désolé, j'espère que cela fera sens pour l'un d'entre vous.

Voilà voilà

douinj
Posts: 462
Joined: 18 Mar 2009 15:46

Re: TP Rule Q1

Post by douinj » 26 Dec 2021 14:33

Bonjour,

Cette question se posait déjà l'an dernier ... Ce None est plus riche que prévu... et pour "simplifier"

La solution retenue est que : None est satisfaite si toutes les feuilles du composite et uniquement sont fausses,

ce qui explique les assertions ci-dessous ...

Code: Select all

   none.isSatisfiedBy(null)  la feuille n'est pas satisfaite

   nonne.isSatisfiedBy(null) idem
Cela donne une sémantique parmi d'autres....

ici nonne( none.isSatisfiedBy(null)->true) pouvait() répondre faux ...

Mais cela reste bien entendu un sujet de discussion ...

Bon tp_rules_q1


L'an dernier ...

viewtopic.php?f=40&t=20284&sid=1fa653f8 ... ab5900efe2

viewtopic.php?f=40&t=20297&p=45202&hili ... 4b9#p45202

coste_v
Posts: 16
Joined: 18 Oct 2021 10:53

Re: TP Rule Q1

Post by coste_v » 26 Dec 2021 19:31

Je crois avoir compris (mais pas encore réglé le problème).
Mais cela m'amène à un autre cas dans la méthode de test testReflectMayBe():

Code: Select all

assertTrue(maybe.isSatisfiedBy(null) || !maybe.isSatisfiedBy(null));
les deux maybe.isSatisfiedBy(null) sont complètements indépendants, si bien que celui de gauche peut être FALSE et celui de droite TRUE, ce qui nous donne un "FALSE, !TRUE". On ne peut donc jamais être sûr que l'on ait un TRUE dans la méthode assertTrue().
Ou alors, je n'ai pas compris.

douinj
Posts: 462
Joined: 18 Mar 2009 15:46

Re: TP Rule Q1

Post by douinj » 27 Dec 2021 11:49

Bonjour,

Vous avez raison, les tests sont passés à travers, je corrige côté JNEWS

Code: Select all

     public void testReflectMayBe(){
        ReflectSpecification<Object> maybe = new ReflectSpecification<>();
        maybe.setSpecification("question1.MAYBE");
        boolean res = maybe.isSatisfiedBy(null);
        assertTrue( res || !res);
    }
Bonne fin de tp_rules

ps: Après vérification, MayBe n'est pas testé côté JNEWS ... rien à corriger ...

delaba_q
Posts: 26
Joined: 03 Oct 2021 0:47

Re: TP Rule Q1

Post by delaba_q » 29 Dec 2021 13:09

Je peux comprendre que le sens qui est attendu par les tests pour l'opérateur None n'est pas le sens conventionnel, mais il me semble capital de l'indiquer clairement dans l'énoncé.

Les opérateurs All, Some (ou OneOf en l'occurrence, ou encore Any comme on peut le voir parfois), et None ont un sens extrêmement précis quand on parle d'ensembles (cf logique ensembliste), et l'API Stream dans Java en est un très bon exemple (Stream.allMatch, Stream.anyMatch, Stream.noneMatch). Le "none" peut également se définir comme la négation du "some". Et d'ailleurs, ma première implémentation du None était un simple appel à cette méthode noneMatch, parce qu'il m'a semblé naturel d'utiliser l'outil portant le même nom...

Post Reply