{"id":243,"date":"2021-08-25T18:54:23","date_gmt":"2021-08-25T18:54:23","guid":{"rendered":"https:\/\/www.louismarchand.me\/?page_id=243"},"modified":"2021-08-25T19:54:12","modified_gmt":"2021-08-25T19:54:12","slug":"objet2-les-interfaces-en-java-et-c","status":"publish","type":"page","link":"https:\/\/www.louismarchand.me\/index.php\/objet2-les-interfaces-en-java-et-c\/","title":{"rendered":"Les interfaces en Java et C#"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>Il est important de comprendre que la th\u00e9orie pr\u00e9sent\u00e9e ici n&rsquo;est pas une notion de programmation orient\u00e9e objet, mais bien une notion propre \u00e0 certains langages comme Java et C#.<\/p>\n<h2>Qu&rsquo;est-ce qu&rsquo;une interface en Java\/C#<\/h2>\n<p>En Java et C#, on appelle <strong>interface<\/strong> une liste de d\u00e9finition de m\u00e9thodes qu&rsquo;une classe doit fournir \u00e0 ses clients (m\u00e9thode publique). D&rsquo;une mani\u00e8re similaire, une interface est \u00e9quivalente \u00e0 une classe abstraite ne contenant que des m\u00e9thodes abstraites (aucun attribut ni m\u00e9thode effective ou impl\u00e9ment\u00e9e).<\/p>\n<p>Lorsqu&rsquo;une classe \u00ab\u00a0h\u00e9rite\u00a0\u00bb d&rsquo;une interface, on dit que cette classe <strong>impl\u00e9mente<\/strong> une interface. On utilise ce terme pour s&rsquo;assurer de ne pas confondre l&rsquo;arbre d&rsquo;h\u00e9ritage et la structure d&rsquo;interface.<\/p>\n<h2>\u00c0 quoi sert une interface en Java\/C#<\/h2>\n<p>On voit que l&rsquo;interface ne peut pas \u00eatre utilis\u00e9e afin d&rsquo;encapsuler du code (m\u00e9thodes) ou des donn\u00e9es (attribut), comme peuvent le faire des classes. On peut donc se demander \u00e0 quoi peut servir une interface.<\/p>\n<p>L&rsquo;avantage d&rsquo;une interface par rapport \u00e0 une classe est que (en Java et C#) est qu&rsquo;il est impossible d&rsquo;h\u00e9riter de plus qu&rsquo;une seule classe (ce qu&rsquo;on appelle h\u00e9ritage simple). Par contre, malgr\u00e9 certaines probl\u00e9matiques caus\u00e9es par l&rsquo;h\u00e9ritage multiple (que nous \u00e9tudierons dans le cours de programmation orient\u00e9e objet 2), ce type d&rsquo;h\u00e9ritage a plusieurs avantages majeurs (diminution de la duplication de code, augmentation de la r\u00e9utilisation de code, facilit\u00e9 de maintenance, polymorphisme, etc.) L&rsquo;interface permet aux langages Java et C# d&rsquo;avoir l&rsquo;avantage du polymorphisme de l&rsquo;h\u00e9ritage multiple, sans avoir \u00e0 g\u00e9rer les inconv\u00e9nients de l&rsquo;h\u00e9ritage multiple.<\/p>\n<h3>Exemple<\/h3>\n<p>L&rsquo;utilisation de l&rsquo;h\u00e9ritage multiple est vari\u00e9e, mais je peux tout de m\u00eame vous montrer un exemple o\u00f9 \u00e7a pourrait s&rsquo;appliquer.<\/p>\n<p>Supposons que, dans notre syst\u00e8me, nous avons la structure d&rsquo;h\u00e9ritage suivante:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-12718 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/05\/UML_interface1.png\" alt=\"\" width=\"321\" height=\"340\" \/><\/p>\n<p>De plus, dans le m\u00eame syst\u00e8me, nous avons la structure suivante:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-12719 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/05\/UML_interface2.png\" alt=\"\" width=\"360\" height=\"380\" \/><\/p>\n<p>Supposons que nous voulons ajouter un nouvel Animal qui peut \u00e9galement \u00eatre utilis\u00e9 comme v\u00e9hicule. Quelque chose comme ceci:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-12720 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/05\/UML_interface3.png\" alt=\"\" width=\"757\" height=\"250\" \/><\/p>\n<p>Nous voyons que ce \u00ab\u00a0design\u00a0\u00bb est impossible en Java et C# puisque ces langages ne g\u00e8rent pas l&rsquo;h\u00e9ritage multiple et que le Cheval h\u00e9rite de deux classes diff\u00e9rentes. Pour r\u00e9gler cette probl\u00e9matique, nous pouvons utiliser un \u00ab\u00a0design\u00a0\u00bb avec interface. Par exemple:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-12721 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/05\/UML_interface.png\" alt=\"\" width=\"746\" height=\"256\" \/><\/p>\n<p>Voici le code de l&rsquo;interface \u00ab\u00a0Pilotable\u00a0\u00bb et \u00ab\u00a0Cheval\u00a0\u00bb. Au niveau o\u00f9 vous \u00eates rendu, vous devriez \u00eatre capable de programmer vous-m\u00eame les autres classes.<\/p>\n<p>L&rsquo;interface Pilotable:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Interface commune aux objets qui peuvent \u00eatre pilot\u00e9s.<\/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 avr 05, 2021 17:13:42 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\">interface<\/span> <span class=\"nc\">Pilotable<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Embarquement dans l'objet Pilotable.<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n\t<span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">embarquer<\/span><span class=\"o\">();<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Arr\u00eate d'avancer.<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @see #avancer<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">arreter<\/span><span class=\"o\">();<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * L'objet pilotable commence \u00e0 avancer.<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @see #arreter<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">avancer<\/span><span class=\"o\">();<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>La classe Cheval:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\"> * Classe repr\u00e9sentant un Animal de race chevaline.<\/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 avr 05, 2021 17:09:37 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\">Cheval<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Animal<\/span> <span class=\"kd\">implements<\/span> <span class=\"n\">Pilotable<\/span><span class=\"o\">{<\/span>\r\n\t\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Le son qu'\u00e9met l'Animal<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">cri<\/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\">\"Hiiiiii\"<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Arr\u00eate d'avancer<\/span>\r\n<span class=\"cm\">     *<\/span>\r\n<span class=\"cm\">     * @see #avancer<\/span>\r\n<span class=\"cm\">     **\/<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">arreter<\/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\">\"Arr\u00eate de marcher.\"<\/span><span class=\"o\">);<\/span>    \r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"cm\">\/**<\/span>\r\n<span class=\"cm\">     * Embarquement sur le Cheval<\/span>\r\n<span class=\"cm\">     *\/<\/span>\r\n\t<span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">embarquer<\/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\">\"Embarquement sur le cheval.\"<\/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 Cheval<\/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\">Cheval<\/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<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Voici maintenant un exemple de polymorphisme qui utilise cet interface:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">demarrerTransport<\/span><span class=\"o\">(<\/span><span class=\"n\">Pilotable<\/span> <span class=\"n\">aPilotable<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"n\">aPilotable<\/span><span class=\"o\">.<\/span><span class=\"na\">embarquer<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"n\">aPilotable<\/span><span class=\"o\">.<\/span><span class=\"na\">avancer<\/span><span class=\"o\">();<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>On pourrait utiliser cette m\u00e9thode comme ceci:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"n\">Cheval<\/span> <span class=\"n\">lCheval<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Cheval<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Blacky\"<\/span><span class=\"o\">,<\/span> <span class=\"mi\">10<\/span><span class=\"o\">);<\/span>\r\n<span class=\"n\">Automobile<\/span> <span class=\"n\">lAutomobile<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Automobile<\/span><span class=\"o\">();<\/span>\r\n<span class=\"n\">demarrerTransport<\/span><span class=\"o\">(<\/span><span class=\"n\">lCheval<\/span><span class=\"o\">);<\/span>\r\n<span class=\"n\">demarrerTransport<\/span><span class=\"o\">(<\/span><span class=\"n\">lAutomobile<\/span><span class=\"o\">);<\/span>\r\n<\/pre>\n<\/div>\n<h2>Particularit\u00e9 de Java<\/h2>\n<p>Depuis les derni\u00e8res versions de Java, il est possible de mettre du code de m\u00e9thode \u00e0 l&rsquo;int\u00e9rieur d&rsquo;une interface. De cette mani\u00e8re, nous pouvons aller chercher certains autres avantages de l&rsquo;h\u00e9ritage multiple, comme l&rsquo;encapsulation de code.<\/p>\n<p>Malheureusement, puisque le langage Java n&rsquo;a pas \u00e9t\u00e9 cr\u00e9\u00e9 avec l&rsquo;h\u00e9ritage multiple en t\u00eate, le code pouvant \u00eatre plac\u00e9 dans une interface est assez limit\u00e9. Des exemples de limitations sont:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Impossibilit\u00e9 de placer des attributs dans l&rsquo;interface;<\/li>\n<li>Aucune gestion de conflit (si deux interfaces poss\u00e8dent chacune une m\u00e9thode avec la m\u00eame signature);<\/li>\n<li>etc.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>\u00c0 propos de Eiffel<\/h2>\n<p>Puisque Eiffel est un langage de programmation orient\u00e9 objet permettant l&rsquo;h\u00e9ritage multiple, il n&rsquo;est pas n\u00e9cessaire de recourir aux interfaces. Il suffit d&rsquo;h\u00e9riter directement des classes que nous d\u00e9sirons. Nous pouvons donc programmer sans probl\u00e8me la structure suivante en Eiffel.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-12720 aligncenter\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2021\/05\/UML_interface3.png\" alt=\"\" width=\"757\" height=\"250\" \/><\/p>\n<p>Voici cet exemple dans le langage Eiffel.<\/p>\n<p>Classe ANIMAL:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kr\">note<\/span>\r\n\t<span class=\"n\">description<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Un animal dans le programme d'animalerie.\"<\/span>\r\n\t<span class=\"n\">auteur<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Louis Marchand\"<\/span>\r\n\t<span class=\"n\">date<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Mercredi, 25 Ao\u00fbt 2021 19:29:24 +0000\"<\/span>\r\n\t<span class=\"n\">revision<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"0.1\"<\/span>\r\n\r\n<span class=\"kr\">deferred<\/span> <span class=\"kr\">class<\/span>\r\n\t<span class=\"nc\">ANIMAL<\/span>\r\n\r\n<span class=\"kr\">feature<\/span> <span class=\"p\">{<\/span><span class=\"kr\">NONE<\/span><span class=\"p\">}<\/span> <span class=\"c1\">-- Initialisation<\/span>\r\n\r\n\t<span class=\"n\">make<\/span><span class=\"p\">(<\/span><span class=\"n\">a_nom<\/span><span class=\"p\">:<\/span><span class=\"nc\">STRING<\/span><span class=\"p\">;<\/span> <span class=\"n\">a_age<\/span><span class=\"p\">:<\/span><span class=\"nc\">INTEGER<\/span><span class=\"p\">)<\/span>\r\n\t\t\t<span class=\"c1\">-- Initialisation de `Current' assignant `a_nom' \u00e0 `nom'<\/span>\r\n\t\t\t<span class=\"c1\">-- et `a_age' \u00e0 `age'<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">set_nom<\/span><span class=\"p\">(<\/span><span class=\"n\">a_nom<\/span><span class=\"p\">)<\/span>\r\n\t\t\t<span class=\"n\">set_age<\/span><span class=\"p\">(<\/span><span class=\"n\">a_age<\/span><span class=\"p\">)<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n<span class=\"kr\">feature<\/span> <span class=\"c1\">-- Acc\u00e8s<\/span>\r\n\r\n\t<span class=\"n\">nom<\/span><span class=\"p\">:<\/span><span class=\"nc\">STRING<\/span>\r\n\t\t\t<span class=\"c1\">-- L'identificateur texte de `Current'<\/span>\r\n\r\n\t<span class=\"n\">age<\/span><span class=\"p\">:<\/span><span class=\"nc\">INTEGER<\/span>\r\n\t\t\t<span class=\"c1\">-- Le nombre d'ann\u00e9e depuis la naisance de `Current'<\/span>\r\n\r\n\t<span class=\"n\">set_nom<\/span><span class=\"p\">(<\/span><span class=\"n\">a_nom<\/span><span class=\"p\">:<\/span><span class=\"nc\">STRING<\/span><span class=\"p\">)<\/span>\r\n\t\t\t<span class=\"c1\">-- Assigne `a_nom' \u00e0 `nom'<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">nom<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">a_nom<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n\t<span class=\"n\">set_age<\/span><span class=\"p\">(<\/span><span class=\"n\">a_age<\/span><span class=\"p\">:<\/span><span class=\"nc\">INTEGER<\/span><span class=\"p\">)<\/span>\r\n\t\t\t<span class=\"c1\">-- Assigne `a_age' \u00e0 `age'<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">age<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">a_age<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n\t<span class=\"n\">cri<\/span>\r\n\t\t\t<span class=\"c1\">-- Le bruit que fait `Current'<\/span>\r\n\t\t<span class=\"kr\">deferred<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n\t<span class=\"n\">avancer<\/span>\r\n\t\t\t<span class=\"c1\">-- `Current' se d\u00e9place<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"L'animal se met \u00e0 avancer.%N\"<\/span><span class=\"p\">)<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n<span class=\"kr\">end<\/span>\r\n<\/pre>\n<\/div>\n<p>Classe VEHICULE:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kr\">note<\/span>\r\n\t<span class=\"n\">description<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Repr\u00e9sente un v\u00e9hicule dans le programme l'animalerie.\"<\/span>\r\n\t<span class=\"n\">auteur<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Louis Marchand\"<\/span>\r\n\t<span class=\"n\">date<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Mercredi, 25 Ao\u00fbt 2021 19:29:24 +0000\"<\/span>\r\n\t<span class=\"n\">revision<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"0.1\"<\/span>\r\n\r\n<span class=\"kr\">deferred<\/span> <span class=\"kr\">class<\/span>\r\n\t<span class=\"nc\">VEHICULE<\/span>\r\n\r\n<span class=\"kr\">feature<\/span> <span class=\"c1\">-- Acc\u00e8s<\/span>\r\n\r\n\t<span class=\"n\">embarquer<\/span>\r\n\t\t\t<span class=\"c1\">-- `Current' re\u00e7oit un usager<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"L'usager embarque dans le v\u00e9hicule.%N\"<\/span><span class=\"p\">)<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n\t<span class=\"n\">avancer<\/span>\r\n\t\t\t<span class=\"c1\">-- `Current' commence un d\u00e9placement<\/span>\r\n\t\t<span class=\"kr\">deferred<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n\t<span class=\"n\">arreter<\/span>\r\n\t\t\t<span class=\"c1\">-- `Current' arr\u00eate son d\u00e9placement<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Arr\u00eater le v\u00e9hicule.%N\"<\/span><span class=\"p\">)<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n<span class=\"kr\">end<\/span>\r\n<\/pre>\n<\/div>\n<p>Classe CHEVAL:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kr\">note<\/span>\r\n\t<span class=\"n\">description<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Un animal de race chevaline dans l'animalerie.\"<\/span>\r\n\t<span class=\"n\">auteur<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Louis Marchand\"<\/span>\r\n\t<span class=\"n\">date<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Mercredi, 25 Ao\u00fbt 2021 19:29:24 +0000\"<\/span>\r\n\t<span class=\"n\">revision<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"0.1\"<\/span>\r\n\r\n<span class=\"kr\">class<\/span>\r\n\t<span class=\"nc\">CHEVAL<\/span>\r\n\r\n<span class=\"kr\">inherit<\/span>\r\n\t<span class=\"nc\">ANIMAL<\/span>\r\n\t<span class=\"nc\">VEHICULE<\/span>\r\n\t\t<span class=\"kr\">redefine<\/span>\r\n\t\t\t<span class=\"n\">embarquer<\/span><span class=\"p\">,<\/span>\r\n\t\t\t<span class=\"n\">arreter<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n<span class=\"kr\">create<\/span>\r\n\t<span class=\"n\">make<\/span>\r\n\r\n<span class=\"kr\">feature<\/span> <span class=\"c1\">-- Acc\u00e8s<\/span>\r\n\r\n\t<span class=\"n\">cri<\/span>\r\n\t\t\t<span class=\"c1\">-- &lt;Precursor&gt;<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Hiiiiii.%N\"<\/span><span class=\"p\">)<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n\t<span class=\"n\">embarquer<\/span>\r\n\t\t\t<span class=\"c1\">-- &lt;Precursor&gt;<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"L'usager embarque sur le cheval.%N\"<\/span><span class=\"p\">)<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n\t<span class=\"n\">arreter<\/span>\r\n\t\t\t<span class=\"c1\">-- &lt;Precursor&gt;<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Le cheval arr\u00eate d'avancer.%N\"<\/span><span class=\"p\">)<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n\r\n<span class=\"kr\">end<\/span>\r\n<\/pre>\n<\/div>\n<p>Et voici maintenant un programme qui utilise ces classes:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kr\">note<\/span>\r\n\t<span class=\"n\">description<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Exemple d'h\u00e9ritage multiple sans interface avec Eiffel\"<\/span>\r\n\t<span class=\"n\">auteur<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Louis Marchand\"<\/span>\r\n\t<span class=\"n\">date<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Mercredi, 25 Ao\u00fbt 2021 19:29:24 +0000\"<\/span>\r\n\t<span class=\"n\">revision<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"0.1\"<\/span>\r\n\r\n<span class=\"kr\">class<\/span>\r\n\t<span class=\"nc\">APPLICATION<\/span>\r\n\r\n<span class=\"kr\">create<\/span>\r\n\t<span class=\"n\">make<\/span>\r\n\r\n<span class=\"kr\">feature<\/span> <span class=\"p\">{<\/span><span class=\"kr\">NONE<\/span><span class=\"p\">}<\/span> <span class=\"c1\">-- Impl\u00e9mentation<\/span>\r\n\r\n\t<span class=\"n\">make<\/span>\r\n\t\t\t<span class=\"c1\">-- Ex\u00e9cute l'application.<\/span>\r\n\t\t<span class=\"kr\">local<\/span>\r\n\t\t\t<span class=\"n\">l_cheval<\/span><span class=\"p\">:<\/span><span class=\"nc\">CHEVAL<\/span>\r\n\t\t\t<span class=\"n\">l_automobile<\/span><span class=\"p\">:<\/span><span class=\"nc\">AUTOMOBILE<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"kr\">create<\/span> <span class=\"n\">l_cheval<\/span><span class=\"p\">.<\/span><span class=\"n\">make<\/span> <span class=\"p\">(<\/span><span class=\"s\">\"Blacky\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\r\n\t\t\t<span class=\"kr\">create<\/span> <span class=\"n\">l_automobile<\/span>\r\n\t\t\t<span class=\"n\">demarrerTransport<\/span><span class=\"p\">(<\/span><span class=\"n\">l_cheval<\/span><span class=\"p\">)<\/span>\r\n\t\t\t<span class=\"n\">demarrerTransport<\/span><span class=\"p\">(<\/span><span class=\"n\">l_automobile<\/span><span class=\"p\">)<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n\t<span class=\"n\">demarrerTransport<\/span><span class=\"p\">(<\/span><span class=\"n\">a_vehicule<\/span><span class=\"p\">:<\/span><span class=\"nc\">VEHICULE<\/span><span class=\"p\">)<\/span>\r\n\t\t\t<span class=\"c1\">-- D\u00e9marre `a_vehicule'<\/span>\r\n\t\t<span class=\"kr\">do<\/span>\r\n\t\t\t<span class=\"n\">a_vehicule<\/span><span class=\"p\">.<\/span><span class=\"n\">embarquer<\/span>\r\n\t\t\t<span class=\"n\">a_vehicule<\/span><span class=\"p\">.<\/span><span class=\"n\">avancer<\/span>\r\n\t\t<span class=\"kr\">end<\/span>\r\n\r\n<span class=\"kr\">end<\/span>\r\n<\/pre>\n<\/div>\n<p><a href=\"https:\/\/www.louismarchand.me\/index.php\/les-cours\/programmation-orientee-objet-2\/\">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 Il est important de comprendre que la th\u00e9orie pr\u00e9sent\u00e9e ici n&rsquo;est pas une notion de programmation orient\u00e9e objet, mais bien une notion propre \u00e0 certains langages comme Java et C#. Qu&rsquo;est-ce qu&rsquo;une interface en Java\/C# En Java et C#, on appelle interface une liste de d\u00e9finition de m\u00e9thodes qu&rsquo;une classe doit fournir \u00e0 ses&hellip; <a class=\"more-link\" href=\"https:\/\/www.louismarchand.me\/index.php\/objet2-les-interfaces-en-java-et-c\/\">Continue reading <span class=\"screen-reader-text\">Les interfaces en Java et C#<\/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-243","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/243","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=243"}],"version-history":[{"count":5,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/243\/revisions"}],"predecessor-version":[{"id":249,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/243\/revisions\/249"}],"wp:attachment":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/media?parent=243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}