Assertion tp3

Programmation Avancée

Modérateur : Douin

RENAUD
Messages : 72
Inscription : 21 sept. 2018 19:34

Assertion tp3

Message par RENAUD » 18 nov. 2018 1:20

Bonsoir

Quelqu'un pourrait me donner un indice pour mieux gérer Assertion ?
Me reste des erreurs jnews
1) testAssertion(question3) failed
2) testAssertionError(question3) failed
je ne suis pas sur mais je n'arrive pas à retourner un message, une exception, en cas d'echec de Assertion.

RENAUD
Messages : 72
Inscription : 21 sept. 2018 19:34

Re: Assertion tp3

Message par RENAUD » 18 nov. 2018 16:03

Help !
Les méthodes sont complétées et fonctionnent, les classes générées ont compilé.
Et jusqu'à ces deux erreurs l'ensemble me semblait compris mais ça fait deux jours que je suis sur Assertion.
Je code n'importe quoi pour essayer de piger par le saint esprit qui apparemment ne comprend pas non plus.
Pire ! A cause de ça je ne comprend plus rien à ce TP, aux patrons utilisés, Composite, Interpreter, Visitor, ni aux méthodes, à quoi ça peut servir.
Je suis totalement perdu, j'allais faire mon rapport mais je ne vois rien à écrire.
(remarquez enfin quelque chose qui sera facile à lire et à comprendre ;)

Douin
Messages : 366
Inscription : 18 mars 2009 15:46

Re: Assertion tp3

Message par Douin » 18 nov. 2018 18:19

Bonsoir, ci dessous la classe de tests qui pourrait vous aider, bonne fin de tp

Code : Tout sélectionner

163     public void testAssertion(){
 164         try{
 165             vi.contexte().ecrire("x",10);
 166             try{
 167                 Instruction i = new Assertion(new Egal(x,new Constante(10)));
 168                 i.accepter(vi);
 169             }catch(AssertionError ae){
 170                 fail("assert, ne doit pas lever d'exception !!!");
 171             }
 172             try{ 	  
 173                 Instruction i1 = new Assertion(new Inf(x,new Constante(10)));
 174                 i1.accepter(vi);

 175                 fail("assert, doit ici lever une exception !!!");


RENAUD
Messages : 72
Inscription : 21 sept. 2018 19:34

Re: Assertion tp3

Message par RENAUD » 19 nov. 2018 12:59

Merci,
Cela m'a aidé d'une certaine manière l'erreur jnews a disparu mais pour une autre différente !
mais ce Tp est intriguant c'est le premier où je suis incapable d'affirmer après qu'une erreur jnews ou un bug aient disparu que ma « solution » était vraiment la bonne.

Sinon je m'excuse du caractère des derniers messages mais depuis le début des tp j'ai presque fini par abandonner d'avoir un 0 faute à jnews, c'est donc assez frustrant personnellement.

Pour conclure car par saturation je suis passé au tp commit (qui ressemble beaucoup au moins pour les patrons utilisés).
Voici donc mes dernières interrogations (promis j'arrête ;) qui seront entre autres mise dans mon rapport :

-Assertion :
-- Assertion :
public String message() {
je ne sais pas si message() doit être compléter pour être initialiser dans le constructeur car comment y avoir accès il n'y a meme pas de setter pr lui ?
est ce qu'il devait servir pour former un assert du type : assert <cond> : <message> ;

-- VisiteurInstEvaluation
public Contexte visite(Assertion a) {
est ce que je dois traiter ici le test a.cond() pour que Assertion renvoie vrai ou faux ?
Ça me paraîssait logique de traiter vrai ou faux pour un assert !
si oui mon problème est que si a.cond() est faux je ne sais pas quoi ni comment renvoyer le "contexte".
Après le com de mr douin, c'est ici que j'ai pensé juste rajouter un throw AssertionError si faux ce qui fait passer le fail() du test.

-- VisiteurInstToString
public String visite(Assertion a) {
est ce que ici je dois aussi tester a.cond() dans ce cas ?
est ce que ici je dois aussi gérer l'exception pour afficher un « message » si faux ?
évidemment j'ai essayé mais sans y réussir je n'arrive pas à tester a.cond() avec un type String

-- VisiteurInstToJava
public String visite(Assertion a) {
mes questions ici que pour VisiteurInstToString

-- TestsDesAssertionsAVerifier
"vs" étant construit avant l'appel à Assertion() au cas où j'arriverais à renvoyer un contexte "faux" je n'arrive plus à me dire si « vs » aura changer aussi après ?


-Plusieurs autres implémentations diverses qui sont passés au quelles je ne suis pas sur du tout : ex :
-- Faux() et Vrai()
je renvoie juste false ou true ; sans aucun .accepter() !

-- pleins d'autres et vu le nombres de classes de ce tp il m'est difficile d'affirmer donc que sur l'ensemble du tp, mon code est réellement pertinent et répond aux problématiques.


J'espère donc des commentaires détaillés en correction pour mieux comprendre ce Tp.

Merci à tous d'avoir fait l'effort même de me lire ;)

rousset
Messages : 35
Inscription : 30 sept. 2018 9:23

Re: Assertion tp3

Message par rousset » 20 nov. 2018 1:07

RENAUD a écrit :
19 nov. 2018 12:59
-Assertion :
-- Assertion :
public String message() {
je ne sais pas si message() doit être compléter pour être initialiser dans le constructeur car comment y avoir accès il n'y a meme pas de setter pr lui ?
est ce qu'il devait servir pour former un assert du type : assert <cond> : <message> ;

-- VisiteurInstEvaluation
-- VisiteurInstToString
-- VisiteurInstToJava
-Plusieurs autres implémentations diverses qui sont passés au quelles je ne suis pas sur du tout : ex :
-- Faux() et Vrai()
Hello,
J'espère donner un coup de main et pas embrouiller /mal aiguiller.
Alors perso pour q1 et q2, petit blocage au début en q1. J'ai fait le patron sur Eclipse en amenant progressivement : composite, interpreter et visitor.
Pas la peine de tout ré-écrire, juste faire à minima ça aide à s'imprégner du fonctionnement si ça ne vient pas intuitivement.

Vrai/Faux
Selon le visiteur on retourne soit true/false (VisiteurBoolEvaluation), soit "vrai"/"faut" (VisiteurBoolToString), soit "true"/"false" (VisiteurBoolToJava).

Assertion
Je suis tombé là dessus (tu verras on y évoque le rôle d'un message avec l'utilisation de assert) : https://stackoverflow.com/questions/301 ... keyword-do
Même en retirant le "#" dans le bluej.defs, je n'ai pas réussi à obtenir ce qui m'a semblé attendu, j'ai finit par écrire ça. Je laisse des commentaires à titre de "mémo" pour le rapport, mais aussi parce que je ne sais pas si j'induis en erreur : par exemple ci-dessous il y a la mention " à compléter en retournant le contexte modifié;", et pourtant en commentaire précédent la méthode on peut lire " @return la mémoire intacte".
VisiteurInstEvaluation
public Contexte visite(Assertion a) {
// à compléter par l'usage de assert de java, installer l'option \"-ea\" ligne 480 de bluej.defs soit bluej.vm.args=-ea
//assert a.cond().accepter(vb) != null : a.message();
if(! a.cond().accepter(vb)) throw new AssertionError();
// return null; // à compléter en retournant le contexte modifié;
return this.vi.contexte();
}

Arrivé à la question 3 j'avais fait un "blocage", pourtant on fait toujours la même chose. J'ai suivi le conseil d'un de nos collègues qui indiquait avoir attaqué par le VisiteurInstToJava et ça m'a permis de poursuivre, de bien reconsidérer ce qu'on était en train de faire : "parcourir /inspecter /visiter".
Comme on a la classe VisiteurInstToString complète, il suffit de faire la correspondance.
Bien penser à l'arbe qu'on parcourt. Si on rencontre une expression booléenne il nous faut un "visiteur" pour obtenir l'information /le résultat. Ensuite le visiteur nous renvoit la représentation qu'on attend. Le traitement final est assuré par le visiteur.
En plus de ce conseil il y a aussi ces remarques de l'énoncé :
Remarques :
L'affectation (= en java) est la seule instruction à modifier le contexte.
La Séquence est le ';' de java.
La Sélection est le classique if-then-else (else optionnel)
Iteration <<abstract>> car il y a plus d'un type de boucle
Assertion : même idée que assert de java 1.4
Afficher : même idée que System.out.println() de java
Le retour de l'enseignant où il a présenté une méthode de test sur Assertion m'a aidé (et je te remercie d'ailleurs pour ton sujet !) : je pense que tu as pu l'écrire si besoin (classe de test), en tout cas je t'ai mis ci-dessus la méthode telle que je l'ai laissée (ça a l'air de passer).

Voilà je me doute que ça va pas bien loin, limite que ça servira peu, j'ai tenté une réponse : il n'est que minuit, mais la journée a été longue, j'espère que c'est pas trop brouillon.
Autrement je pense que le plus important c'est de percuter la structure du composite, l'écrire soit même, et ne pas se laisser embrouiller par la question 3 (où finalement on fait un peu du copier/coller).

@++

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité