{"id":67,"date":"2021-05-29T13:57:45","date_gmt":"2021-05-29T13:57:45","guid":{"rendered":"https:\/\/www.louismarchand.me\/?page_id=67"},"modified":"2022-03-31T15:56:47","modified_gmt":"2022-03-31T15:56:47","slug":"lheritage","status":"publish","type":"page","link":"https:\/\/www.louismarchand.me\/index.php\/lheritage\/","title":{"rendered":"L&rsquo;h\u00e9ritage"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>En programmation orient\u00e9e objet, l&rsquo;h\u00e9ritage est un des concepts cl\u00e9s. Il permet, entre autres, le polymorphisme, la g\u00e9n\u00e9ralisation, une meilleure encapsulation de l&rsquo;information, une diminution du nombre de m\u00e9thodes et attribut dans les classes (ce qui les rend plus simples) ainsi qu&rsquo;une diminution substantielle de la duplication de code du syst\u00e8me.<\/p>\n<h2>C&rsquo;est quoi, l&rsquo;h\u00e9ritage<\/h2>\n<p>Les m\u00e9caniques d&rsquo;h\u00e9ritages permettent de sp\u00e9cifier des classes (et donc des types) qui sont des g\u00e9n\u00e9ralisations d&rsquo;une ou plusieurs autres classes (et types).<\/p>\n<p>Nous obtenons donc des classes qui sont plus g\u00e9n\u00e9rales et des classes qui sont plus sp\u00e9cifiques. Un <strong>lien d\u2019h\u00e9ritage<\/strong> est donc un lien qui permet une g\u00e9n\u00e9ralisation\/sp\u00e9cialisation d\u2019une classe vers une autre.<\/p>\n<p>La classe sp\u00e9cifique poss\u00e8de (ou <strong>h\u00e9rite de<\/strong>) toutes les m\u00e9thodes et tous les attributs que la classe g\u00e9n\u00e9rale poss\u00e8de, mais elle peut y ajouter de nouvelles m\u00e9thodes, de nouveaux attributs ou de nouvelle impl\u00e9mentation des m\u00e9thodes d\u00e9j\u00e0 pr\u00e9sentes dans la classe g\u00e9n\u00e9rale.<\/p>\n<p>Dans une relation d&rsquo;h\u00e9ritage, on appel <strong>parent<\/strong> la classe g\u00e9n\u00e9rale et <strong>enfant<\/strong> la classe sp\u00e9cifique.<\/p>\n<h3>L&rsquo;h\u00e9ritage dans un diagramme UML<\/h3>\n<p>Dans un diagramme UML, l&rsquo;h\u00e9ritage est repr\u00e9sent\u00e9 par une fl\u00e8che dont la pointe est ferm\u00e9e et blanche. L&rsquo;origine de la fl\u00e8che est la classe sp\u00e9cifique et la destination est la classe g\u00e9n\u00e9rale.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-12475 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/05\/UML_heritage.png\" alt=\"\" width=\"300\" height=\"43\"><\/p>\n<h3>Un exemple<\/h3>\n<p>Voici un diagramme de classe avec h\u00e9ritage:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-10057 size-full\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/05\/animal-1.png\" alt=\"\" width=\"354\" height=\"305\"><\/p>\n<p>On voit ici que la classe g\u00e9n\u00e9rale est la classe \u00ab\u00a0Animal\u00a0\u00bb et les classes \u00ab\u00a0Chien\u00a0\u00bb et \u00ab\u00a0Chat\u00a0\u00bb sont des classes sp\u00e9cifiques de la classe \u00ab\u00a0Animal\u00a0\u00bb. Puisque \u00ab\u00a0Chien\u00a0\u00bb et \u00ab\u00a0Chat\u00a0\u00bb h\u00e9rite de \u00ab\u00a0Animal\u00a0\u00bb, ces classes (\u00ab\u00a0Chien\u00a0\u00bb et \u00ab\u00a0Chat\u00a0\u00bb) contiennent, par h\u00e9ritage les attributs \u00ab\u00a0nom\u00a0\u00bb et \u00ab\u00a0age\u00a0\u00bb. Inversement, puisque les m\u00e9thodes \u00ab\u00a0aboyer\u00a0\u00bb et \u00ab\u00a0miauler\u00a0\u00bb sont d\u00e9clar\u00e9es seulement dans les classes sp\u00e9cifiques, on en d\u00e9duit donc que \u00ab\u00a0Chat\u00a0\u00bb a la m\u00e9thode \u00ab\u00a0miauler\u00a0\u00bb, mais pas la m\u00e9thode \u00ab\u00a0aboyer\u00a0\u00bb et que la classe \u00ab\u00a0Chien\u00a0\u00bb a la m\u00e9thode \u00ab\u00a0aboyer\u00a0\u00bb, mais pas la m\u00e9thode \u00ab\u00a0miauler\u00a0\u00bb.<\/p>\n<h3>L&rsquo;h\u00e9ritage en Java<\/h3>\n<p>Dans le langage Java, on sp\u00e9cifie l&rsquo;h\u00e9ritage en utilisant la clause \u00ab\u00a0extends\u00a0\u00bb. Voici l&rsquo;exemple pr\u00e9sent\u00e9 pr\u00e9c\u00e9demment (\u00ab\u00a0Animal\u00a0\u00bb, \u00ab\u00a0Chien\u00a0\u00bb et \u00ab\u00a0Chat\u00a0\u00bb) en Java:<\/p>\n<p>Voici la classe \u00ab\u00a0Animal\u00a0\u00bb:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Repr\u00e9sente tous les sp\u00e9cimens animal.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mercredi mar 10, 2021 16:58:57 EST<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Animal<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * L'identificateur de l'Animal<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"n\">String<\/span> <span class=\"n\">nom<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Retourne nom. <\/span>\r\n<span class=\"cm\">     * @return nom<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"n\">String<\/span> <span class=\"nf\">getNom<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">nom<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Assigne nom. <\/span>\r\n<span class=\"cm\">     * @param aNom Nouvelle valeur de nom.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">setNom<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">nom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n    \r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Le nombre d'ann\u00e9es depuis la naissance de l'Animal<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">age<\/span><span class=\"o\">;<\/span>    \r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Retourne age. <\/span>\r\n<span class=\"cm\">     * @return age<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">int<\/span> <span class=\"nf\">getAge<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">age<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Assigne age. <\/span>\r\n<span class=\"cm\">     * @param aAge Nouvelle valeur de age.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">setAge<\/span><span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">age<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Voici la classe \u00ab\u00a0Chien\u00a0\u00bb:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Animal de race canine.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mercredi mar 10, 2021 17:03:49 EST<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Chien<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Animal<\/span><span class=\"o\">{<\/span>\r\n\t\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Cri du chien.<\/span>\r\n<span class=\"cm\">     **\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">aboyer<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Wouf Wouf!\"<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Voici la classe \u00ab\u00a0Chat\u00a0\u00bb:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Animal de race f\u00e9line.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mercredi mar 10, 2021 17:03:49 EST<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Chat<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Animal<\/span><span class=\"o\">{<\/span>\r\n\t\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Cri du chat.<\/span>\r\n<span class=\"cm\">     **\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">miauler<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Miaou!\"<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Et finalement, pour tester, la classe \u00ab\u00a0Programme\u00a0\u00bb:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Programme principal de l'exemple des animaux.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mercredi mar 10, 2021 17:14:16 EST<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Ex\u00e9cution du programme.<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aArguments Les param\u00eatres du programme.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">Chien<\/span> <span class=\"n\">lChien<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Chien<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">Chat<\/span> <span class=\"n\">lChat<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Chat<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">lChien<\/span><span class=\"o\">.<\/span><span class=\"na\">setNom<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Rex\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lChat<\/span><span class=\"o\">.<\/span><span class=\"na\">setNom<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Minou\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lChien<\/span><span class=\"o\">.<\/span><span class=\"na\">setAge<\/span><span class=\"o\">(<\/span><span class=\"mi\">10<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lChat<\/span><span class=\"o\">.<\/span><span class=\"na\">setAge<\/span><span class=\"o\">(<\/span><span class=\"mi\">3<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"L'age du chien \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lChien<\/span><span class=\"o\">.<\/span><span class=\"na\">getNom<\/span><span class=\"o\">()<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" est \"<\/span> <span class=\"o\">+<\/span>\r\n        <span class=\"n\">lChien<\/span><span class=\"o\">.<\/span><span class=\"na\">getAge<\/span><span class=\"o\">());<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"L'age du chat \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lChat<\/span><span class=\"o\">.<\/span><span class=\"na\">getNom<\/span><span class=\"o\">()<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" est \"<\/span> <span class=\"o\">+<\/span>\r\n        <span class=\"n\">lChat<\/span><span class=\"o\">.<\/span><span class=\"na\">getAge<\/span><span class=\"o\">());<\/span>\r\n        <span class=\"n\">lChien<\/span><span class=\"o\">.<\/span><span class=\"na\">aboyer<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">lChat<\/span><span class=\"o\">.<\/span><span class=\"na\">miauler<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Le r\u00e9sultat du programme est:<\/p>\n<pre>L'age du chien Rex est 10\r\nL'age du chat Minou est 3\r\nWouf Wouf!\r\nMiaou!<\/pre>\n<p>L&rsquo;exemple nous montre en effet que, malgr\u00e9 que mes variables \u00ab\u00a0lChien\u00a0\u00bb et \u00ab\u00a0lChat\u00a0\u00bb ne sont pas typ\u00e9es comme \u00ab\u00a0Animal\u00a0\u00bb, ils ont tout de m\u00eame acc\u00e8s aux \u00ab\u00a0getters\u00a0\u00bb et \u00ab\u00a0setters\u00a0\u00bb des attributs \u00ab\u00a0nom\u00a0\u00bb et \u00ab\u00a0age\u00a0\u00bb.<\/p>\n<h3>\u00c0 noter<\/h3>\n<p>Il est important de comprendre que les liens d&rsquo;h\u00e9ritages peuvent s&rsquo;appliquer sur plusieurs niveaux. En effet, une classe qui est la classe g\u00e9n\u00e9rale d&rsquo;une autre classe peut elle aussi h\u00e9riter d&rsquo;une classe. Par exemple dans le diagramme de classe suivant:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-12478 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/05\/UML_heritage_multiniveau.png\" alt=\"\" width=\"470\" height=\"384\"><\/p>\n<p>On voit que la classe \u00ab\u00a0Chien\u00a0\u00bb h\u00e9rite de \u00ab\u00a0Animal\u00a0\u00bb (comme c&rsquo;\u00e9tait le cas pr\u00e9c\u00e9demment), mais maintenant, puisque \u00ab\u00a0Animal\u00a0\u00bb h\u00e9rite de \u00ab\u00a0Esp\u00e8ce\u00a0\u00bb, on peut \u00e9galement dire que \u00ab\u00a0Chien\u00a0\u00bb h\u00e9rite de \u00ab\u00a0Esp\u00e8ce\u00a0\u00bb. En d&rsquo;autres mots, tous les attributs et les m\u00e9thodes de \u00ab\u00a0Esp\u00e8ce\u00a0\u00bb seront h\u00e9rit\u00e9s dans \u00ab\u00a0Animal\u00a0\u00bb, \u00ab\u00a0Insecte\u00a0\u00bb, \u00ab\u00a0Chien\u00a0\u00bb, \u00ab\u00a0Chat\u00a0\u00bb et \u00ab\u00a0Abeille\u00a0\u00bb.<\/p>\n<p>On dit qu&rsquo;une classe est l&rsquo;<strong>anc\u00eatre<\/strong> d&rsquo;une autre classe s&rsquo;il y a un \u00ab\u00a0chemin\u00a0\u00bb permettant d&rsquo;atteindre l&rsquo;autre classe en suivant les liens d&rsquo;h\u00e9ritage parent vers enfant. \u00c9galement, si une classe est l&rsquo;anc\u00eatre d&rsquo;une autre classe, cette autre classe est dite <strong>descendant<\/strong> de la classe anc\u00eatre.<\/p>\n<p>La structure parent\/enfant que cr\u00e9\u00e9 l&rsquo;h\u00e9ritage simple g\u00e9n\u00e8re un arbre appel\u00e9 <strong>arbre d&rsquo;h\u00e9ritage<\/strong>.<\/p>\n<h2>\u00c0 noter \u00e0 propos de l&rsquo;arbre d&rsquo;h\u00e9ritage<\/h2>\n<p>En Java, la classe \u00e0 la racine d&rsquo;arbre d&rsquo;h\u00e9ritage est la classe <strong>Object<\/strong>.<\/p>\n<p>Il est \u00e9galement important de noter que toutes les classes h\u00e9ritent, directement ou indirectement, de la classe Object; et ce, m\u00eame si l&rsquo;h\u00e9ritage n&rsquo;est pas sp\u00e9cifi\u00e9. Par exemple, la classe suivante h\u00e9rite de \u00ab\u00a0Object\u00a0\u00bb:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Test<\/span> <span class=\"o\">{<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h2>Les constructeurs<\/h2>\n<p>Dans l&rsquo;exemple sur les Animaux vu plus haut, on voit que je n&rsquo;ai pas mis de constructeur \u00e0 ma classe. Par contre, puisque cette classe poss\u00e8de des attributs, j&rsquo;aurais donc d\u00fb lui mettre un constructeur afin d&rsquo;initialiser ces attributs. Donc, voici la classe \u00ab\u00a0Animal\u00a0\u00bb avec un constructeur permettant de pr\u00e9assigner les valeurs des attributs \u00ab\u00a0nom\u00a0\u00bb et \u00ab\u00a0age\u00a0\u00bb.<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Repr\u00e9sente tous les sp\u00e9cimens animal.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mercredi mar 10, 2021 16:58:57 EST<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Animal<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * L'identificateur de l'Animal<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"n\">String<\/span> <span class=\"n\">nom<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Retourne nom. <\/span>\r\n<span class=\"cm\">     * @return nom<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"n\">String<\/span> <span class=\"nf\">getNom<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">nom<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Assigne nom. <\/span>\r\n<span class=\"cm\">     * @param aNom Nouvelle valeur de nom.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">setNom<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">nom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n    \r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Le nombre d'ann\u00e9es depuis la naissance de l'Animal<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">age<\/span><span class=\"o\">;<\/span>    \r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Retourne age. <\/span>\r\n<span class=\"cm\">     * @return age<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">int<\/span> <span class=\"nf\">getAge<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">age<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Assigne age. <\/span>\r\n<span class=\"cm\">     * @param aAge Nouvelle valeur de age.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">setAge<\/span><span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">age<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Constructeur de Animal<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aNom Valeur de nom<\/span>\r\n<span class=\"cm\">     * @param aAge Valeur de age<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Animal<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">,<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">nom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"n\">age<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Par contre, nous voyons que lorsque nous instancions des objets de type \u00ab\u00a0Chien\u00a0\u00bb et \u00ab\u00a0Chat\u00a0\u00bb, comme ceci:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"n\">Chien<\/span> <span class=\"n\">lChien<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Chien<\/span><span class=\"o\">();<\/span>\r\n<span class=\"n\">Chat<\/span> <span class=\"n\">lChat<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Chat<\/span><span class=\"o\">();<\/span>\r\n<\/pre>\n<\/div>\n<p>les constructeurs utilis\u00e9s sont ceux de \u00ab\u00a0Chien\u00a0\u00bb et de \u00ab\u00a0Chat\u00a0\u00bb et non celui de \u00ab\u00a0Animal\u00a0\u00bb. Il est donc n\u00e9cessaire de lancer le constructeur de \u00ab\u00a0Animal\u00a0\u00bb \u00e0 partir des constructeurs de \u00ab\u00a0Chien\u00a0\u00bb et de \u00ab\u00a0Chat\u00a0\u00bb pour s&rsquo;assurer que les attributs de la classe \u00ab\u00a0Animal\u00a0\u00bb soient bel et bien initialis\u00e9s.<\/p>\n<p>Pour lancer le constructeur de la classe parent, nous utilisons l&rsquo;appel de m\u00e9thode sp\u00e9ciale <strong>super<\/strong>. Voici les classes \u00ab\u00a0Chien\u00a0\u00bb et \u00ab\u00a0Chat\u00a0\u00bb modifi\u00e9es avec leurs constructeurs.<\/p>\n<p>La classe \u00ab\u00a0Chien\u00a0\u00bb:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Animal de race canine.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mercredi mar 10, 2021 17:03:49 EST<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Chien<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Animal<\/span><span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Cri du chien.<\/span>\r\n<span class=\"cm\">     **\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">aboyer<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Wouf Wouf!\"<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Constructeur du Chien<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aNom Valeur de nom<\/span>\r\n<span class=\"cm\">     * @param aAge Valeur de age<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Chien<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">,<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kd\">super<\/span><span class=\"o\">(<\/span><span class=\"n\">aNom<\/span><span class=\"o\">,<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>La classe \u00ab\u00a0Chat\u00a0\u00bb:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Animal de race f\u00e9line.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mercredi mar 10, 2021 17:03:49 EST<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Chat<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Animal<\/span><span class=\"o\">{<\/span>\r\n\t\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Cri du chat.<\/span>\r\n<span class=\"cm\">     **\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">miauler<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Miaou!\"<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Constructeur du Chat<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aNom Valeur de nom<\/span>\r\n<span class=\"cm\">     * @param aAge Valeur de age<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Chat<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">,<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kd\">super<\/span><span class=\"o\">(<\/span><span class=\"n\">aNom<\/span><span class=\"o\">,<\/span> <span class=\"n\">aAge<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Finalement, le programme doit \u00eatre modifi\u00e9 afin d&rsquo;utiliser les nouveaux constructeurs de nos classes \u00ab\u00a0Chien\u00a0\u00bb et \u00ab\u00a0Chat\u00a0\u00bb:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Programme principal de l'exemple des animaux.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mercredi mar 10, 2021 17:14:16 EST<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Ex\u00e9cution du programme.<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aArguments Les param\u00eatres du programme.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">Chien<\/span> <span class=\"n\">lChien<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Chien<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Rex\"<\/span><span class=\"o\">,<\/span> <span class=\"mi\">10<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">Chat<\/span> <span class=\"n\">lChat<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Chat<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Minou\"<\/span><span class=\"o\">,<\/span> <span class=\"mi\">3<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"L'age du chien \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lChien<\/span><span class=\"o\">.<\/span><span class=\"na\">getNom<\/span><span class=\"o\">()<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" est \"<\/span> <span class=\"o\">+<\/span>\r\n                <span class=\"n\">lChien<\/span><span class=\"o\">.<\/span><span class=\"na\">getAge<\/span><span class=\"o\">());<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"L'age du chat \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lChat<\/span><span class=\"o\">.<\/span><span class=\"na\">getNom<\/span><span class=\"o\">()<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" est \"<\/span> <span class=\"o\">+<\/span>\r\n                <span class=\"n\">lChat<\/span><span class=\"o\">.<\/span><span class=\"na\">getAge<\/span><span class=\"o\">());<\/span>\r\n        <span class=\"n\">lChien<\/span><span class=\"o\">.<\/span><span class=\"na\">aboyer<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">lChat<\/span><span class=\"o\">.<\/span><span class=\"na\">miauler<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h2>Un petit truc<\/h2>\n<p>Souvent, les d\u00e9butants en \u00ab\u00a0desing\u00a0\u00bb orient\u00e9 objet ont de la mis\u00e8re a savoir s&rsquo;ils doivent utiliser un lien client\/fournisseur ou un lien d&rsquo;h\u00e9ritage entre deux classes. Voici un petit truc qui vous permettra d&rsquo;utiliser le bon lien:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Lorsqu&rsquo;on peut dire: <strong>est un<\/strong> ou <strong>est une<\/strong> en parlant de nos deux classes, on obtient un lien d&rsquo;h\u00e9ritage.\n<ul>\n<li>Par exemple, si j&rsquo;ai les classes \u00ab\u00a0Fruit\u00a0\u00bb et \u00ab\u00a0Pomme\u00a0\u00bb, je peux dire \u00ab\u00a0une pomme <strong>est un<\/strong> fruit\u00a0\u00bb. Donc \u00ab\u00a0Pomme\u00a0\u00bb h\u00e9ritera de \u00ab\u00a0Fruit\u00a0\u00bb.<\/li>\n<\/ul>\n<\/li>\n<li>Lorsqu&rsquo;on peut dire: <strong>a un<\/strong>, <strong>a une<\/strong>, <strong>a des<\/strong>, <strong>utilise un<\/strong>, <strong>utilise une<\/strong> ou <strong>utilise des<\/strong>, on a un lien client\/fournisseur.\n<ul>\n<li>Par exemple, si j&rsquo;ai la classe \u00ab\u00a0Pommier\u00a0\u00bb et \u00ab\u00a0Pomme\u00a0\u00bb, je peux dire \u00ab\u00a0un pommier <strong>a des<\/strong> pommes\u00a0\u00bb. Donc, \u00ab\u00a0Pommier\u00a0\u00bb est client de \u00ab\u00a0Pomme\u00a0\u00bb.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>\u00c0 propos des Exceptions<\/h2>\n<p>Nous avons vue dans une pr\u00e9sentation pr\u00e9c\u00e9dente, que pour g\u00e9rer les erreurs dans les m\u00e9thodes des classes, nous utilisons des Exceptions. Pour se faire, nous avons jusqu&rsquo;\u00e0 maintenant utilis\u00e9e des instances de la classe \u00ab\u00a0Exception\u00a0\u00bb comme ceci:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Exception<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Message\"<\/span><span class=\"o\">);<\/span>\r\n<\/pre>\n<\/div>\n<p>Par contre, ce n&rsquo;est g\u00e9n\u00e9ralement pas une bonne pratique. Le probl\u00e8me ici, c&rsquo;est que \u00e7a force le client de la classe \u00e0 faire un code comme ceci:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">maMethode<\/span><span class=\"o\">();<\/span>\r\n<span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">Exception<\/span> <span class=\"n\">exception<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Erreur!!!\"<\/span><span class=\"o\">);<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Dans le code suivant, le \u00ab\u00a0catch\u00a0\u00bb sera utilis\u00e9 peu importe le type d&rsquo;Exception que la m\u00e9thode pourra lanc\u00e9. Il n&rsquo;est donc pas possible pour le client de distinguer de quel type d&rsquo;erreur il s&rsquo;agit. Afin de rem\u00e9dier \u00e0 cette probl\u00e9matique, nous pouvons cr\u00e9er un nouveau type d&rsquo;Exception, propre \u00e0 notre programme qui sera utilis\u00e9 \u00e0 la place de la classe \u00ab\u00a0Exception\u00a0\u00bb. Pour se faire, nous devons cr\u00e9er une nouvelle classe qui h\u00e9rite de \u00ab\u00a0Exception\u00a0\u00bb. Voici un exemple:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Exception \u00e0 lancer lorsqu'un String n'est pas valide.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, lundi mar 15, 2021 09:59:26 EDT<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">StringNonValideException<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Exception<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Constructeur de StringNonValideException<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">StringNonValideException<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aMessage<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kd\">super<\/span><span class=\"o\">(<\/span><span class=\"n\">aMessage<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Voici maintenant un exemple de code qui utilise cet exceptions:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Un individu.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, lundi mar 15, 2021 20:03:19 EDT<\/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\">Personne<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Le nom de famille de la personne.<\/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=\"o\">;<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Retourne nom. <\/span>\r\n<span class=\"cm\">     * @return nom<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"n\">String<\/span> <span class=\"nf\">getNom<\/span><span class=\"o\">(){<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">nom<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Assigne nom. <\/span>\r\n<span class=\"cm\">     * @param aNom Nouvelle valeur de nom.<\/span>\r\n<span class=\"cm\">     * @throws StringNonValideException Si aNom est null ou vide.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">setNom<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"n\">StringNonValideException<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">aNom<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">null<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">!<\/span><span class=\"n\">aNom<\/span><span class=\"o\">.<\/span><span class=\"na\">isEmpty<\/span><span class=\"o\">()){<\/span>\r\n            <span class=\"n\">nom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"n\">StringNonValideException<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Le nom ne peut pas \u00eatre null\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * L'identificateur de la personne.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">private<\/span> <span class=\"n\">String<\/span> <span class=\"n\">prenom<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Retourne prenom. <\/span>\r\n<span class=\"cm\">     * @return prenom<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"n\">String<\/span> <span class=\"nf\">getPrenom<\/span><span class=\"o\">(){<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">prenom<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Assigne prenom. <\/span>\r\n<span class=\"cm\">     * @param aPrenom Nouvelle valeur de prenom.<\/span>\r\n<span class=\"cm\">     * @throws StringNonValideException Si aPrenom est null ou vide.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">setPrenom<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aPrenom<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"n\">StringNonValideException<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">aPrenom<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">null<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">!<\/span><span class=\"n\">aPrenom<\/span><span class=\"o\">.<\/span><span class=\"na\">isEmpty<\/span><span class=\"o\">()){<\/span>\r\n            <span class=\"n\">prenom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aPrenom<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"n\">StringNonValideException<\/span><span class=\"o\">(<\/span>\r\n                    <span class=\"s\">\"Le prenom ne peut pas \u00eatre null\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * L'identificateur compet de la Personne.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"n\">String<\/span> <span class=\"nf\">getNomComplet<\/span><span class=\"o\">(){<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">prenom<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">nom<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Assigne nom et prenom.<\/span>\r\n<span class=\"cm\">     * @param aNom nouvelle valeur de nom.<\/span>\r\n<span class=\"cm\">     * @param aPrenom nouvelle valeur de prenom.<\/span>\r\n<span class=\"cm\">     * @throws StringNonValideException Si aNom ou aPrenom est null ou vide.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">setNomComplet<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">,<\/span> <span class=\"n\">String<\/span> <span class=\"n\">aPrenom<\/span><span class=\"o\">)<\/span>\r\n            <span class=\"kd\">throws<\/span> <span class=\"n\">StringNonValideException<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">setNom<\/span><span class=\"o\">(<\/span><span class=\"n\">aNom<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">setPrenom<\/span><span class=\"o\">(<\/span><span class=\"n\">aPrenom<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Constructeur de Personne<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aNom Valeur de nom.<\/span>\r\n<span class=\"cm\">     * @param aPrenom Valeur de prenom.<\/span>\r\n<span class=\"cm\">     * @throws StringNonValideException Si aNom ou aPrenom est null ou vide.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Personne<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aNom<\/span><span class=\"o\">,<\/span> <span class=\"n\">String<\/span> <span class=\"n\">aPrenom<\/span><span class=\"o\">)<\/span>\r\n            <span class=\"kd\">throws<\/span> <span class=\"n\">StringNonValideException<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">setNomComplet<\/span><span class=\"o\">(<\/span><span class=\"n\">aNom<\/span><span class=\"o\">,<\/span> <span class=\"n\">aPrenom<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Enfin, voi\u00e7i un exemple de programme utilisant cette classe Personne avec l&rsquo;exception:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Scanner<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Exemple d'utilisation d'exception.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, lundi mar 15, 2021 20:08:45 EDT<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Ex\u00e9cution du programme.<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aArguments Les param\u00eatres du programme.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">Scanner<\/span> <span class=\"n\">lScanner<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Scanner<\/span><span class=\"o\">(<\/span><span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">in<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">String<\/span> <span class=\"n\">lPrenom<\/span><span class=\"o\">,<\/span> <span class=\"n\">lNom<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Entrez le prenom: \"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lPrenom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Entrez le nom: \"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lNom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">Personne<\/span> <span class=\"n\">lPersonne<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Personne<\/span><span class=\"o\">(<\/span><span class=\"n\">lPrenom<\/span><span class=\"o\">,<\/span> <span class=\"n\">lNom<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"La personne: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lPersonne<\/span><span class=\"o\">.<\/span><span class=\"na\">getPrenom<\/span><span class=\"o\">()<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" \"<\/span> <span class=\"o\">+<\/span>\r\n                    <span class=\"n\">lPersonne<\/span><span class=\"o\">.<\/span><span class=\"na\">getNom<\/span><span class=\"o\">());<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">StringNonValideException<\/span> <span class=\"n\">exception<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Les pr\u00e9noms et noms ne peuvent \u00eatre vide.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h2>\u00c0 propos de la port\u00e9e prot\u00e9g\u00e9e<\/h2>\n<p>Comme nous l&rsquo;avons vu dans la th\u00e9orie sur le masquage de l&rsquo;information, la port\u00e9e prot\u00e9g\u00e9e en Java sert, entre autre, \u00e0 permettre aux descendants d&rsquo;une classe d&rsquo;acc\u00e9der \u00e0 une m\u00e9thode ou \u00e0 un attribut de la classe. En effet, parfois, il peut \u00eatre pratique de permettre aux descendants de la classe d&rsquo;acc\u00e9der \u00e0 une m\u00e9thode ou \u00e0 un attribut, sans n\u00e9cessairement rendre cette m\u00e9thode ou cet attribut publique.<\/p>\n<p>Voici un exemple. J&rsquo;ai trois menus qui effectue du travail tr\u00e8s similaire. Afin de diminuer au maximum la duplication de code, voici une classe parent qui sera utilis\u00e9e pour tous les menus:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Scanner<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Anc\u00eatre commun \u00e0 tous les menus.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mardi mar 16, 2021 09:49:04 EDT<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Menu<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">protected<\/span> <span class=\"n\">Scanner<\/span> <span class=\"n\">scanner<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Dernier choix s\u00e9lectionn\u00e9 par la m\u00e9thode `selectionChoix`.<\/span>\r\n<span class=\"cm\">     * @see #selectionChoix<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">protected<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">choixSelectionne<\/span><span class=\"o\">;<\/span>\r\n\r\n\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * S\u00e9lectionne une valeur entre `aMinimum` et `aMaximum`.<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * S\u00e9lectionne une valeur entre `aMinimum` et `aMaximum` et place sa<\/span>\r\n<span class=\"cm\">     * valeur dans {@link choixSelectionne}.<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aMinimum La valeur minimum que l'utilisateur peut entrer.<\/span>\r\n<span class=\"cm\">     * @param aMaximum La valeur maximum que l'utilisateur peut entrer.<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @see #selectionChoix<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">protected<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">selectionChoix<\/span><span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">aMinimum<\/span><span class=\"o\">,<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">aMaximum<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kt\">boolean<\/span> <span class=\"n\">lValide<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"n\">String<\/span> <span class=\"n\">lEntree<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lValeur<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"k\">while<\/span> <span class=\"o\">(!<\/span><span class=\"n\">lValide<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Choix: \"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"n\">lEntree<\/span> <span class=\"o\">=<\/span> <span class=\"n\">scanner<\/span><span class=\"o\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">lValeur<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Integer<\/span><span class=\"o\">.<\/span><span class=\"na\">parseInt<\/span><span class=\"o\">(<\/span><span class=\"n\">lEntree<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lValeur<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"n\">aMinimum<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">lValeur<\/span> <span class=\"o\">&lt;=<\/span> <span class=\"n\">aMaximum<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                    <span class=\"n\">choixSelectionne<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lValeur<\/span><span class=\"o\">;<\/span>\r\n                    <span class=\"n\">lValide<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"o\">;<\/span>\r\n                <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n                    <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Vous devez entrer une valeur entre \"<\/span> <span class=\"o\">+<\/span>\r\n                            <span class=\"n\">aMinimum<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" et \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">aMaximum<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"o\">}<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">NumberFormatException<\/span> <span class=\"n\">exception<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"La valeur \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lEntree<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" n'est pas valide.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Constructeur de Menu<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Menu<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">choixSelectionne<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"n\">scanner<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Scanner<\/span><span class=\"o\">(<\/span><span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">in<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>On voit que puisque la m\u00e9thode \u00ab\u00a0selectionChoix\u00a0\u00bb est prot\u00e9g\u00e9e, on comprend que les descendants de la classe Menu pourront utiliser la m\u00e9thode. \u00c9galement, on peut voir que si les diff\u00e9rents menus n\u00e9cessitent un \u00ab\u00a0Scanner\u00a0\u00bb, ils pourront utiliser celui pr\u00e9vus dans cette classe.<\/p>\n<p>Voici deux menus permettant de g\u00e9rer un programme dans deux langues diff\u00e9rentes:<\/p>\n<p>En fran\u00e7ais:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Le menu principal en fran\u00e7ais.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mardi mar 16, 2021 12:59:12 EDT<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">MenuFrancais<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Menu<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Constructeur de MenuFrancais<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">MenuFrancais<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kd\">super<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Affiche le menu.<\/span>\r\n<span class=\"cm\">     **\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">afficherMenu<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Que voulez-vous faire:\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t1 - Dire Allo,\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t2 - Dire Salut,\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t3 - Dire Bonjour,\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t0 - Annuler.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">selectionChoix<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"mi\">3<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">choixSelectionne<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">1<\/span><span class=\"o\">){<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Allo\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">choixSelectionne<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">2<\/span><span class=\"o\">){<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Salut\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">choixSelectionne<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">3<\/span><span class=\"o\">){<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Bonjour\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> \r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>En anglais:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Le menu principal en Anglais.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mardi mar 16, 2021 12:59:12 EDT<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">MenuAnglais<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Menu<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Constructeur de MenuAnglais<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">MenuAnglais<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kd\">super<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Affiche le menu.<\/span>\r\n<span class=\"cm\">     **\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">afficherMenu<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"What do you want:\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t1 - Say Hello,\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t2 - Say Hi,\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t3 - Say Good day,\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t0 - Cancel.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">selectionChoix<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"mi\">3<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">choixSelectionne<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">1<\/span><span class=\"o\">){<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Hello\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">choixSelectionne<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">2<\/span><span class=\"o\">){<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Hi\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">choixSelectionne<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">3<\/span><span class=\"o\">){<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Good day\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> \r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Voici un autre menu permettant de s\u00e9lectionner une langue pour le programme:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Le menu des langues<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, mardi mar 16, 2021 12:59:12 EDT<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">MenuLangue<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Menu<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Constructeur de MenuLangue<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">MenuLangue<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kd\">super<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Affiche le menu.<\/span>\r\n<span class=\"cm\">     **\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">afficherMenu<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Langue\/Language:\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t1 - Fran\u00e7ais,\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t2 - English,\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\t0 - Annuler.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">selectionChoix<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"mi\">2<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">choixSelectionne<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">1<\/span><span class=\"o\">){<\/span>\r\n            <span class=\"n\">MenuFrancais<\/span> <span class=\"n\">lMenu<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">MenuFrancais<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"n\">lMenu<\/span><span class=\"o\">.<\/span><span class=\"na\">afficherMenu<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">choixSelectionne<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">2<\/span><span class=\"o\">){<\/span>\r\n            <span class=\"n\">MenuAnglais<\/span> <span class=\"n\">lMenu<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">MenuAnglais<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"n\">lMenu<\/span><span class=\"o\">.<\/span><span class=\"na\">afficherMenu<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"o\">}<\/span> \r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Enfin, voici la classe principale du programme qui d\u00e9marre les diff\u00e9rents menus:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Exemple d'utilisation de la port\u00e9e prot\u00e9g\u00e9e.<\/span>\r\n<span class=\"cm\"> * <\/span>\r\n<span class=\"cm\"> * @author Louis Marchand (prog@tioui.com)<\/span>\r\n<span class=\"cm\"> * @version 0.1, lundi mar 15, 2021 20:08:45 EDT<\/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\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Ex\u00e9cution du programme.<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @param aArguments Les param\u00eatres du programme.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">MenuLangue<\/span> <span class=\"n\">lMenu<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">MenuLangue<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">lMenu<\/span><span class=\"o\">.<\/span><span class=\"na\">afficherMenu<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\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 En programmation orient\u00e9e objet, l&rsquo;h\u00e9ritage est un des concepts cl\u00e9s. Il permet, entre autres, le polymorphisme, la g\u00e9n\u00e9ralisation, une meilleure encapsulation de l&rsquo;information, une diminution du nombre de m\u00e9thodes et attribut dans les classes (ce qui les rend plus simples) ainsi qu&rsquo;une diminution substantielle de la duplication de code du syst\u00e8me. C&rsquo;est quoi, l&rsquo;h\u00e9ritage&hellip; <a class=\"more-link\" href=\"https:\/\/www.louismarchand.me\/index.php\/lheritage\/\">Continue reading <span class=\"screen-reader-text\">L&rsquo;h\u00e9ritage<\/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-67","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/67","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=67"}],"version-history":[{"count":3,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/67\/revisions"}],"predecessor-version":[{"id":609,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/67\/revisions\/609"}],"wp:attachment":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/media?parent=67"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}