113 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| // notez le s après Object. Permet entre autre de stipuler qu'un objet o n'est pas null avec la méthode Objects.requireNonNull(o, "message d'erreur détaillé");
 | |
| import java.util.Objects;
 | |
| 
 | |
| /*
 | |
|  * Sorte de Int du pauvre à laquelle on ajoute un nom sous forme textuelle.
 | |
|  * 
 | |
|  * Classe donnée à titre d'exemple pour illustrer les ingrédients techniques de la prog défensive.
 | |
|  * et les assertions java
 | |
|  */
 | |
| public class MonInt {
 | |
| 
 | |
|     // un entier
 | |
|     private int valeur ;
 | |
|     // son nom sous forme textuelle
 | |
|     private String nom ;
 | |
|     
 | |
|     public MonInt(int n, String s){
 | |
|         this.valeur = n;
 | |
|         this.nom = s;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * division du pauvre.
 | |
|      *
 | |
|      *
 | |
|      * @param c le diviseur par lequel on souhaite diviser this
 | |
|      */
 | |
|     public void divise (MonInt c){
 | |
|         Objects.requireNonNull(c, "la classe denominateur ne peut pas être null");
 | |
| 
 | |
|         int avant = this.valeur;
 | |
|         
 | |
|         this.valeur = this.valeur / c.getValeur();
 | |
|         this.nom = "(" + this.nom + " divisé par " + c.getNom() +")";
 | |
| 
 | |
|         assert(this.valeur*c.getValeur() == avant); // NB. un assert qui ne marche pas tout le temps.
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Un getter superstitieux.
 | |
|      * retourne une exception si la valeur vaut 13.
 | |
|      */
 | |
|     public int getValeur(){
 | |
|         if (valeur == 13) throw new IllegalStateException("Comme disait Sacha Guitry, je ne suis pas superstitieux mais on ne sait jamais.");
 | |
|         return valeur;
 | |
|     }
 | |
| 
 | |
|     public String getNom(){
 | |
|         return nom;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|     * @return String representant l'entier.
 | |
|     */ 
 | |
|     public String toString(){
 | |
|         return this.getValeur() + " " + this.getNom();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * C'est un peu moche mais on peut pour simplifier mettre des tests manuels dans un main dans chaque classe.
 | |
|      * C'est plutôt mieux que de mettre des print dans chaque méthode car vous êtes plus sûr de la stabilité de vos tests 
 | |
|      * (vous pouvez rejouer les tests plus tard).
 | |
|      *
 | |
|      * Idéalement on utilise un outil dédié comme JUnit qui favorise au maximum cette automatisation.
 | |
|      *
 | |
|      * @param args pas de paramètre en ligne de commande prévu.
 | |
|      */
 | |
|     public static void main(String[] args) {
 | |
|         MonInt c3 = new MonInt(3,"trois");
 | |
|         MonInt c4 = new MonInt(4,"quatre");
 | |
|         MonInt c9 = new MonInt(9,"neuf");
 | |
|         MonInt c13 = new MonInt(13,"treize");
 | |
|         System.out.println(c3.toString());
 | |
|         System.out.println(c4.toString());
 | |
|         System.out.println(c9.toString());
 | |
| 
 | |
| 
 | |
|         c9.divise(c3);
 | |
|         // 3
 | |
|         System.out.println(c9.toString());
 | |
| 
 | |
|         c3.divise(c4);
 | |
|         // 0
 | |
|         System.out.println(c3.toString());
 | |
| 
 | |
|         // tester des exceptions pas pratique
 | |
|         // Si on veut tester plusieurs exceptions
 | |
|         // il faut attraper et vérifier que c'est le bon type d'exception.
 | |
|         // ici manuellement en regardant le message.
 | |
|         try {
 | |
|             System.out.println(c13.toString()); // toucher au nbre 13 avec getValeur()
 | |
|         }
 | |
|         catch(Exception e){
 | |
|             System.out.println(e);
 | |
|         }
 | |
|         
 | |
|         try{
 | |
|             c9.divise(c3); //division par 0
 | |
|             }
 | |
|         catch(Exception e){
 | |
|             System.out.println(e);
 | |
|         }
 | |
| 
 | |
|         try{
 | |
|             c9.divise(null); //division par null
 | |
|         }
 | |
|         catch(Exception e){
 | |
|             System.out.println(e);
 | |
|         }
 | |
|         
 | |
| 
 | |
|     }
 | |
| } |