2i002 - Javadoc, débuggage... Vers plus d’autonomie Vincent Guigue Vincent Guigue 2i002 - Autonomie 1/11 Les bons reflexes... 1 Lire les messages d’erreur dans la console 2 Savoir corriger les erreurs les plus courantes 3 Savoir chercher dans la documentation officielle JAVA... 4 ... Et éventuellement documenter votre propre code Vincent Guigue 2i002 - Autonomie 2/11 Compilation et exécution Exemple d’instructions de compilation/exécution : 1 2 3 javac Point . java j a v a c MainPoint . j a v a j a v a MainPoint ◦ Les deux premières instructions concernent la compilation... Même s’il n’y a pas de message d’erreur, il faut encore vérifier le bon fonctionnement du programme ! ◦ La troisième ligne exécute le code compilé Vincent Guigue 2i002 - Autonomie 3/11 Compilateur, JVM et garbage collector ◦ Compilateur - syntaxe ( ;, parenthèses, ...) - vérifie le type des variables, - l’existence des méthodes/attributs et les niveaux d’accès : · les méthodes/attributs existent-elles dans l’objet, · les accès sont-ils permis (public/private) ◦ JVM - gestion dynamique des liens (cf redéfinition avec l’héritage) - gestion des erreurs d’utilisation des objets · problème d’instanciation, · dépassement dans les tableaux, · gestion des fichiers... - garbage collector (cf cycle de vie des objets) Vincent Guigue 2i002 - Autonomie 4/11 Erreurs usuelles à corriger soit même Compilation (les plus faciles !) : Toujours bien regarder la ligne de l’erreur (elle est donnée). Trouver le raccourci de votre éditeur permettant d’aller à la ligne fautive Syntaxe 1 2 3 P o i n t p = new P o i n t ( 1 , 2 ) p . move ( 1 , 0 ) ; // S y n t a x e r r o r , i n s e r t " ; " t o c o m p l e t e B l o c k S t a t e m e n t s Il y a souvent plusieurs erreurs : toujours regarder la première, les autres sont peut-être simplement des conséquences de la première Vincent Guigue 2i002 - Autonomie 5/11 Erreurs usuelles à corriger soit même Compilation (les plus faciles !) : Toujours bien regarder la ligne de l’erreur (elle est donnée). Trouver le raccourci de votre éditeur permettant d’aller à la ligne fautive Niveau d’accès 1 2 3 P o i n t p = new P o i n t ( 1 , 2 ) ; p . x = 3; // The f i e l d P o i n t . x i s n o t v i s i b l e Il y a souvent plusieurs erreurs : toujours regarder la première, les autres sont peut-être simplement des conséquences de la première Vincent Guigue 2i002 - Autonomie 5/11 Erreurs usuelles à corriger soit même Compilation (les plus faciles !) : Toujours bien regarder la ligne de l’erreur (elle est donnée). Trouver le raccourci de votre éditeur permettant d’aller à la ligne fautive Existence des méthodes 1 2 3 4 5 6 P o i n t p = new P o i n t ( 1 , 2 ) ; p . mover ( 1 , 3 ) ; // The method mover ( i n t , i n t ) i s u n d e f i n e d f o r t h e t y p e P o i n t p . move ( 1 , 2 , 3); // The method move ( d o u b l e , d o u b l e ) i n t h e t y p e P o i n t i s // n o t a p p l i c a b l e f o r t h e a r g u m e n t s ( i n t , i n t , i n t ) Il y a souvent plusieurs erreurs : toujours regarder la première, les autres sont peut-être simplement des conséquences de la première Vincent Guigue 2i002 - Autonomie 5/11 Erreurs usuelles à corriger soit même Compilation (les plus faciles !) : Toujours bien regarder la ligne de l’erreur (elle est donnée). Trouver le raccourci de votre éditeur permettant d’aller à la ligne fautive Anticipation des erreurs de la JVM 1 2 3 Point p ; p . move ( 1 , 0 ) ; // The l o c a l v a r i a b l e p may n o t h a v e b e e n i n i t i a l i z e d Il y a souvent plusieurs erreurs : toujours regarder la première, les autres sont peut-être simplement des conséquences de la première Vincent Guigue 2i002 - Autonomie 5/11 Erreurs usuelles à corriger soit même Execution (JVM) : Toujours vérifier la ligne également ◦ NullPointerException 1 2 3 4 Point p = n u l l ; p . move ( 1 , 0 ) ; // E x c e p t i o n i n t h r e a d " main " j a v a . l a n g . N u l l P o i n t e r E x c e p t i o n // a t c o u r s 1 . T e s t P o i n t . main ( T e s t P o i n t . j a v a : 1 1 ) - Cette erreur arrive souvent dans des cas plus complexe de composition d’objet ◦ IndexOutOfBoundException 1 2 3 4 5 i n t [ ] t a b = new i n t [ 3 ] ; tab [ 3 ] = 2; // E x c e p t i o n i n t h r e a d " main " // java . lang . ArrayIndexOutOfBoundsException : 3 // a t c o u r s 1 . T e s t P o i n t . main ( T e s t P o i n t . j a v a : 1 1 ) - Vérifier la ligne + l’index ! - Souvent dans les boucle for Vincent Guigue 2i002 - Autonomie 6/11 Documentation Java est un langage très bien documenté et plein d’outils : https://docs.oracle.com/javase/8/docs/api/index.html Vincent Guigue 2i002 - Autonomie 7/11 Documentation Java est un langage très bien documenté et plein d’outils : https://docs.oracle.com/javase/8/docs/api/index.html ◦ Cas 1 : objet connu, usage inconnu - Quels sont les constructeurs d’une ArrayList ? - Comment faire un cosinus (en se doutant que c’est dans la classe Math) ? - ... ⇒ Chercher directement dans la classe au niveau de la javadoc Vincent Guigue 2i002 - Autonomie 7/11 Documentation Java est un langage très bien documenté et plein d’outils : https://docs.oracle.com/javase/8/docs/api/index.html ◦ Cas 1 : objet connu, usage inconnu - Quels sont les constructeurs d’une ArrayList ? - Comment faire un cosinus (en se doutant que c’est dans la classe Math) ? - ... ◦ Cas 2 : recherche d’une fonctionnalité sans point d’entrée ex : Comment créer une image en JAVA ? - Google... · recherche d’un point d’entrée ⇒ BufferedImage ⇒ retour à la javadoc · recherche d’un tutoriel (idéalement officiel) : https://docs.oracle.com/javase/tutorial/2d/images/ Vincent Guigue 2i002 - Autonomie 7/11 Documentation... Suite De manière générale, on programme pour les autres... ⇒ documenter son code pour le rendre utilisable 1 premier niveau : choisir des noms de classes, méthodes et variables explicites. 2 deuxième niveau : faire des classes et des méthodes courtes, utiliser des méthodes privées... Eviter à tout prix les copier-coller. troisième niveau : ajouter des commentaires pour créer une documentation. 3 - Outil intégré dans JAVA : commentaires spéciaux + création automatique d’une page web Vincent Guigue 2i002 - Autonomie 8/11 Création d’une documentation 1 /∗∗ 2 ∗ @author Vincent Guigue 3 ∗ C e t t e c l a s s e p e r m e t de g é r e r d e s p o i n t s en 2D 4 ∗/ 5 p u b l i c c l a s s Point { 6 /∗∗ 7 ∗ A t t r i b u t s c o r r e s p o n d a n t a u x c o o r d o n n é e s du p o i n t 8 ∗/ 9 p r i v a t e double x , y ; 10 /∗∗ 11 ∗ C o n s t r u c t e u r s t a n d a r d à p a r t i r de 2 r é e l s 12 ∗ @param x : a b s c i s s e du p o i n t 13 ∗ @param y : c o o r d o n n é e du p o i n t 14 ∗/ 15 p u b l i c Point ( double x , double y ) { 16 this .x = x; 17 this .y = y; 18 } 19 /∗∗ 20 ∗ @ r e t u r n l ’ a b s c i s s e du p o i n t 21 ∗/ 22 p u b l i c d o u b l e getX ( ) { 23 return x ; 24 } 25 } $ javadoc Point.java Vincent Guigue 2i002 - Autonomie 9/11 Javadoc : quelques options utiles ◦ De manière générale : vérifier la documentation $ javadoc -h ◦ Pour gérer les accents : $ javadoc -encoding utf8 -docencoding utf8 -charset utf8 [fichier.java] ◦ Pour sélectionner le répertoire de stockage du html : $ javadoc -d <directory> [fichier.java] ◦ Représentation public/private (par défaut, représentation de la partie public seulement) $ javadoc -public/-private [fichier.java] Vincent Guigue 2i002 - Autonomie 10/11 Javadoc : résultats obtenus ◦ Classe Point, présentation conforme à la javadoc standard (présence des liens hypertextes...) Vincent Guigue 2i002 - Autonomie 11/11 Javadoc : résultats obtenus ◦ Classe Point, description des méthodes (entrées, sorties...) Vincent Guigue 2i002 - Autonomie 11/11 Javadoc : résultats obtenus ◦ Classe Point, représentation privée Vincent Guigue 2i002 - Autonomie 11/11