Bonjour !
je suis un débutant en java et je souhaite utiliser JContractor (http://jcontractor.sourceforge.net/) et pas un autre mode de programation par contrat...
j'ai créé un petit programme tout simple avec une classe instrumentée. les voici
La class main :
la class "Operations" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class main_with_problem { /** * @param args */ public static void main(String[] args) { @SuppressWarnings("unused") double result = 0; Operations Op = new Operations(); result = Op.sqrt(-4.0); } }
les contrats de la classe "Operations"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Operations { public double sqrt(double value) { return Math.sqrt(value); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public class Operations_CONTRACT extends Operations { protected boolean _Invariant() { System.out.println("=== Invariant ==="); return true; } protected boolean sqrt_PostCondition (double value) { System.out.println("=== PostCondition ==="); return value > 0; } protected boolean sqrt_PreCondition (double value) { System.out.println("=== PreCondition ==="); return value > 0; } }
J'effectue ensuite les opérations suivantes (j'ai volontairement enlevé ici les classpath etc pour que se soit lisible):
javac *.java
java jInstrument Operations.class
java main_with_problem
j'obtiens le resultat suivant:
Je constate donc que le check d'invariant est bien appellé, mais pas les preconditions et postconditions... Pourquoi ???Instrumenting Operations at 'all' level
=== Invariant ===
=== Invariant ===
=== Invariant ===
Merci d'avance pour votre aide !!!![]()
Partager