{"id":55,"date":"2021-05-29T13:47:15","date_gmt":"2021-05-29T13:47:15","guid":{"rendered":"https:\/\/www.louismarchand.me\/?page_id=55"},"modified":"2023-02-01T19:23:04","modified_gmt":"2023-02-01T19:23:04","slug":"javadoc","status":"publish","type":"page","link":"https:\/\/www.louismarchand.me\/index.php\/javadoc\/","title":{"rendered":"Javadoc"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>La documentation de code est un des aspects les plus importants de la programmation. \u00c7a permet entre autres de facilement comprendre la m\u00e9canique de code, augmente la facilit\u00e9 de navigation dans le projet, diminue le risque de bogues, acc\u00e9l\u00e8re le d\u00e9bogage des programmes et facilite l&rsquo;entretient long terme des solutions informatiques.<\/p>\n<p>Java fournit un standard et des outils qui permettent de faciliter la documentation de code et de g\u00e9n\u00e9rer des documents de documentation.<\/p>\n<p>Les documentations sont annot\u00e9es sous la forme de commentaire d\u00e9butant avec une ligne:<\/p>\n<pre>\/**<\/pre>\n<p>et se terminant avec la ligne:<\/p>\n<pre>*\/<\/pre>\n<p>Chaque ligne d\u00e9bute par le caract\u00e8re \u00ab\u00a0*\u00a0\u00bb align\u00e9 avec le premier caract\u00e8re \u00ab\u00a0*\u00a0\u00bb de la premi\u00e8re ligne de la documentation. Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Ceci est une documentation de code.<\/span>\r\n<span class=\"cm\"> *\/<\/span>\r\n<\/pre>\n<\/div>\n<p>La premi\u00e8re ligne \u00e0 l&rsquo;int\u00e9rieur de l&rsquo;encadr\u00e9 de documentation correspond toujours \u00e0 la description courte de la documentation. On peut ensuite mettre une description longue en s\u00e9parant celle-ci de la description courte par une ligne vide. Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Ceci est la description courte qui doit \u00eatre sur une seule ligne.<\/span>\r\n<span class=\"cm\"> *<\/span>\r\n<span class=\"cm\"> * Et ceci est la description longue de la documentation. Il est \u00e0 noter qu'il<\/span>\r\n<span class=\"cm\"> * est possible de mettre cette derni\u00e8re sur plusieurs lignes.<\/span>\r\n<span class=\"cm\"> * &lt;p&gt;<\/span>\r\n<span class=\"cm\"> * Il est \u00e9galement possible de mettre des paragraphes \u00e0 la description longue,<\/span>\r\n<span class=\"cm\"> * ou m\u00eame des:<\/span>\r\n<span class=\"cm\"> * &lt;ul&gt;<\/span>\r\n<span class=\"cm\"> * &lt;li&gt;Liste<\/span>\r\n<span class=\"cm\"> * &lt;li&gt;d'item<\/span>\r\n<span class=\"cm\"> * &lt;\/ul&gt;<\/span>\r\n<span class=\"cm\"> * en utilisant des notations similiaires \u00e0 la syntaxe Web.<\/span>\r\n<span class=\"cm\"> *\/<\/span>\r\n<\/pre>\n<\/div>\n<p>On peut voir qu&rsquo;il est possible de mettre quelques \u00e9l\u00e9ments de mise en page qui sera utile lorsque la documentation Web sera g\u00e9n\u00e9r\u00e9e.<\/p>\n<p>Javadoc fonctionne \u00e9galement avec un syst\u00e8me d&rsquo;\u00e9tiquette (ou tag) afin de sp\u00e9cifier des \u00e9l\u00e9ments pr\u00e9cis dans notre documentation. Les \u00e9tiquettes d\u00e9butent par \u00ab\u00a0@\u00a0\u00bb. Voici les principales \u00e9tiquettes:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>\u00ab\u00a0@author\u00a0\u00bb: Sp\u00e9c\u00e9fie l&rsquo;auteur de la classe;<\/li>\n<li>\u00ab\u00a0@version\u00a0\u00bb: Sp\u00e9cifie la version de la classe et la date de derni\u00e8re modification;<\/li>\n<li>\u00ab\u00a0@since\u00a0\u00bb: Sp\u00e9cifie la premi\u00e8re version de Java que la classe est consid\u00e9r\u00e9e comme \u00e9tant fonctionnelle;<\/li>\n<li>\u00ab\u00a0{@link r\u00e9f\u00e9rence}\u00a0\u00bb: Permet de mettre une r\u00e9f\u00e9rence dans une description (courte ou longue) vers une classe, m\u00e9thode, attribut ou r\u00e9f\u00e9rence externe;<\/li>\n<li>\u00ab\u00a0@param\u00a0\u00bb: Sp\u00e9cifie un argument d&rsquo;une routine;<\/li>\n<li>\u00ab\u00a0@return\u00a0\u00bb: Sp\u00e9ficie la valeur de retour d&rsquo;une routine<\/li>\n<li>\u00ab\u00a0@throws\u00a0\u00bb ou \u00ab\u00a0@exception\u00a0\u00bb: Sp\u00e9cifie un exception que la routine peut lancer et dans quel contexte ce dernier se lance;<\/li>\n<li>\u00ab\u00a0@deprecated\u00a0\u00bb: Indique qu&rsquo;une classe, m\u00e9thode ou attribut a \u00e9t\u00e9 remplac\u00e9 et ne doit plus \u00eatre utilis\u00e9;<\/li>\n<li>\u00ab\u00a0@see\u00a0\u00bb: Sp\u00e9cifie une r\u00e9f\u00e9rence pertinente\n<ul>\n<li>On peut faire r\u00e9f\u00e9rence \u00e0:\n<ul>\n<li>Un site Web,<\/li>\n<li>Une classe,<\/li>\n<li>Une m\u00e9thode ou un attribut (en utilisant la notation \u00ab\u00a0#nom\u00a0\u00bb),<\/li>\n<li>etc.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>La documentation de classe<\/h2>\n<p>Chaque classe publique (ou chaque fichier Java) doivent avoir un minimum de documentation. Il faut sp\u00e9cifier les informations suivantes:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Une description courte;<\/li>\n<li>L&rsquo;auteur;<\/li>\n<li>Date et version java.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>On y trouve \u00e9galement souvent les informations suivantes:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Une description longue;<\/li>\n<li>D&rsquo;autres auteurs;<\/li>\n<li>Une licence;<\/li>\n<li>R\u00e9f\u00e9rence vers une documentation ext\u00e9rieure.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Voici un exemple qui ne contient qu&rsquo;une description courte, un auteur, la date et la version java de la classe:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Un Animal correspond \u00e0 un individu dans le programme de gestion v\u00e9t\u00e9rinaire.<\/span>\r\n<span class=\"cm\"> * @author Louis Marchand<\/span>\r\n<span class=\"cm\"> * @version 1.39, 01\/31\/2023<\/span>\r\n<span class=\"cm\"> *\/<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Animal<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"p\">...<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Voici maintenant un exemple avec plus d&rsquo;informations:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Permet le tri de liste.<\/span>\r\n<span class=\"cm\"> *<\/span>\r\n<span class=\"cm\"> * Cette classe permet de trier des listes en utilisant plusieurs<\/span>\r\n<span class=\"cm\"> * algorithmes de tri.<\/span>\r\n<span class=\"cm\"> * &lt;ul&gt;<\/span>\r\n<span class=\"cm\"> * &lt;li&gt;Tri bulle ({@link Tri#triBulle})<\/span>\r\n<span class=\"cm\"> * &lt;li&gt;Tri insertion ({@link Tri#triInsertion})<\/span>\r\n<span class=\"cm\"> * &lt;li&gt;Tri fusion ({@link Tri#triFusion})<\/span>\r\n<span class=\"cm\"> * &lt;li&gt;Tri rapide ({@link Tri#triRapide})<\/span>\r\n<span class=\"cm\"> * &lt;\/ul&gt;<\/span>\r\n<span class=\"cm\"> * &lt;p&gt;<\/span>\r\n<span class=\"cm\"> * Le tri bulle est un algorithme d'ordre n^2 qui consiste \u00e0 comparer<\/span>\r\n<span class=\"cm\"> * r\u00e9p\u00e9titivement les \u00e9l\u00e9ments cons\u00e9cutifs d'une liste et \u00e0 les permuter<\/span>\r\n<span class=\"cm\"> * quand ils sont mal plac\u00e9s. Cet algorithme s'effectue sur place.<\/span>\r\n<span class=\"cm\"> * &lt;p&gt;<\/span>\r\n<span class=\"cm\"> * Le tri insertion est un algorithme d'ordre n^2 qui consiste \u00e0 ins\u00e9rer<\/span>\r\n<span class=\"cm\"> * graduellement tous les \u00e9l\u00e9ments dans une liste afin de les obtenir<\/span>\r\n<span class=\"cm\"> * en ordre. cet algorithme ne s'effectue pas sur place.<\/span>\r\n<span class=\"cm\"> * &lt;p&gt;<\/span>\r\n<span class=\"cm\"> * Le tri fusion est un algorithme r\u00e9cursif d'ordre n*log(n) qui consiste \u00e0<\/span>\r\n<span class=\"cm\"> * s\u00e9parer la liste en deux listes, trier ces deux listes et<\/span>\r\n<span class=\"cm\"> * finalement fusionner les deux listes tri\u00e9es afin d'en obtenir un seul<\/span>\r\n<span class=\"cm\"> * tri\u00e9. Cet algorithme ne s'effectue pas sur place.<\/span>\r\n<span class=\"cm\"> * &lt;p&gt;<\/span>\r\n<span class=\"cm\"> * Le tri rapide est un algorithme r\u00e9cursif d'ordre n*log(n) qui consiste \u00e0<\/span>\r\n<span class=\"cm\"> * se choisir un pivot dans la liste et d\u00e9placer tous les \u00e9l\u00e9ments plus petits<\/span>\r\n<span class=\"cm\"> * que le pivot avant ce dernier et tous les plus grands que le pivot apr\u00e8s<\/span>\r\n<span class=\"cm\"> * ce dernier. Cet algorithme s'effectue sur place.<\/span>\r\n<span class=\"cm\"> *<\/span>\r\n<span class=\"cm\"> * @author Louis Marchand<\/span>\r\n<span class=\"cm\"> * @author St\u00e9phane Janvier<\/span>\r\n<span class=\"cm\"> * @author Benoit Desrosiers<\/span>\r\n<span class=\"cm\"> * @version 1.39, 01\/31\/2023<\/span>\r\n<span class=\"cm\"> * @see https:\/\/fr.wikipedia.org\/wiki\/Tri_%C3%A0_bulles<\/span>\r\n<span class=\"cm\"> * @see https:\/\/fr.wikipedia.org\/wiki\/Tri_par_insertion<\/span>\r\n<span class=\"cm\"> * @see https:\/\/fr.wikipedia.org\/wiki\/Tri_fusion<\/span>\r\n<span class=\"cm\"> * @see https:\/\/fr.wikipedia.org\/wiki\/Tri_rapide<\/span>\r\n<span class=\"cm\"> *<\/span>\r\n<span class=\"cm\"> * Distribu\u00e9 sous licence MIT.<\/span>\r\n<span class=\"cm\"> *\/<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Tri<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"p\">...<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<h2>Documentation d&rsquo;attribut<\/h2>\n<p>La documentation d&rsquo;attribut ne contient, minimalement, qu&rsquo;une description courte de l&rsquo;attribut. Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">* Cha\u00eene qui identifie l'Animal.<\/span>\r\n<span class=\"cm\">*\/<\/span>\r\n<span class=\"kd\">private<\/span> <span class=\"n\">String<\/span> <span class=\"n\">nom<\/span><span class=\"p\">;<\/span>\r\n<\/pre>\n<\/div>\n<p>Il est par contre \u00e0 noter qu&rsquo;il est possible d&rsquo;utiliser d&rsquo;ajouter des \u00e9l\u00e9ments comme une description longue ou des r\u00e9f\u00e9rences ({@link &#8230;} ou @see).<\/p>\n<h2>Documentation de routine<\/h2>\n<p>Cette section s&rsquo;applique \u00e0 n&rsquo;importe quel type de routines (m\u00e9thodes, routines statiques, constructeurs, etc.)<\/p>\n<p>Une documentation de routine doit contenir au minimum les informations suivantes:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Une description courte;<\/li>\n<li>Une clause \u00ab\u00a0@param\u00a0\u00bb pour chaque argument de notre routine (s&rsquo;il y a lieu);<\/li>\n<li>Une clause \u00ab\u00a0@return\u00a0\u00bb si la routine est une fonction;<\/li>\n<li>Une clause \u00ab\u00a0@exception\u00a0\u00bb ou \u00ab\u00a0@throws\u00a0\u00bb pour chaque type d&rsquo;exception que la routine peut retourner.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Il est par contre \u00e0 noter qu&rsquo;il est possible d&rsquo;utiliser d&rsquo;ajouter des \u00e9l\u00e9ments comme une description longue ou des r\u00e9f\u00e9rences ({@link &#8230;} ou @see).<\/p>\n<p>Voici un exemple:<\/p>\n<div class=\"highlight\">\n<pre>    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Ajoute un Animal \u00e0 la liste des enfants de l'Animal<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aEnfant Le nouvel enfant \u00e0 ajouter \u00e0 la liste<\/span>\r\n<span class=\"cm\">     * @throws Exception Lorsque l'Animal re\u00e7u en argument<\/span>\r\n<span class=\"cm\">     *                   n'est pas du m\u00eame type que l'Animal<\/span>\r\n<span class=\"cm\">     *                   en cours.<\/span>\r\n<span class=\"cm\">     * @see #getEnfants<\/span>\r\n<span class=\"cm\">     * @see #retirerEnfant<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">ajouterEnfant<\/span><span class=\"p\">(<\/span><span class=\"n\">Animal<\/span> <span class=\"n\">aEnfant<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"p\">...<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<h2>Le programme \u00ab\u00a0javadoc\u00a0\u00bb<\/h2>\n<p>Le standard Javadoc est plus qu&rsquo;un simple standard de documentation de code. C&rsquo;est \u00e9galement un syst\u00e8me permettant de g\u00e9n\u00e9rer des documents de documentation de projet. En d&rsquo;autres mots, si vous faites votre documentation de code en respectant le standard Javadoc, vous pourrez facilement g\u00e9n\u00e9rer une documentation Web de votre code.<\/p>\n<p>Pour g\u00e9n\u00e9rer la documentation Web, vous avez besoin de la commande \u00ab\u00a0javadoc\u00a0\u00bb. Voici comment utiliser cette commande:<\/p>\n<pre>javadoc -d &lt;r\u00e9pertoire_r\u00e9sultat&gt; &lt;fichiers Java&gt;<\/pre>\n<p>Par exemple, si j&rsquo;ai le fichier \u00ab\u00a0Animal.java\u00a0\u00bb dans le r\u00e9pertoire en cours, je peux g\u00e9n\u00e9rer la documentation Web dans le r\u00e9pertoire \u00ab\u00a0ma_documentation\u00a0\u00bb avec la commande suivante:<\/p>\n<pre>javadoc -d ma_documentation Animal.java<\/pre>\n<p>Si vous voulez prendre plus que seulement un fichier Java, vous pouvez les lister \u00e0 la fin de la commande. Par exemple:<\/p>\n<pre>javadoc -d ma_documentation Programme.java Animal.java Tri.java<\/pre>\n<p>Il est \u00e9galement possible d&rsquo;utiliser un \u00ab\u00a0wildcard\u00a0\u00bb dans la commande. Par exemple, la commande suivante:<\/p>\n<pre>javadoc -d ma_documentation *.java<\/pre>\n<p>g\u00e9n\u00e9rera la documentation pour tous les fichiers Java du r\u00e9pertoire en cours.<\/p>\n<p>Il est \u00e0 noter que si vous utilisez IntelliJ, vous pouvez g\u00e9n\u00e9rer la documentation Web de votre projet en utilisant l&rsquo;outil disponible dans le menu \u00ab\u00a0Tools-&gt;Generate JavaDoc\u00a0\u00bb.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-12085\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/05\/javadoc_intellij.png\" alt=\"\" width=\"265\" height=\"300\"><\/p>\n<p><a href=\"https:\/\/www.louismarchand.me\/index.php\/programmation-orientee-objet-1\/\">Retour<\/a><\/p>\n<p>&nbsp;<\/p>\n<hr>\n<p>Auteur: Louis Marchand<br \/>\n<a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/deed.fr\" target=\"_blank\" rel=\"license noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/i.creativecommons.org\/l\/by\/4.0\/80x15.png\" alt=\"Creative Commons License\"><\/a><br \/>\nSauf pour les sections sp\u00e9cifi\u00e9es autrement, ce travail est sous licence <a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/deed.fr\" target=\"_blank\" rel=\"license noopener noreferrer\">Creative Commons Attribution 4.0 International<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction La documentation de code est un des aspects les plus importants de la programmation. \u00c7a permet entre autres de facilement comprendre la m\u00e9canique de code, augmente la facilit\u00e9 de navigation dans le projet, diminue le risque de bogues, acc\u00e9l\u00e8re le d\u00e9bogage des programmes et facilite l&rsquo;entretient long terme des solutions informatiques. Java fournit un&hellip; <a class=\"more-link\" href=\"https:\/\/www.louismarchand.me\/index.php\/javadoc\/\">Continue reading <span class=\"screen-reader-text\">Javadoc<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-55","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/comments?post=55"}],"version-history":[{"count":3,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/55\/revisions"}],"predecessor-version":[{"id":770,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/55\/revisions\/770"}],"wp:attachment":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/media?parent=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}