<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Bassaoud</title>
    <description>The latest articles on Forem by Bassaoud (@bassaoudev).</description>
    <link>https://forem.com/bassaoudev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F427475%2F845b2344-f4c8-4ac5-a7e9-8e5169ec356d.png</url>
      <title>Forem: Bassaoud</title>
      <link>https://forem.com/bassaoudev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bassaoudev"/>
    <language>en</language>
    <item>
      <title>Éviter les pièges des évaluations booléennes imprécises en JS/TS</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Sat, 20 Jul 2024 20:01:11 +0000</pubDate>
      <link>https://forem.com/bassaoudev/eviter-les-pieges-des-evaluations-booleennes-imprecises-en-jsts-19hg</link>
      <guid>https://forem.com/bassaoudev/eviter-les-pieges-des-evaluations-booleennes-imprecises-en-jsts-19hg</guid>
      <description>&lt;p&gt;Dans le monde du développement web, nous sommes souvent confrontés à des défis qui, à première vue, semblent simples, mais qui peuvent rapidement se transformer en casse-têtes complexes. Récemment, j'ai vécu une expérience intéressante lors d'un projet Angular qui m'a rappelé l'importance de la précision dans l'évaluation des conditions booléennes en TypeScript. Je souhaite partager cette leçon avec vous, en espérant qu'elle vous aidera à éviter les mêmes écueils.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le contexte du problème
&lt;/h2&gt;

&lt;h3&gt;
  
  
  La situation initiale
&lt;/h3&gt;

&lt;p&gt;Dans un projet Angular, j'étais confronté à une condition qui impliquait quatre variables booléennes. Parmi ces quatre, deux dépendaient de données asynchrones provenant du backend via des observables. L'objectif était simple : la condition ne devait être vraie que si ces deux variables spécifiques étaient fausses.&lt;/p&gt;

&lt;h3&gt;
  
  
  L'approche initiale et ses limites
&lt;/h3&gt;

&lt;p&gt;Initialement, j'ai opté pour une approche qui me semblait logique et concise :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;terrainPret&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arbitreArrive&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
    &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;equipeLocaleAbsente&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;equipeVisiteuseAbsente&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Commencer le match&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cette approche semblait élégante : l'utilisation du point d'exclamation (!) devait garantir que les variables asynchrones soient fausses. Cependant, j'ai rapidement découvert que cette méthode cachait un piège subtil.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le piège de l'évaluation booléenne
&lt;/h2&gt;

&lt;h3&gt;
  
  
  La révélation
&lt;/h3&gt;

&lt;p&gt;Le problème est apparu lorsque j'ai réalisé que mon code ne se comportait pas comme prévu. Après investigation, j'ai compris que j'avais négligé un aspect crucial de l'évaluation booléenne en TypeScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  L'explication technique
&lt;/h3&gt;

&lt;p&gt;En TypeScript, plusieurs valeurs sont considérées comme "falsy", c'est-à-dire qu'elles sont évaluées comme fausses dans un contexte booléen. Ces valeurs incluent :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;false&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;""&lt;/code&gt; (chaîne vide)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NaN&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dans mon cas, les variables asynchrones pouvaient être &lt;code&gt;undefined&lt;/code&gt; avant de recevoir une valeur du backend. Par conséquent, la condition &lt;code&gt;!equipeLocaleAbsente&lt;/code&gt; par exemple était vraie non seulement quand la variable était &lt;code&gt;false&lt;/code&gt;, mais aussi quand elle était &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  La solution : être explicite
&lt;/h2&gt;

&lt;h3&gt;
  
  
  L'approche corrigée
&lt;/h3&gt;

&lt;p&gt;Pour résoudre ce problème, j'ai dû être plus explicite dans ma condition :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;terrainPret&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;arbitreArrive&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
    &lt;span class="nx"&gt;equipeLocaleAbsente&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;equipeVisiteuseAbsente&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Commencer le match&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cette approche garantit que les variables asynchrones sont spécifiquement &lt;code&gt;false&lt;/code&gt;, et non pas simplement une valeur "falsy".&lt;/p&gt;

&lt;h3&gt;
  
  
  Les avantages de la précision
&lt;/h3&gt;

&lt;p&gt;Cette solution présente plusieurs avantages :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Elle élimine l'ambiguïté dans l'évaluation des conditions.&lt;/li&gt;
&lt;li&gt;Elle rend le code plus lisible et plus explicite dans ses intentions.&lt;/li&gt;
&lt;li&gt;Elle prévient les comportements inattendus liés à l'évaluation de valeurs "falsy".&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Cette expérience m'a rappelé l'importance de la précision et de la clarté dans le code, particulièrement lorsqu'on travaille avec des opérations asynchrones et des évaluations booléennes. Elle souligne également la nécessité de bien comprendre les nuances du langage que nous utilisons.&lt;/p&gt;

</description>
      <category>boolean</category>
      <category>typescript</category>
      <category>angular</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Sécurité des formulaires Web : Garantir l'intégrité des données avec une validation robuste</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Sun, 07 Jan 2024 16:43:51 +0000</pubDate>
      <link>https://forem.com/bassaoudev/securite-des-formulaires-web-garantir-lintegrite-des-donnees-avec-une-validation-robuste-573</link>
      <guid>https://forem.com/bassaoudev/securite-des-formulaires-web-garantir-lintegrite-des-donnees-avec-une-validation-robuste-573</guid>
      <description>&lt;p&gt;Récemment, lors de ma navigation sur un site Web, j'ai fait une observation intrigante. En désactivant le &lt;code&gt;disabled&lt;/code&gt; du bouton de soumission, j'ai pu envoyer le formulaire sans avoir rempli toutes les conditions requises, notamment la coche des cases d'acceptation des CGV et d'engagement. Cette expérience a soulevé des questions sur l'efficacité de la validation des formulaires Web et l'importance de la sécurité des données.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attaques et failles de formulaires Web
&lt;/h2&gt;

&lt;p&gt;Les attaques de formulaires Web sont des attaques qui visent à voler ou à modifier les données qui sont collectées via un formulaire Web. Les types d'attaques de formulaires Web les plus courants sont les suivants :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Attaques par injection de code&lt;/strong&gt; : Ces attaques consistent à injecter du code malveillant dans un formulaire Web. Le code malveillant peut ensuite être utilisé pour voler des données ou exécuter des actions non autorisées sur le serveur.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Attaques par falsification de requêtes intersites (CSRF)&lt;/strong&gt; : Ces attaques consistent à inciter un utilisateur à soumettre un formulaire à une application Web sans le savoir. L'attaquant peut utiliser une technique appelée "redirection malveillante" pour rediriger l'utilisateur vers une page Web contrôlée par lui. Cette page Web peut ensuite afficher un formulaire qui ressemble à celui de l'application Web légitime. L'utilisateur, pensant qu'il soumet le formulaire à l'application Web légitime, peut y entrer ses informations d'identification ou d'autres données sensibles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Attaques de forçage de mot de passe&lt;/strong&gt; : Ces attaques consistent à essayer de deviner les mots de passe des utilisateurs. Les attaquants peuvent utiliser des outils automatisés pour essayer de deviner les mots de passe des utilisateurs, ou ils peuvent utiliser des informations personnelles connues de la victime pour essayer de deviner le mot de passe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quelles mesures de sécurité ?
&lt;/h2&gt;

&lt;p&gt;Il existe un certain nombre de mesures que les développeurs peuvent prendre pour renforcer la sécurité des formulaires Web. Ces mesures comprennent :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Validation côté client et côté serveur&lt;/strong&gt; : La validation côté client est une technique qui permet de vérifier les données saisies par l'utilisateur avant de les envoyer au serveur. La validation côté serveur est une technique qui permet de vérifier les données saisies par l'utilisateur une fois qu'elles ont été envoyées au serveur. Les développeurs doivent mettre en œuvre une validation côté client et côté serveur pour assurer la validité des données collectées via un formulaire Web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Sécurisation de la communication&lt;/strong&gt; : La sécurisation de la communication entre le client et le serveur est essentielle pour éviter les attaques de type "man-in-the-middle". Les développeurs doivent utiliser HTTPS pour protéger les données transitant entre le client et le serveur.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Logs d'audit&lt;/strong&gt; : Les logs d'audit peuvent être utilisés pour identifier et résoudre les problèmes potentiels liés à des tentatives de soumission de formulaires non autorisées. Les développeurs doivent mettre en place des logs d'audit pour surveiller les activités liées aux formulaires Web.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solutions de sécurité avancées
&lt;/h2&gt;

&lt;p&gt;En plus des mesures de sécurité de base, les développeurs peuvent également envisager d'utiliser des solutions de sécurité avancées. Ces solutions incluent des technologies telles que la signature numérique et le cryptage des données.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- La signature numérique&lt;/strong&gt; est une technique qui permet de vérifier l'authenticité et l'intégrité des données. Elle peut être utilisée pour protéger les données transmises via un formulaire Web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Le cryptage des données&lt;/strong&gt; est une technique qui permet de rendre les données illisibles sans la clé de déchiffrement appropriée. Il peut être utilisé pour protéger les données sensibles, telles que les numéros de carte de crédit ou les mots de passe, qui sont collectées via un formulaire Web.&lt;/p&gt;

&lt;p&gt;En conclusion, la sécurité des formulaires web doit être une préoccupation pour les développeurs. Comme l'a montré ma petite anecdote, la validation côté serveur ne suffit pas à elle seule. Les développeurs doivent également mettre en œuvre des mesures de validation côté client pour empêcher les utilisateurs de soumettre des formulaires non valides.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Comprendre les flux d'entrées/sorties en Java</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Fri, 31 Mar 2023 17:04:34 +0000</pubDate>
      <link>https://forem.com/bassaoudev/comprendre-les-flux-dentreessorties-en-java-4dmk</link>
      <guid>https://forem.com/bassaoudev/comprendre-les-flux-dentreessorties-en-java-4dmk</guid>
      <description>&lt;p&gt;Les flux d'entrées/sorties (E/S) sont un aspect fondamental de la programmation qui permet aux programmes d'interagir avec leur environnement. Les entrées/sorties peuvent prendre plusieurs formes, notamment la lecture et l'écriture de fichiers, les flux d'entrées/sorties et les sérialisations. Dans cet article, nous examinerons chacune de ces formes d'E/S en détail, en illustrant leur utilisation avec des exemples simples en Java.&lt;/p&gt;

&lt;h3&gt;
  
  
  La lecture et l'écriture de fichiers
&lt;/h3&gt;

&lt;p&gt;La lecture et l'écriture de fichiers sont des formes courantes d'E/S en programmation. La &lt;strong&gt;lecture&lt;/strong&gt; de fichiers permet aux programmes de &lt;strong&gt;récupérer des données à partir de fichiers&lt;/strong&gt;, tandis que l'&lt;strong&gt;écriture&lt;/strong&gt; de fichiers permet aux programmes de &lt;strong&gt;stocker des données dans des fichiers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En Java, la lecture et l'écriture de fichiers sont gérées à l'aide de la classe File. La &lt;strong&gt;classe File&lt;/strong&gt; permet de créer, lire, écrire et supprimer des fichiers. Voici un exemple simple de création d'un fichier en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"monfichier.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createNewFile&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous créons un nouveau fichier appelé "&lt;strong&gt;monfichier.txt&lt;/strong&gt;" en utilisant la méthode &lt;strong&gt;createNewFile()&lt;/strong&gt; de la classe &lt;strong&gt;File&lt;/strong&gt;. Cette méthode crée un nouveau fichier vide dans le répertoire actuel.&lt;/p&gt;

&lt;p&gt;Pour lire le contenu d'un fichier, nous pouvons utiliser la &lt;strong&gt;classe Scanner&lt;/strong&gt; de Java. Voici un exemple de lecture d'un fichier en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"monfichier.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;Scanner&lt;/span&gt; &lt;span class="n"&gt;scanner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Scanner&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hasNextLine&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextLine&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous créons un nouvel objet &lt;strong&gt;Scanner&lt;/strong&gt; en utilisant le fichier "&lt;strong&gt;monfichier.txt&lt;/strong&gt;" que nous avons créé précédemment. Nous utilisons ensuite une boucle &lt;strong&gt;while&lt;/strong&gt; pour &lt;strong&gt;lire chaque ligne&lt;/strong&gt; du fichier à l'aide de la méthode &lt;strong&gt;nextLine()&lt;/strong&gt; de la classe Scanner. Enfin, nous fermons l'objet Scanner en utilisant la méthode &lt;strong&gt;close()&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Pour &lt;strong&gt;écrire dans un fichier&lt;/strong&gt;, nous pouvons utiliser la classe &lt;strong&gt;FileWriter&lt;/strong&gt;. Voici un exemple d'écriture dans un fichier en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"monfichier.txt"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;FileWriter&lt;/span&gt; &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileWriter&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Ceci est une ligne de texte"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous créons un nouvel objet &lt;strong&gt;FileWriter&lt;/strong&gt; en utilisant le fichier "&lt;strong&gt;monfichier.txt&lt;/strong&gt;" que nous avons créé précédemment. Nous utilisons ensuite la méthode &lt;strong&gt;write()&lt;/strong&gt; de la classe &lt;strong&gt;FileWriter&lt;/strong&gt; pour écrire une ligne de texte dans le fichier. Enfin, nous fermons l'objet FileWriter en utilisant la méthode &lt;strong&gt;close()_&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;NB&lt;/strong&gt;: Il est important de &lt;strong&gt;fermer les objets d'E/S&lt;/strong&gt; pour &lt;strong&gt;libérer les ressources&lt;/strong&gt;, &lt;strong&gt;finaliser les opérations&lt;/strong&gt; et &lt;strong&gt;éviter les fuites de mémoire&lt;/strong&gt;. Il est donc recommandé de toujours fermer correctement les objets d'E/S après leur utilisation, en utilisant la méthode &lt;strong&gt;close()&lt;/strong&gt;.&lt;/em&gt;_&lt;/p&gt;

&lt;h3&gt;
  
  
  Les flux d'entrées/sorties
&lt;/h3&gt;

&lt;p&gt;Les flux d'entrées/sorties sont un autre aspect important des E/S en programmation. Les &lt;strong&gt;flux d'entrées/sorties&lt;/strong&gt; permettent aux programmes de &lt;strong&gt;lire et d'écrire des données en temps réel, sans avoir à stocker les données dans des fichiers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En Java, les flux d'entrées/sorties sont gérés à l'aide des classes &lt;strong&gt;InputStream&lt;/strong&gt; et &lt;strong&gt;OutputStream&lt;/strong&gt;. Voici un exemple simple d'utilisation de ces classes en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;InputStream&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;OutputStream&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous créons un objet &lt;strong&gt;InputStream&lt;/strong&gt; appelé &lt;strong&gt;input&lt;/strong&gt; en utilisant la méthode &lt;strong&gt;System.in&lt;/strong&gt;, qui permet de &lt;strong&gt;lire les données d'entrée&lt;/strong&gt; standard de l'utilisateur (généralement le &lt;strong&gt;clavier&lt;/strong&gt;). Nous créons également un objet &lt;strong&gt;OutputStream&lt;/strong&gt; appelé &lt;strong&gt;output&lt;/strong&gt; en utilisant la méthode &lt;strong&gt;System.out&lt;/strong&gt;, qui permet d'&lt;strong&gt;écrire les données de sortie&lt;/strong&gt; standard (généralement l'écran).&lt;/p&gt;

&lt;p&gt;Nous pouvons utiliser ces objets pour &lt;strong&gt;lire et écrire des données en temps réel&lt;/strong&gt;. Par exemple, voici un exemple de programme Java qui demande à l'utilisateur de saisir son nom et qui affiche un message de bienvenue :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;InputStream&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;OutputStream&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;Scanner&lt;/span&gt; &lt;span class="n"&gt;scanner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Scanner&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Entrez votre nom : "&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextLine&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="s"&gt;"Bienvenue, "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"!"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;

&lt;span class="n"&gt;scanner&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous utilisons un objet &lt;strong&gt;Scanner&lt;/strong&gt; pour &lt;strong&gt;lire&lt;/strong&gt; l'entrée de l'utilisateur à l'aide de la méthode &lt;strong&gt;nextLine()&lt;/strong&gt;. Nous utilisons également la méthode &lt;strong&gt;getBytes()&lt;/strong&gt; de la classe &lt;strong&gt;String&lt;/strong&gt; pour convertir notre chaîne de caractères en &lt;strong&gt;tableau de bytes&lt;/strong&gt; avant de l'écrire dans le flux de sortie à l'aide de la méthode &lt;strong&gt;write()&lt;/strong&gt; de la classe &lt;strong&gt;OutputStream&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Les sérialisations
&lt;/h3&gt;

&lt;p&gt;Les &lt;strong&gt;sérialisations&lt;/strong&gt; sont une autre forme d'E/S en programmation qui permet de &lt;strong&gt;convertir des objets Java en une représentation binaire&lt;/strong&gt;, qui peut être &lt;strong&gt;stockée&lt;/strong&gt; ou &lt;strong&gt;transmise&lt;/strong&gt; via un réseau, et de les reconvertir en objets Java.&lt;/p&gt;

&lt;p&gt;En Java, la sérialisation est gérée à l'aide de l'interface &lt;strong&gt;Serializable&lt;/strong&gt;. Pour qu'un objet Java soit sérialisable, il doit implémenter cette interface. Voici un exemple simple de sérialisation d'un objet en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Personne&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Serializable&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;Personne&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getNom&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;getAge&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé une classe &lt;strong&gt;Personne&lt;/strong&gt; qui implémente &lt;strong&gt;l'interface Serializable&lt;/strong&gt;. Cette classe a deux propriétés : nom et age, ainsi que deux méthodes d'accès pour ces propriétés.&lt;/p&gt;

&lt;p&gt;Pour sérialiser un objet &lt;strong&gt;Personne&lt;/strong&gt;, nous pouvons utiliser la classe &lt;strong&gt;ObjectOutputStream&lt;/strong&gt;. Voici un exemple simple :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Personne&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Personne&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Alice"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"personne.ser"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;FileOutputStream&lt;/span&gt; &lt;span class="n"&gt;fos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileOutputStream&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;ObjectOutputStream&lt;/span&gt; &lt;span class="n"&gt;oos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ObjectOutputStream&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fos&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;oos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeObject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;oos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé un objet &lt;strong&gt;Personne&lt;/strong&gt; appelé &lt;strong&gt;p&lt;/strong&gt;. Nous avons ensuite créé un &lt;strong&gt;fichier&lt;/strong&gt; appelé "&lt;strong&gt;personne.ser&lt;/strong&gt;" et ouvert un flux de sortie vers ce fichier à l'aide de la classe &lt;strong&gt;FileOutputStream&lt;/strong&gt;. Nous avons ensuite créé un objet &lt;strong&gt;ObjectOutputStream&lt;/strong&gt; en utilisant ce flux de sortie.&lt;/p&gt;

&lt;p&gt;Enfin, nous avons utilisé la méthode &lt;strong&gt;writeObject()&lt;/strong&gt; de la classe &lt;strong&gt;ObjectOutputStream&lt;/strong&gt; pour sérialiser l'objet &lt;strong&gt;p&lt;/strong&gt; dans le fichier. Nous avons ensuite &lt;strong&gt;fermé&lt;/strong&gt; l'objet &lt;strong&gt;ObjectOutputStream&lt;/strong&gt; en utilisant la méthode &lt;strong&gt;close()&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Pour &lt;strong&gt;désérialiser&lt;/strong&gt; un objet &lt;strong&gt;Personne&lt;/strong&gt;, nous pouvons utiliser la classe &lt;strong&gt;ObjectInputStream&lt;/strong&gt;. Voici un exemple simple :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"personne.ser"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;FileInputStream&lt;/span&gt; &lt;span class="n"&gt;fis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileInputStream&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;ObjectInputStream&lt;/span&gt; &lt;span class="n"&gt;ois&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ObjectInputStream&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fis&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="nc"&gt;Personne&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Personne&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ois&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readObject&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;ois&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé un objet &lt;strong&gt;File&lt;/strong&gt; pour le fichier "&lt;strong&gt;personne.ser&lt;/strong&gt;" que nous avons précédemment créé. Nous avons ensuite ouvert un &lt;strong&gt;flux d'entrée&lt;/strong&gt; vers ce fichier à l'aide de la classe &lt;strong&gt;FileInputStream&lt;/strong&gt;, puis créé un objet &lt;strong&gt;ObjectInputStream&lt;/strong&gt; en utilisant ce flux d'entrée.&lt;/p&gt;

&lt;p&gt;Enfin, nous avons utilisé la méthode &lt;strong&gt;readObject()&lt;/strong&gt; de la classe &lt;strong&gt;ObjectInputStream&lt;/strong&gt; pour désérialiser l'objet &lt;strong&gt;Personne&lt;/strong&gt; contenu dans le fichier. Nous avons ensuite fermé l'objet &lt;strong&gt;ObjectInputStream&lt;/strong&gt; en utilisant la méthode &lt;strong&gt;close()&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;En résumé, les &lt;strong&gt;entrées/sorties&lt;/strong&gt; en Java sont essentielles pour la &lt;strong&gt;manipulation de fichiers&lt;/strong&gt; et la &lt;strong&gt;communication&lt;/strong&gt; avec l'utilisateur. Les flux d'entrées/sorties permettent de &lt;strong&gt;lire&lt;/strong&gt; et d'&lt;strong&gt;écrire&lt;/strong&gt; des données en temps réel, tandis que les sérialisations permettent de convertir des objets Java en une représentation binaire pour le stockage ou la transmission. En maîtrisant ces concepts, les développeurs Java peuvent écrire des programmes plus robustes et plus interactifs.&lt;/p&gt;

</description>
      <category>java</category>
      <category>file</category>
      <category>input</category>
      <category>output</category>
    </item>
    <item>
      <title>Collections en Java : Implémentations et cas d'utilisation (List, Set et Map)</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Sun, 19 Mar 2023 19:36:49 +0000</pubDate>
      <link>https://forem.com/bassaoudev/les-collections-en-java-list-set-et-map-simplement-1d75</link>
      <guid>https://forem.com/bassaoudev/les-collections-en-java-list-set-et-map-simplement-1d75</guid>
      <description>&lt;p&gt;Java est un langage de programmation largement utilisé pour créer des applications de toutes sortes. L'une des fonctionnalités clés de Java est la prise en charge des collections, qui permettent aux développeurs de stocker, de manipuler et d'accéder facilement à des groupes d'objets. Les collections Java peuvent être utilisées pour stocker différents types de données, telles que des entiers, des chaînes de caractères, des objets, etc.&lt;/p&gt;

&lt;p&gt;Dans cet article, nous allons examiner en détail trois types de collections Java : List, Set et Map.&lt;/p&gt;

&lt;h3&gt;
  
  
  List
&lt;/h3&gt;

&lt;p&gt;Une liste est une collection ordonnée qui permet des doublons. Les éléments d'une liste sont stockés dans un ordre spécifique et peuvent être accédés par leur index. Les listes sont utiles pour stocker des données qui doivent être manipulées dans un ordre précis.&lt;/p&gt;

&lt;p&gt;Voici un exemple de création et de manipulation d'une liste en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;myList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Ajouter des éléments à la liste&lt;/span&gt;
&lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"élément 1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"élément 2"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"élément 3"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Accéder à un élément de la liste&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Parcourir tous les éléments de la liste&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Supprimer un élément de la liste&lt;/span&gt;
&lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Taille de la liste&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé une liste vide et ajouté trois éléments à la liste. Nous avons accédé au premier élément de la liste en utilisant la méthode get() et avons parcouru tous les éléments de la liste à l'aide d'une boucle for. Nous avons également supprimé un élément de la liste à l'aide de la méthode remove() et avons obtenu la taille de la liste à l'aide de la méthode size().&lt;/p&gt;

&lt;h3&gt;
  
  
  Set
&lt;/h3&gt;

&lt;p&gt;Un ensemble est une collection non ordonnée qui ne permet pas les doublons. Les éléments d'un ensemble ne sont pas stockés dans un ordre spécifique et ne peuvent être accédés par leur index. Les ensembles sont utiles pour stocker des données uniques qui n'ont pas besoin d'être ordonnées.&lt;/p&gt;

&lt;p&gt;Voici un exemple de création et de manipulation d'un ensemble en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;mySet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashSet&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Ajouter des éléments à l'ensemble&lt;/span&gt;
&lt;span class="n"&gt;mySet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"élément 1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mySet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"élément 2"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mySet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"élément 3"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Vérifier si l'ensemble contient un élément&lt;/span&gt;
&lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;contains&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mySet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"élément 1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Parcourir tous les éléments de l'ensemble&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mySet&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Supprimer un élément de l'ensemble&lt;/span&gt;
&lt;span class="n"&gt;mySet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"élément 2"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Taille de l'ensemble&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mySet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé un ensemble vide et ajouté trois éléments à l'ensemble. Nous avons vérifié si l'ensemble contenait un élément spécifique en utilisant la méthode contains() et avons parcouru tous les éléments de l'ensemble à l'aide d'une boucle for. Nous avons également supprimé un élément de l'ensemble à l'aide de la méthode remove() et avons obtenu la taille de l'ensemble à l'aide de la méthode size().&lt;/p&gt;

&lt;h3&gt;
  
  
  Map
&lt;/h3&gt;

&lt;p&gt;Map est une collection qui stocke des éléments sous forme de paires clé-valeur. Ses élements ne sont pas stockés dans un ordre spécifique et peuvent être accédés par leur clé. Map est utile pour stocker des données qui doivent être récupérées rapidement en utilisant une clé.&lt;/p&gt;

&lt;p&gt;Voici un exemple de création et de manipulation d'une collection Map en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;myMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Ajouter des éléments à la Map&lt;/span&gt;
&lt;span class="n"&gt;myMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"élément 1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;myMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"élément 2"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;myMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"élément 3"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Accéder à un élément de la Map en utilisant sa clé&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Vérifier si la Map contient une clé spécifique&lt;/span&gt;
&lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;containsKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;containsKey&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Vérifier si la Map contient une valeur spécifique&lt;/span&gt;
&lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;containsValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;containsValue&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"élément 3"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Parcourir toutes les paires clé-valeur de la Map&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;myMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;entrySet&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getKey&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" : "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValue&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Supprimer une paire clé-valeur de la Map&lt;/span&gt;
&lt;span class="n"&gt;myMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Taille de la Map&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé une Map vide et ajouté trois paires clé-valeur à l'intérieur. Nous avons accédé à la valeur associée à une clé spécifique en utilisant la méthode get() et avons vérifié si la Map contenait une clé ou une valeur spécifique à l'aide des méthodes containsKey() et containsValue(). Nous avons également parcouru toutes les paires clé-valeur de la Map à l'aide d'une boucle for et avons supprimé une paire clé-valeur de la Map à l'aide de la méthode remove(). Enfin, nous avons obtenu la taille de la Map à l'aide de la méthode size().&lt;/p&gt;

&lt;h4&gt;
  
  
  Implémentations utiles
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Les implémentations les plus populaires de List en Java sont ArrayList, LinkedList et Vector. ArrayList est plus général et permet un accès aléatoire par index, tandis que LinkedList est plus adapté pour ajouter et supprimer fréquemment des éléments dans List. Vector est une version synchronisée d'ArrayList. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Les implémentations les plus populaires de Set sont HashSet, LinkedHashSet et TreeSet. La première est un Set général qui est basé sur HashMap. Elle permet des opérations de base (ajout, suppression, recherche) en temps constant, mais ne garantit pas l'ordre des éléments. LinkedHashSet est similaire à HashSet, mais maintient l'ordre d'insertion des éléments. TreeSet, quant à lui, maintient les éléments triés selon un ordre naturel ou un comparateur fourni.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pour Map, les implémentations les plus courantes en Java sont HashMap, LinkedHashMap et TreeMap. HashMap est le plus utilisé car il offre une complexité en temps constant pour les opérations de base. LinkedHashMap est similaire à HashMap, mais maintient l'ordre d'insertion des éléments. TreeMap est utilisé lorsque vous avez besoin d'un ordre spécifique des éléments en fonction d'une clé.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Il existe également d'autres implémentations de List, Set et Map dans Java, mais les implémentations mentionnées ci-dessus sont les plus courantes et les plus utilisées.&lt;/p&gt;

&lt;h3&gt;
  
  
  Les cas d'utilisation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Stockage et manipulation de données en mémoire : les collections en Java peuvent être utilisées pour stocker temporairement des données en mémoire, comme une liste de contacts dans une application de carnet d'adresses ou une liste de produits dans une application de commerce électronique.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tri et recherche de données : les classes de collection en Java fournissent des méthodes pour trier et rechercher des données en fonction de critères spécifiques, comme le tri d'une liste de noms par ordre alphabétique ou la recherche d'un élément spécifique dans une liste.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mise en correspondance des clés et des valeurs : les collections en Java comme Map peuvent être utilisées pour stocker des paires clé-valeur, telles que les données utilisateur dans une application de connexion.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En conclusion, List, Set et Map sont trois types de collections en Java avec des utilisations différentes. List est utile pour stocker des données qui doivent être manipulées dans un ordre précis, Set est utile pour stocker des données uniques qui n'ont pas besoin d'être ordonnées, et Map est utile pour stocker des données qui doivent être récupérées rapidement en utilisant une clé. Chacun de ces types de collections possède des méthodes communes, telles que add(), remove(), size(), etc. qui permettent de manipuler les éléments de la collection.&lt;/p&gt;

</description>
      <category>java</category>
      <category>collections</category>
      <category>list</category>
      <category>set</category>
    </item>
    <item>
      <title>L'essentiel des collections en Java (List, Set, Map, Queue)</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Sat, 18 Mar 2023 23:07:44 +0000</pubDate>
      <link>https://forem.com/bassaoudev/lessentiel-des-collections-en-java-2le6</link>
      <guid>https://forem.com/bassaoudev/lessentiel-des-collections-en-java-2le6</guid>
      <description>&lt;p&gt;&lt;strong&gt;Java Collections Framework (JCF)&lt;/strong&gt; est un ensemble de classes et d'interfaces en Java qui permettent de stocker, manipuler et organiser des groupes d'objets. C'est l'un des frameworks les plus populaires en Java, utilisé dans de nombreuses applications et bibliothèques. Le JCF fournit des interfaces communes pour les collections, ce qui permet aux développeurs de travailler avec différents types de collections de manière uniforme.&lt;/p&gt;

&lt;h3&gt;
  
  
  Les interfaces des collections
&lt;/h3&gt;

&lt;p&gt;Les interfaces de collection définissent les méthodes que toutes les classes de collection doivent implémenter. Il existe plusieurs interfaces de collection dans le JCF, chacune avec ses propres méthodes et caractéristiques. &lt;/p&gt;

&lt;p&gt;Les interfaces de collection les plus couramment utilisées sont:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;List&lt;/strong&gt; : représente une collection &lt;strong&gt;ordonnée&lt;/strong&gt; de données. Les éléments peuvent être &lt;strong&gt;dupliqués&lt;/strong&gt; et sont stockés dans l'ordre d'insertion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set&lt;/strong&gt; : représente une collection &lt;strong&gt;non ordonnée&lt;/strong&gt; de données. Les éléments &lt;strong&gt;ne peuvent pas être dupliqués&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Map&lt;/strong&gt; : représente une collection de &lt;strong&gt;paires clé/valeur&lt;/strong&gt;. Les &lt;strong&gt;clés&lt;/strong&gt; sont &lt;strong&gt;uniques&lt;/strong&gt; et les &lt;strong&gt;valeurs&lt;/strong&gt; peuvent être &lt;strong&gt;dupliquées&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Queue&lt;/strong&gt; : représente une &lt;strong&gt;file d'attente&lt;/strong&gt; de données. Les éléments sont &lt;strong&gt;ajoutés à la fin&lt;/strong&gt; de la file et &lt;strong&gt;retirés du début&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Les collections de type List : les listes
&lt;/h3&gt;

&lt;p&gt;Les listes sont des collections ordonnées qui peuvent contenir des éléments en double. Les éléments sont stockés dans l'ordre d'insertion. Les listes sont implémentées par les classes &lt;strong&gt;ArrayList&lt;/strong&gt;, &lt;strong&gt;LinkedList&lt;/strong&gt; et &lt;strong&gt;Vector&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Les méthodes couramment utilisées avec les listes sont :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;add(element)&lt;/strong&gt; : ajoute un élément à la fin de la liste.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;remove(element)&lt;/strong&gt; : supprime la première occurrence d'un élément de la liste.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;get(index)&lt;/strong&gt; : renvoie l'élément à l'index spécifié dans la liste.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemple d'utilisation de la classe ArrayList:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.ArrayList&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.List&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ArrayListExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;fruits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Pomme"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Banane"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Orange"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: [Pomme, Banane, Orange]&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 

      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Banane"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Affiche: [Pomme, Orange]&lt;/span&gt;

      &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;fruit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: Orange&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fruit&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Les collections de type Set : les ensembles
&lt;/h3&gt;

&lt;p&gt;Les ensembles sont des collections non ordonnées qui ne peuvent pas contenir des éléments en double. Les ensembles sont implémentés par les classes &lt;strong&gt;HashSet&lt;/strong&gt; et &lt;strong&gt;TreeSet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Les méthodes couramment utilisées avec les ensembles sont :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;add(element)&lt;/strong&gt; : ajoute un élément à l'ensemble.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;remove(element)&lt;/strong&gt; : supprime un élément de l'ensemble.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;contains(element)&lt;/strong&gt; : renvoie true si l'ensemble contient l'élément spécifié.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemple d'utilisation de la classe &lt;strong&gt;HashSet&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.HashSet&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Set&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HashSetExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;fruits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashSet&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Pomme"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Banane"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Orange"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="c1"&gt;// L'élément en double est ignoré&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Pomme"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 

      &lt;span class="c1"&gt;// Affiche: [Banane, Orange, Pomme]&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Banane"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: [Orange, Pomme]&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 

      &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;containsApple&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Pomme"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="c1"&gt;// Affiche: true&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;containsApple&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Les collections de type Map : les associations de type clé/valeur
&lt;/h3&gt;

&lt;p&gt;Les maps sont des collections de paires clé/valeur. Les &lt;strong&gt;clés&lt;/strong&gt; sont &lt;strong&gt;uniques&lt;/strong&gt; et les &lt;strong&gt;valeurs&lt;/strong&gt; peuvent être &lt;strong&gt;dupliquées&lt;/strong&gt;. Les maps sont implémentées par les classes &lt;strong&gt;HashMap&lt;/strong&gt; et &lt;strong&gt;TreeMap&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Les méthodes couramment utilisées avec les maps sont :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;put(key, value)&lt;/strong&gt; : ajoute une paire clé/valeur à la map.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;remove(key)&lt;/strong&gt; : supprime la paire avec la clé spécifiée.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;get(key)&lt;/strong&gt; : renvoie la valeur associée à la clé spécifiée.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemple d'utilisation de la classe HashMap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.HashMap&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Map&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HashMapExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;fruits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Pomme"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Banane"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Orange"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: {Pomme=1, Banane=2, Orange=3}&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 

      &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Banane"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: {Pomme=1, Orange=3}&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 

      &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numberOfApples&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Pomme"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: 1&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numberOfApples&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Les collections de type Queue : les files
&lt;/h3&gt;

&lt;p&gt;Les files sont des collections où les éléments sont ajoutés à la fin et retirés du début. Les files sont implémentées par les classes &lt;strong&gt;LinkedList&lt;/strong&gt; et &lt;strong&gt;PriorityQueue&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Les méthodes couramment utilisées avec les files sont :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;offer(element)&lt;/strong&gt; : ajoute un élément à la fin de la file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;poll()&lt;/strong&gt; : renvoie et supprime l'élément au début de la file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;peek()&lt;/strong&gt; : renvoie l'élément au début de la file sans le supprimer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemple d'utilisation de la classe &lt;strong&gt;LinkedList&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.LinkedList&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Queue&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LinkedListExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;Queue&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LinkedList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
      &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;offer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Alice"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;offer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bob"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;offer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Charlie"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: [Alice, Bob, Charlie]&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 

      &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;poll&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: Alice&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: [Bob, Charlie]&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 

      &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;nextName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;peek&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

      &lt;span class="c1"&gt;// Affiche: Bob&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nextName&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Comparatif des collections
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Structure de données&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Gestion d'objets dupliqués&lt;/th&gt;
&lt;th&gt;Ordre&lt;/th&gt;
&lt;th&gt;Possibilité de stocker des éléments null&lt;/th&gt;
&lt;th&gt;Accès aux éléments&lt;/th&gt;
&lt;th&gt;Exemples d'utilisation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Map&lt;/td&gt;
&lt;td&gt;Une collection paires clé-valeur (chaque clé est unique)&lt;/td&gt;
&lt;td&gt;Clés uniques, mais valeurs duplicables&lt;/td&gt;
&lt;td&gt;Non ordonnée&lt;/td&gt;
&lt;td&gt;Les clés et les valeurs peuvent être null&lt;/td&gt;
&lt;td&gt;Clé, itérateur&lt;/td&gt;
&lt;td&gt;Stockage de données d'utilisateur, traduction de mots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set&lt;/td&gt;
&lt;td&gt;Une collection d'éléments uniques, sans ordre spécifique&lt;/td&gt;
&lt;td&gt;Element unique&lt;/td&gt;
&lt;td&gt;Non ordonnée&lt;/td&gt;
&lt;td&gt;Les éléments peuvent être null&lt;/td&gt;
&lt;td&gt;Elément ,itérateur&lt;/td&gt;
&lt;td&gt;Gestion d'abonnements, filtrage d'éléments uniques&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;List&lt;/td&gt;
&lt;td&gt;Une collection ordonnée d'éléments&lt;/td&gt;
&lt;td&gt;Eléments duplicables&lt;/td&gt;
&lt;td&gt;Ordonnée en fonction de l'ajout&lt;/td&gt;
&lt;td&gt;Les éléments peuvent être null&lt;/td&gt;
&lt;td&gt;Index, itérateur&lt;/td&gt;
&lt;td&gt;Stockage de données d'historique, de tâches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queue&lt;/td&gt;
&lt;td&gt;Une collection ordonnée: accès aux éléments se fait dans l'ordre où ils ont été ajoutés&lt;/td&gt;
&lt;td&gt;Eléments duplicables&lt;/td&gt;
&lt;td&gt;Ordonné en fonction de l'ajout&lt;/td&gt;
&lt;td&gt;Les éléments peuvent être null&lt;/td&gt;
&lt;td&gt;Opérations enqueue et dequeue, itérateur&lt;/td&gt;
&lt;td&gt;Gestion de files d'attente, traitement de commandes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Les collections en Java sont une partie essentielle du JCF. Les collections fournissent une manière flexible et efficace de stocker et de manipuler des données. En utilisant les interfaces de collection et les implémentations de collection appropriées, les développeurs peuvent écrire des programmes plus robustes et plus flexibles. Les collections sont également utilisées pour résoudre de nombreux problèmes de programmation courants et sont essentielles à la compréhension de la programmation orientée objet en Java.&lt;/p&gt;

&lt;p&gt;Aller plus loin: &lt;a href="https://www.jmdoudoux.fr/java/dej/chap-collections.htm#collections-7" rel="noopener noreferrer"&gt;https://www.jmdoudoux.fr/java/dej/chap-collections.htm#collections-7&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>list</category>
      <category>map</category>
      <category>set</category>
    </item>
    <item>
      <title>Introduction aux exceptions en Java</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Sat, 18 Mar 2023 21:44:07 +0000</pubDate>
      <link>https://forem.com/bassaoudev/introduction-aux-exceptions-en-java-32g0</link>
      <guid>https://forem.com/bassaoudev/introduction-aux-exceptions-en-java-32g0</guid>
      <description>&lt;p&gt;Les exceptions sont l'un des concepts les plus importants en Java, car elles permettent de gérer les erreurs et les comportements inattendus dans les programmes Java. Dans cet article, nous allons discuter de ce que sont les exceptions en Java, comment les gérer, et nous allons illustrer tout cela par des exemples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qu'est-ce qu'une exception en Java ?
&lt;/h2&gt;

&lt;p&gt;En Java, une exception est un &lt;strong&gt;événement&lt;/strong&gt; qui se produit lorsqu'un programme rencontre une &lt;strong&gt;erreur&lt;/strong&gt; ou un &lt;strong&gt;comportement inattendu&lt;/strong&gt; qui l'empêche de continuer normalement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Les types d'exceptions en Java
&lt;/h2&gt;

&lt;p&gt;En Java, il existe deux types d'exceptions : les exceptions vérifiées (checked exceptions) et les exceptions non vérifiées (unchecked exceptions).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Les &lt;strong&gt;exceptions vérifiées&lt;/strong&gt; sont des exceptions qui doivent être gérées dans le code du programme. Elles sont appelées vérifiées car le compilateur Java vérifie si elles sont correctement gérées dans le code du programme. Si une exception vérifiée n'est pas gérée correctement, le programme ne sera pas compilé.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Les &lt;strong&gt;exceptions non vérifiées&lt;/strong&gt; sont des exceptions qui ne sont pas vérifiées par le compilateur Java. Elles sont appelées non vérifiées car le compilateur ne vérifie pas si elles sont correctement gérées dans le code du programme. Les exceptions non vérifiées sont généralement des erreurs de programmation, telles que les erreurs de division par zéro ou les erreurs de pointeur nul.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comment gérer les exceptions en Java
&lt;/h2&gt;

&lt;p&gt;En Java, les exceptions sont gérées à l'aide de blocs &lt;strong&gt;try-catch&lt;/strong&gt;. Le bloc try contient le code qui peut générer une exception. Si une exception est générée dans le bloc try, l'execution du  code qui s'y trouve s'interrompt, et le programme passera directement au bloc catch.&lt;/p&gt;

&lt;p&gt;Le bloc &lt;strong&gt;catch&lt;/strong&gt; contient le code qui &lt;strong&gt;gère l'exception&lt;/strong&gt;. Il doit avoir le même type d'exception que celle qui est générée dans le bloc try. Si l'exception générée dans le bloc try n'est pas attrapée par un bloc catch correspondant, elle sera propagée vers le bloc catch suivant dans la pile d'appels, ou elle sera propagée jusqu'à ce qu'elle atteigne le bloc catch par défaut.&lt;/p&gt;

&lt;p&gt;Le bloc &lt;strong&gt;finally&lt;/strong&gt; est &lt;strong&gt;optionnel&lt;/strong&gt;, il contient le code qui doit être &lt;strong&gt;exécuté&lt;/strong&gt; qu'il y ait une &lt;strong&gt;exception ou non&lt;/strong&gt;. Le code placé dans le bloc finally sera exécuté après le bloc try et le bloc catch, quel que soit le résultat.&lt;/p&gt;

&lt;p&gt;Voici un exemple simple pour comprendre la syntaxe des blocs try-catch-finally en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;// code qui peut générer une exception&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TypeException&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;// code qui gère l'exception&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;// code qui est toujours exécuté, qu'il y ait une exception ou non&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Exemples d'exceptions en Java
&lt;/h2&gt;

&lt;p&gt;Voici quelques exemples d'exceptions en Java :&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Exception de division par zéro (ArithmeticException)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ArithmeticException&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Erreur : Division par zéro !"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, le code dans le bloc &lt;strong&gt;try&lt;/strong&gt; tente de diviser le nombre entier 1 par 0, ce qui générera une exception de division par zéro (&lt;strong&gt;ArithmeticException&lt;/strong&gt;). Le bloc &lt;strong&gt;catch&lt;/strong&gt; attrape cette exception et affiche un message d'erreur approprié.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Exception de pointeur nul (NullPointerException)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;NullPointerException&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Erreur : Pointeur nul !"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, le code dans le bloc &lt;strong&gt;try&lt;/strong&gt; tente d'appeler la méthode &lt;strong&gt;length()&lt;/strong&gt; sur une chaîne de caractères nulle, ce qui générera une exception de pointeur nul (&lt;strong&gt;NullPointerException&lt;/strong&gt;). Le bloc &lt;strong&gt;catch&lt;/strong&gt; attrape cette exception et affiche un &lt;strong&gt;message d'erreur&lt;/strong&gt; approprié.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Exception personnalisée
&lt;/h3&gt;

&lt;p&gt;Il est également possible de créer des exceptions personnalisées en Java en créant une classe qui étend la classe &lt;strong&gt;Exception&lt;/strong&gt; ou &lt;strong&gt;RuntimeException&lt;/strong&gt;. Voici un exemple de création d'une exception personnalisée :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MonException&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;MonException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;super&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;MonException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Une erreur personnalisée s'est produite !"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MonException&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMessage&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé une exception personnalisée appelée &lt;strong&gt;MonException&lt;/strong&gt; en étendant la classe &lt;strong&gt;Exception&lt;/strong&gt;. Nous avons ensuite créé une &lt;strong&gt;instance&lt;/strong&gt; de cette exception en utilisant le mot-clé &lt;strong&gt;throw&lt;/strong&gt;, puis nous avons attrapé cette exception dans le bloc catch et affiché le message d'erreur approprié.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;En comprenant les types d'exceptions en Java,vous pourrez mieux gérer les erreurs et les comportements inattendus dans vos programmes Java.&lt;/p&gt;

&lt;p&gt;Pour aller plus loin: &lt;a href="https://www.jmdoudoux.fr/java/dej/chap-exceptions.htm" rel="noopener noreferrer"&gt;https://www.jmdoudoux.fr/java/dej/chap-exceptions.htm&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>exceptions</category>
      <category>trycatch</category>
    </item>
    <item>
      <title>Les différences clés entre String, StringBuilder et StringBuffer en Java</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Sat, 18 Mar 2023 20:29:47 +0000</pubDate>
      <link>https://forem.com/bassaoudev/les-differences-cles-entre-string-stringbuilder-et-stringbuffer-en-java-674</link>
      <guid>https://forem.com/bassaoudev/les-differences-cles-entre-string-stringbuilder-et-stringbuffer-en-java-674</guid>
      <description>&lt;p&gt;En programmation, les chaînes de caractères sont un type de données très courant. En Java, il existe trois classes principales pour travailler avec des chaînes de caractères : String, StringBuilder et StringBuffer. Dans cet article, nous allons examiner les caractéristiques de chaque classe, leurs différences, comment et quand les utiliser.&lt;/p&gt;

&lt;h3&gt;
  
  
  String
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;String&lt;/strong&gt; est une classe intégrée dans Java pour représenter des chaînes de caractères &lt;strong&gt;immuables&lt;/strong&gt;. Cela signifie que, une fois une chaîne de caractères créée, elle ne peut pas être modifiée. Toutes les méthodes de la classe String renvoient une nouvelle chaîne de caractères au lieu de modifier l'objet existant. Voici quelques exemples d'utilisation de la classe String :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;s1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;s2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"World"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// concaténation de deux chaînes de caractères&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;s3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;s2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// affiche "Hello World"&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé deux chaînes de caractères, "Hello" et "World", puis nous les avons concaténées avec un espace entre elles à l'aide de l'opérateur +. Le résultat a été stocké dans la variable s3, qui est également une chaîne de caractères.&lt;/p&gt;

&lt;h3&gt;
  
  
  StringBuilder
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;StringBuilder&lt;/strong&gt; est une classe &lt;strong&gt;mutable&lt;/strong&gt; qui peut être utilisée pour créer et manipuler des chaînes de caractères. Contrairement à la classe String, les objets StringBuilder peuvent être &lt;strong&gt;modifiés sans créer de nouveaux objets&lt;/strong&gt;. Cela les rend plus &lt;strong&gt;efficaces&lt;/strong&gt; lorsqu'il s'agit de &lt;strong&gt;concaténer&lt;/strong&gt; de grandes chaînes de caractères ou de manipuler des chaînes de manière itérative. &lt;br&gt;
Voici un exemple d'utilisation de la classe StringBuilder :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;StringBuilder&lt;/span&gt; &lt;span class="n"&gt;sb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StringBuilder&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;sb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;sb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;sb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"World"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// affiche "Hello World"&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé un nouvel objet &lt;strong&gt;StringBuilder&lt;/strong&gt; en utilisant son constructeur par défaut, puis nous avons utilisé sa méthode &lt;strong&gt;append()&lt;/strong&gt; pour ajouter les chaînes "&lt;strong&gt;Hello&lt;/strong&gt;" et "&lt;strong&gt;World&lt;/strong&gt;" à l'objet. Enfin, nous avons utilisé la méthode &lt;strong&gt;toString()&lt;/strong&gt; pour convertir l'objet StringBuilder en une chaîne de caractères.&lt;/p&gt;

&lt;h3&gt;
  
  
  StringBuffer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;StringBuffer&lt;/strong&gt; est similaire à StringBuilder, mais il est &lt;strong&gt;thread-safe&lt;/strong&gt;, ce qui signifie qu'il peut être utilisé de manière sûre dans des environnements &lt;strong&gt;multi-thread&lt;/strong&gt;. Cependant, en raison de sa &lt;strong&gt;synchronisation&lt;/strong&gt; (processus de coordination des différents threads d'exécution d'un programme), il est légèrement moins performant que StringBuilder dans les applications mono-thread. Voici un exemple d'utilisation de la classe StringBuffer :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;StringBuffer&lt;/span&gt; &lt;span class="n"&gt;sb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StringBuffer&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;sb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;sb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;sb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"World"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// affiche "Hello World"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons utilisé la même approche que pour StringBuilder pour créer et manipuler une chaîne de caractères. La seule différence est que nous avons utilisé la classe StringBuffer au lieu de StringBuilder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Différences entre String, StringBuilder et StringBuffer
&lt;/h3&gt;

&lt;p&gt;La principale &lt;strong&gt;différence&lt;/strong&gt; entre String et les classes StringBuilder/ StringBuffer est la &lt;strong&gt;mutabilité&lt;/strong&gt;. La classe &lt;strong&gt;String&lt;/strong&gt; est &lt;strong&gt;immuable&lt;/strong&gt;, ce qui signifie qu'une fois qu'une chaîne de caractères est créée, elle &lt;strong&gt;ne peut pas être modifiée&lt;/strong&gt;. En revanche, les classes &lt;strong&gt;StringBuilder&lt;/strong&gt; et &lt;strong&gt;StringBuffer&lt;/strong&gt; sont &lt;strong&gt;mutables&lt;/strong&gt;, ce qui signifie que leur contenu peut être modifié en place.&lt;/p&gt;

&lt;p&gt;Cela signifie que si vous avez besoin de créer une chaîne de caractères qui ne sera pas modifiée, vous devez utiliser la classe String. D'un autre côté, si vous avez besoin de manipuler ou de construire une chaîne de caractères de manière efficace, vous devez utiliser les classes StringBuilder ou StringBuffer.&lt;/p&gt;

&lt;p&gt;Une autre différence importante entre les classes StringBuilder et StringBuffer est que &lt;strong&gt;StringBuffer&lt;/strong&gt; est &lt;strong&gt;thread-safe&lt;/strong&gt;, tandis que StringBuilder ne l'est pas. Cela signifie que si vous travaillez dans un environnement &lt;strong&gt;multi-thread&lt;/strong&gt;, vous devez utiliser &lt;strong&gt;StringBuffer&lt;/strong&gt; pour &lt;strong&gt;éviter les conflits et les erreurs de synchronisation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A savoir qu'en termes de performances, &lt;strong&gt;StringBuilder&lt;/strong&gt; est généralement plus &lt;strong&gt;rapide&lt;/strong&gt; que StringBuffer, car il n'a pas besoin de synchronisation. Cependant, la différence de performance est souvent négligeable dans les applications &lt;strong&gt;mono-thread&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Enfin, n'oubliez pas que la &lt;strong&gt;concaténation&lt;/strong&gt; de chaînes de caractères peut être &lt;strong&gt;coûteuse&lt;/strong&gt; en termes de performances, en particulier dans les boucles. Dans de tels cas, il est préférable d'utiliser les méthodes &lt;strong&gt;append()&lt;/strong&gt; de &lt;strong&gt;StringBuilder&lt;/strong&gt; ou &lt;strong&gt;StringBuffer&lt;/strong&gt; pour concaténer des chaînes de caractères de manière efficace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;En conclusion, les chaînes de caractères sont un type de données essentiel en programmation, et Java fournit trois classes principales pour travailler avec elles : String, StringBuilder et StringBuffer. Chacune de ces classes a des caractéristiques et des utilisations différentes, et le choix de la classe dépendra des besoins de votre application.&lt;/p&gt;

</description>
      <category>java</category>
      <category>string</category>
      <category>stringbuffer</category>
      <category>stringbuilder</category>
    </item>
    <item>
      <title>POO: Comprendre la surcharge et la redéfinition de méthode en Java</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Fri, 10 Mar 2023 18:27:47 +0000</pubDate>
      <link>https://forem.com/bassaoudev/poo-comprendre-la-surcharge-et-la-redefinition-de-methode-en-java-2a90</link>
      <guid>https://forem.com/bassaoudev/poo-comprendre-la-surcharge-et-la-redefinition-de-methode-en-java-2a90</guid>
      <description>&lt;p&gt;La programmation orientée objet repose sur le concept d'héritage, qui permet aux classes de dériver de classes existantes. L'héritage permet aux classes de partager des propriétés et des méthodes communes, tout en offrant la possibilité de personnaliser et d'ajouter des fonctionnalités spécifiques à chaque classe. Pour exploiter cette flexibilité et cette réutilisabilité, les développeurs ont recours à des concepts clés tels que la redéfinition de méthode, la surcharge et le polymorphisme.&lt;/p&gt;

&lt;h3&gt;
  
  
  Redéfinition de méthode
&lt;/h3&gt;

&lt;p&gt;La redéfinition de méthode, également appelée polymorphisme par substitution, se produit lorsque les sous-classes redéfinissent les méthodes héritées de leur classe parente. Cela permet aux sous-classes de personnaliser le comportement des méthodes héritées pour répondre à leurs propres besoins.&lt;/p&gt;

&lt;p&gt;Prenons l'exemple d'une classe Voiture qui a une méthode "vitesseMaximale" :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Voiture&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;vitesseMaximale&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Vitesse max voiture = 200 km/h"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maintenant, supposons que nous ayons une classe Enfant qui hérite de la classe Voiture et souhaite redéfinir la méthode "vitesseMaximale" pour sa propre utilisation :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Enfant&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Voiture&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;vitesseMaximale&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Vitesse max voiture enfant = 20 km/h"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, la classe Enfant a redéfini la méthode "vitesseMaximale" héritée de la classe Voiture pour afficher une vitesse maximale différente pour les enfants. Lorsqu'un objet de la classe Enfant est créé et que la méthode "vitesseMaximale" est appelée, la méthode redéfinie dans la classe Enfant sera exécutée plutôt que la méthode de la classe Voiture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Surcharge de méthode
&lt;/h3&gt;

&lt;p&gt;La surcharge de méthode se produit lorsqu'une classe a plusieurs méthodes avec le même nom, mais des paramètres différents. Cela permet à une classe de traiter différents types de données et de fournir une interface commune pour les méthodes qui ont des fonctionnalités similaires.&lt;/p&gt;

&lt;p&gt;Prenons l'exemple d'une classe Voiture qui a une méthode "vitesseMaximale" surchargée pour accepter un argument de type String :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Voiture&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;vitesseMaximale&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"La vitesse maximale de la voiture est de 200 km/h"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;vitesseMaximale&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;conducteur&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"La vitesse maximale de la voiture pour "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;conducteur&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" est de 250 km/h"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, la classe Voiture a deux méthodes avec le même nom "vitesseMaximale", mais la deuxième méthode prend un argument de type String qui représente le nom du conducteur. Lorsqu'un objet de la classe Voiture est créé et que la méthode "vitesseMaximale" est appelée avec un argument, la méthode surchargée sera exécutée plutôt que la méthode originale qui ne prend pas d'argument.&lt;/p&gt;

&lt;h3&gt;
  
  
  Polymorphisme
&lt;/h3&gt;

&lt;p&gt;Le polymorphisme se réfère à la capacité des objets d'une classe à prendre plusieurs formes. En Java, le polymorphisme est réalisé grâce à la redéfinition de méthode et à l'utilisation d'une référence de type de classe parente pour faire référence à une classe fille.&lt;/p&gt;

&lt;p&gt;Prenons l'exemple d'une classe Animal qui a une méthode "crier" :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;crier&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"L'animal crie"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maintenant, supposons que nous ayons deux classes qui héritent de la classe Animal, la classe Chien et la classe Chat :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Chien&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;crier&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Le chien aboie"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Chat&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;crier&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Le chat miaule"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, les classes Chien et Chat ont redéfini la méthode "crier" héritée de la classe Animal pour représenter les sons qu'ils font. Maintenant, supposons que nous ayons une méthode "faireCrier" dans une autre classe qui prend un objet de la classe Animal en paramètre et appelle sa méthode "crier" :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RefugedeAnimaux&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;faireCrier&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="n"&gt;animal&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;animal&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;crier&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maintenant, si nous créons un objet Chien et un objet Chat et appelons la méthode "faireCrier" sur chaque objet, la méthode "crier" correspondante de chaque objet sera exécutée :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nc"&gt;RefugedeAnimaux&lt;/span&gt; &lt;span class="n"&gt;refugedeAnimaux&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RefugedeAnimaux&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="nc"&gt;Chien&lt;/span&gt; &lt;span class="n"&gt;chien&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Chien&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="nc"&gt;Chat&lt;/span&gt; &lt;span class="n"&gt;chat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Chat&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

    &lt;span class="n"&gt;refugedeAnimaux&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;faireCrier&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chien&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// affiche "Le chien aboie"&lt;/span&gt;
    &lt;span class="n"&gt;refugedeAnimaux&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;faireCrier&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// affiche "Le chat miaule"&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, l'utilisation de la référence de type de classe parente "Animal" nous permet d'appeler la méthode "crier" de la sous-classe appropriée en fonction de l'objet passé en paramètre.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;La redéfinition de méthode, la surcharge et le polymorphisme sont des concepts clés en programmation orientée objet en Java. Ces concepts permettent aux développeurs de créer des classes flexibles et réutilisables, en personnalisant le comportement des méthodes héritées, en permettant à une classe de traiter différents types de données et en permettant aux objets d'une classe de prendre plusieurs formes. J'espère que cet article a aidé à clarifier ces concepts en utilisant un exemple simple de la classe Voiture.&lt;/p&gt;

</description>
      <category>poo</category>
      <category>java</category>
      <category>surcharge</category>
      <category>redefinition</category>
    </item>
    <item>
      <title>POO: classes abstraites vs interfaces (Java)</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Fri, 10 Mar 2023 17:20:14 +0000</pubDate>
      <link>https://forem.com/bassaoudev/poo-comprendre-les-classes-abstraites-et-les-interfaces-en-java-3imn</link>
      <guid>https://forem.com/bassaoudev/poo-comprendre-les-classes-abstraites-et-les-interfaces-en-java-3imn</guid>
      <description>&lt;p&gt;En programmation orientée objet (POO), les classes abstraites et les interfaces sont des concepts importants qui permettent de définir des modèles communs pour des classes spécifiques. Dans cet article, nous allons expliquer les caractéristiques de chaque concept et fournir des exemples simples pour mieux comprendre leur utilisation en Java.&lt;/p&gt;

&lt;h3&gt;
  
  
  Classes abstraites en Java
&lt;/h3&gt;

&lt;p&gt;Une &lt;strong&gt;classe&lt;/strong&gt; abstraite est une classe qui &lt;strong&gt;ne peut pas être instanciée directement&lt;/strong&gt;, mais qui sert de modèle pour des classes dérivées. Elle contient des &lt;strong&gt;méthodes abstraites&lt;/strong&gt; (sans corps) qui doivent être implémentées dans les classes dérivées. Une classe abstraite peut également contenir des &lt;strong&gt;méthodes non abstraites&lt;/strong&gt; qui ont une implémentation concrète.&lt;/p&gt;

&lt;p&gt;Voici un exemple simple de classe abstraite pour une voiture :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Voiture&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;marque&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;modele&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;Voiture&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;marque&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;modele&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;marque&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;marque&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;modele&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;modele&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getMarque&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;marque&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getModele&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;modele&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;demarrer&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;arreter&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, la classe &lt;strong&gt;Voiture&lt;/strong&gt; est &lt;strong&gt;abstraite&lt;/strong&gt; car elle contient des méthodes abstraites &lt;strong&gt;demarrer()&lt;/strong&gt; et &lt;strong&gt;arreter()&lt;/strong&gt;. Ces méthodes seront obligatoirement implémentées dans des classes dérivées qui étendent Voiture. Sinon, la sous-classe doit elle-même être déclarée abstraite. &lt;/p&gt;

&lt;p&gt;La classe Voiture contient également des méthodes non abstraites getMarque() et getModele() qui ont une implémentation concrète.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interfaces en Java
&lt;/h3&gt;

&lt;p&gt;Une &lt;strong&gt;interface&lt;/strong&gt; en Java est un ensemble de &lt;strong&gt;méthodes abstraites&lt;/strong&gt; qui définissent le &lt;strong&gt;comportement&lt;/strong&gt; d'un objet. Les interfaces peuvent être implémentées par des classes pour définir un comportement commun pour ces classes.&lt;/p&gt;

&lt;p&gt;Voici un exemple simple d'interface pour une voiture :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Voiture&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;demarrer&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;arreter&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, l'interface &lt;strong&gt;Voiture&lt;/strong&gt; définit deux méthodes abstraites &lt;strong&gt;demarrer()&lt;/strong&gt; et &lt;strong&gt;arreter()&lt;/strong&gt;. Les classes qui implémentent cette interface doivent fournir une implémentation pour ces méthodes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Différences entre les classes abstraites et les interfaces
&lt;/h3&gt;

&lt;p&gt;Voici les principales différences entre les classes abstraites et les interfaces :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Une classe abstraite peut contenir des méthodes non abstraites avec une implémentation concrète, tandis qu'une interface ne peut contenir que des méthodes abstraites sans implémentation.&lt;/li&gt;
&lt;li&gt;Une &lt;strong&gt;classe abstraite&lt;/strong&gt; peut implémenter &lt;strong&gt;plusieurs interfaces&lt;/strong&gt;, mais elle ne peut &lt;strong&gt;hériter&lt;/strong&gt; que d'&lt;strong&gt;une seule classe&lt;/strong&gt; (abstraite ou non), car l'héritage multiple peut conduire à des conflits de noms et de comportements et peut rendre le code plus complexe et difficile à maintenir.&lt;/li&gt;
&lt;li&gt;Les &lt;strong&gt;classes abstraites&lt;/strong&gt; sont souvent utilisées pour définir des &lt;strong&gt;classes de base génériques&lt;/strong&gt;, tandis que les &lt;strong&gt;interfaces&lt;/strong&gt; sont utilisées pour définir des &lt;strong&gt;comportements communs&lt;/strong&gt; pour des classes qui n'ont pas nécessairement de relation d'héritage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quand utiliser une classe abstraite ou une interface
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Utilisez une &lt;strong&gt;classe abstraite&lt;/strong&gt; si vous avez besoin de fournir une &lt;strong&gt;implémentation de base&lt;/strong&gt; pour une classe dérivée et que cette implémentation est utilisée par plusieurs classes dérivées. Les classes dérivées peuvent ajouter des méthodes et des fonctionnalités supplémentaires en plus de l'implémentation de base fournie par la classe abstraite.&lt;/li&gt;
&lt;li&gt;Utilisez une &lt;strong&gt;interface&lt;/strong&gt; si vous voulez définir un &lt;strong&gt;comportement commun&lt;/strong&gt; pour des classes qui n'ont pas de relation d'héritage directe. Les classes qui implémentent l'interface fournissent leur propre implémentation pour les méthodes abstraites définies dans l'interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;En somme, les classes abstraites et les interfaces sont deux outils clés de la programmation orientée objet en Java. Les classes abstraites permettent de fournir une implémentation de base pour les classes dérivées, tandis que les interfaces définissent un comportement commun pour les classes qui n'ont pas de relation d'héritage directe. L'utilisation de ces concepts peut aider à définir des modèles communs pour les classes spécifiques, à améliorer la maintenabilité et la réutilisabilité du code, et à renforcer la conception orientée objet d'un programme Java.&lt;/p&gt;

</description>
      <category>poo</category>
      <category>java</category>
      <category>interface</category>
      <category>classe</category>
    </item>
    <item>
      <title>Java: introduction à la programmation orientée objet (POO)</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Thu, 09 Mar 2023 17:40:54 +0000</pubDate>
      <link>https://forem.com/bassaoudev/java-introduction-a-la-programmation-orientee-objet-poo-4315</link>
      <guid>https://forem.com/bassaoudev/java-introduction-a-la-programmation-orientee-objet-poo-4315</guid>
      <description>&lt;p&gt;La programmation orientée objet (&lt;strong&gt;POO&lt;/strong&gt;) est un &lt;strong&gt;paradigme&lt;/strong&gt; de programmation populaire qui permet aux développeurs de créer des &lt;strong&gt;applications&lt;/strong&gt; plus &lt;strong&gt;modulaires&lt;/strong&gt; et &lt;strong&gt;faciles à maintenir&lt;/strong&gt;. En Java, la POO est largement utilisée pour développer des applications de bureau, des applications Web et des applications mobiles. Dans cet article, nous allons passer en revue les principes de base de la programmation orientée objet en Java et les illustrer avec des exemples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encapsulation
&lt;/h3&gt;

&lt;p&gt;L'encapsulation est le premier principe de base de la programmation orientée objet. Elle consiste à regrouper des &lt;strong&gt;propriétés&lt;/strong&gt; et des &lt;strong&gt;méthodes&lt;/strong&gt; associées en une seule unité, appelée une &lt;strong&gt;classe&lt;/strong&gt;. Les propriétés sont &lt;strong&gt;cachées&lt;/strong&gt; à l'extérieur de la classe et ne peuvent être accédées que par des méthodes spéciales appelées accesseurs (&lt;strong&gt;getters&lt;/strong&gt;) et mutateurs (&lt;strong&gt;setters&lt;/strong&gt;). Cela permet de protéger les données et de contrôler leur modification.&lt;/p&gt;

&lt;p&gt;Par exemple, voici une classe simple qui utilise l'encapsulation pour stocker et modifier une variable private (privée) "name":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La propriété "&lt;strong&gt;name&lt;/strong&gt;" est déclarée comme privée, ce qui signifie qu'elle &lt;strong&gt;ne peut être accédée directement en dehors de la classe&lt;/strong&gt; Person. Pour accéder à cette propriété, la classe définit deux méthodes publiques. &lt;/p&gt;

&lt;p&gt;La méthode "&lt;strong&gt;getName()&lt;/strong&gt;" renvoie la valeur actuelle de la propriété "&lt;strong&gt;name&lt;/strong&gt;", tandis que la méthode "&lt;strong&gt;setName()&lt;/strong&gt;" prend un argument de type String et définit la valeur de la propriété "&lt;strong&gt;name&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;En encapsulant la propriété "&lt;strong&gt;name&lt;/strong&gt;" et en fournissant des &lt;strong&gt;méthodes publiques&lt;/strong&gt; pour y accéder, la classe Person garantit que les &lt;strong&gt;modifications de la propriété&lt;/strong&gt; "name" sont effectuées de manière contrôlée. Cela facilite également la &lt;strong&gt;réutilisation du code&lt;/strong&gt; de la classe, car les autres parties du programme peuvent interagir avec la classe via ses méthodes publiques sans avoir à se soucier de la manière dont la propriété "name" est stockée ou modifiée.&lt;/p&gt;

&lt;h3&gt;
  
  
  Héritage
&lt;/h3&gt;

&lt;p&gt;L'héritage est un autre principe important de la POO. Il permet à une classe &lt;strong&gt;d'hériter des propriétés et des méthodes d'une autre classe&lt;/strong&gt;. La classe héritante est appelée sous-classe ou classe dérivée, tandis que la classe dont elle hérite est appelée &lt;strong&gt;super-classe&lt;/strong&gt; ou &lt;strong&gt;classe de base&lt;/strong&gt;. La sous-classe peut &lt;strong&gt;ajouter&lt;/strong&gt; des fonctionnalités supplémentaires ou &lt;strong&gt;modifier&lt;/strong&gt; les fonctionnalités existantes héritées de la super-classe.&lt;/p&gt;

&lt;p&gt;Par exemple, voici une &lt;strong&gt;super-classe Animal&lt;/strong&gt; et une sous-classe &lt;strong&gt;Dog&lt;/strong&gt; qui hérite de Animal et ajoute des méthodes et des propriétés spécifiques au chien:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;eat&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"I am eating"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Dog&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;bark&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Woof! Woof!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La classe Animal a une méthode publique "&lt;strong&gt;eat()&lt;/strong&gt;" qui affiche un message indiquant qu'il est en train de manger. La classe &lt;strong&gt;Dog&lt;/strong&gt; étend la classe Animal en &lt;strong&gt;héritant de sa méthode&lt;/strong&gt; "&lt;strong&gt;eat()&lt;/strong&gt;" et en &lt;strong&gt;ajoutant&lt;/strong&gt; une méthode "&lt;strong&gt;bark()&lt;/strong&gt;" qui affiche un message indiquant que le chien aboie.&lt;/p&gt;

&lt;p&gt;En héritant de la classe &lt;strong&gt;Animal&lt;/strong&gt;, la classe &lt;strong&gt;Dog&lt;/strong&gt; peut réutiliser sa méthode "&lt;strong&gt;eat()&lt;/strong&gt;" sans avoir à la redéfinir. Cela permet d'&lt;strong&gt;éviter la duplication de code&lt;/strong&gt; et de &lt;strong&gt;faciliter la maintenance&lt;/strong&gt; du code.&lt;/p&gt;

&lt;p&gt;Dans cet exemple, la classe &lt;strong&gt;Dog&lt;/strong&gt; est une forme de l'objet Animal et peut être utilisée partout où un objet Animal est attendu. Cependant, le chien a également un &lt;strong&gt;comportement spécifique&lt;/strong&gt; à lui-même (le fait d'aboyer) qui peut être invoqué par la méthode &lt;strong&gt;"bark()&lt;/strong&gt;".&lt;/p&gt;

&lt;h3&gt;
  
  
  Polymorphisme
&lt;/h3&gt;

&lt;p&gt;Le polymorphisme est un principe qui permet à une classe de se comporter de différentes manières. Cela signifie qu'un &lt;strong&gt;objet&lt;/strong&gt; peut être utilisé comme une &lt;strong&gt;instance&lt;/strong&gt; de &lt;strong&gt;sa propre classe&lt;/strong&gt; ou comme une instance d'une de ses &lt;strong&gt;sous-classes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Par exemple, considérez la classe &lt;strong&gt;Animal&lt;/strong&gt; et ses sous-classes &lt;strong&gt;Dog&lt;/strong&gt; et &lt;strong&gt;Cat&lt;/strong&gt;. Supposons que nous ayons une méthode appelée "&lt;strong&gt;makeSound()&lt;/strong&gt;" qui doit être appelée pour chaque animal. Dans ce cas, nous pouvons utiliser le polymorphisme pour appeler la méthode "&lt;strong&gt;makeSound()&lt;/strong&gt;" pour n'importe quel type d'animal, sans savoir à l'avance s'il s'agit d'un chien ou d'un chat.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The animal is making a sound"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Dog&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The dog is barking"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cat&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The cat is meowing"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La classe Animal a une &lt;strong&gt;méthode publique&lt;/strong&gt; "&lt;strong&gt;makeSound()&lt;/strong&gt;" qui affiche un message indiquant que l'animal fait un bruit. Les classes &lt;strong&gt;Dog&lt;/strong&gt; et &lt;strong&gt;Cat&lt;/strong&gt; étendent la classe &lt;strong&gt;Animal&lt;/strong&gt; et &lt;strong&gt;redéfinissent sa méthode&lt;/strong&gt; "&lt;strong&gt;makeSound()&lt;/strong&gt;" en spécifiant le son spécifique que l'animal émet (aboiement pour le chien et miaulement pour le chat).&lt;/p&gt;

&lt;p&gt;Le polymorphisme permet aux &lt;strong&gt;objets&lt;/strong&gt; d'avoir des &lt;strong&gt;comportements différents&lt;/strong&gt; en fonction de leur contexte d'utilisation. Cela facilite la &lt;strong&gt;réutilisation du code&lt;/strong&gt; et permet de créer des &lt;strong&gt;applications&lt;/strong&gt; Java &lt;strong&gt;modulaires&lt;/strong&gt; et &lt;strong&gt;évolutives&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Abstraction
&lt;/h3&gt;

&lt;p&gt;L'abstraction est le quatrième principe de la programmation orientée objet. Il consiste à définir une &lt;strong&gt;classe abstraite&lt;/strong&gt; qui contient des &lt;strong&gt;méthodes abstraites&lt;/strong&gt; (&lt;strong&gt;méthodes sans corps&lt;/strong&gt;) qui doivent être &lt;strong&gt;implémentées&lt;/strong&gt; par ses &lt;strong&gt;sous-classes&lt;/strong&gt;. L'abstraction permet de définir un ensemble commun de méthodes et de propriétés qui peuvent être utilisées par des classes distinctes, tout en garantissant que chaque sous-classe implémente ces méthodes de manière appropriée.&lt;/p&gt;

&lt;p&gt;L'exemple ci-dessous montre comment la classe &lt;strong&gt;Dog&lt;/strong&gt; peut utiliser l'abstraction pour cacher les détails de son implémentation derrière une interface simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Dog&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The dog is barking"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, la classe &lt;strong&gt;Animal&lt;/strong&gt; est déclarée comme étant &lt;strong&gt;abstraite&lt;/strong&gt; avec une &lt;strong&gt;méthode abstraite&lt;/strong&gt; "&lt;strong&gt;makeSound()&lt;/strong&gt;". Cette méthode n'a pas d'implémentation dans la classe Animal, mais elle est déclarée pour que toutes les &lt;strong&gt;classes qui étendent Animal soient obligées de la définir&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;La classe &lt;strong&gt;Dog&lt;/strong&gt; étend la classe Animal et définit &lt;strong&gt;sa propre implémentation&lt;/strong&gt; de la méthode "&lt;strong&gt;makeSound()&lt;/strong&gt;". En utilisant l'abstraction, la classe Dog n'a pas besoin de fournir une implémentation pour toutes les autres méthodes définies dans la classe Animal. Au lieu de cela, elle peut se concentrer sur la &lt;strong&gt;définition&lt;/strong&gt; de sa propre implémentation pour "&lt;strong&gt;makeSound()&lt;/strong&gt;", qui est la seule &lt;strong&gt;méthode abstraite&lt;/strong&gt; définie dans Animal.&lt;/p&gt;

&lt;p&gt;La principale caractéristique d'une &lt;strong&gt;classe abstraite&lt;/strong&gt; est qu'elle &lt;strong&gt;ne peut pas être instanciée directement&lt;/strong&gt;, mais &lt;strong&gt;doit être héritée&lt;/strong&gt; par une sous-classe qui implémente ses méthodes abstraites et/ou surcharge ses méthodes non abstraites. La présence de méthodes abstraites n'est qu'un des moyens de forcer une sous-classe à fournir une implémentation pour ces méthodes, mais ce n'est pas la seule façon. Par conséquent, une classe abstraite &lt;strong&gt;peut ne pas contenir de méthode abstraite&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;L'abstraction permet aux développeurs de créer des classes génériques qui peuvent être utilisées de manière flexible dans différents contextes, sans avoir à se soucier des détails d'implémentation spécifiques à chaque sous-classe. Cela facilite la réutilisation du code et permet de créer des applications Java modulaires et évolutives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Composition
&lt;/h3&gt;

&lt;p&gt;La composition est un autre principe important de la POO en Java. Elle consiste à &lt;strong&gt;créer des objets complexes en combinant des objets plus simples&lt;/strong&gt;. Au lieu d'hériter des propriétés et des méthodes d'une autre classe, la composition utilise des instances de classe comme membres d'une autre classe pour créer un objet plus complexe.&lt;/p&gt;

&lt;p&gt;L'exemple ci-dessous montre comment la composition peut être utilisée pour créer un objet "House" à partir d'objets plus simples tels que "Room" et "Door":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Door&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;Door&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getColor&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Room&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Door&lt;/span&gt; &lt;span class="n"&gt;door&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;Room&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Door&lt;/span&gt; &lt;span class="n"&gt;door&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;door&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;door&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Door&lt;/span&gt; &lt;span class="nf"&gt;getDoor&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;door&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;House&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Room&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;rooms&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;House&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Room&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;rooms&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;rooms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rooms&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Room&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="nf"&gt;getRooms&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;rooms&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons trois classes: &lt;strong&gt;Door&lt;/strong&gt;, &lt;strong&gt;Room&lt;/strong&gt; et &lt;strong&gt;House&lt;/strong&gt;. La classe Door représente une porte et a une propriété "color" qui définit sa couleur. La classe Room représente une pièce de la maison et a une propriété "name" qui définit son nom, ainsi qu'une propriété "door" qui est un objet Door qui représente la porte de la pièce.&lt;/p&gt;

&lt;p&gt;La classe &lt;strong&gt;House&lt;/strong&gt; représente une maison et a une propriété "&lt;strong&gt;rooms&lt;/strong&gt;" qui est un &lt;strong&gt;tableau d'objets Room&lt;/strong&gt; qui représente toutes les pièces de la maison. En utilisant la composition, nous pouvons &lt;strong&gt;construire un objet House en combinant plusieurs objets Room, qui contiennent eux-mêmes des objets Door.&lt;br&gt;
**&lt;br&gt;
En conclusion, la **programmation orientée objet&lt;/strong&gt; en Java offre de nombreux avantages, notamment la &lt;strong&gt;modularité&lt;/strong&gt;, la &lt;strong&gt;réutilisabilité&lt;/strong&gt;, la &lt;strong&gt;maintenabilité&lt;/strong&gt; et la &lt;strong&gt;flexibilité&lt;/strong&gt;. En utilisant les principes de l'encapsulation, de l'héritage, du polymorphisme, de l'abstraction et de la composition, les développeurs peuvent créer des &lt;strong&gt;applications&lt;/strong&gt; Java &lt;strong&gt;robustes&lt;/strong&gt; et &lt;strong&gt;évolutives&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>beginners</category>
      <category>poo</category>
    </item>
    <item>
      <title>Introduction au concept de classe en Java</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Wed, 08 Mar 2023 18:56:24 +0000</pubDate>
      <link>https://forem.com/bassaoudev/poo-introduction-au-concept-de-classe-en-java-2akk</link>
      <guid>https://forem.com/bassaoudev/poo-introduction-au-concept-de-classe-en-java-2akk</guid>
      <description>&lt;p&gt;Java est un langage de programmation orienté objet (POO), ce qui signifie que les concepts clés tels que l'encapsulation, l'héritage et le polymorphisme sont au cœur de la conception du langage. L'une des fonctionnalités clés de la programmation orientée objet est la &lt;strong&gt;classe&lt;/strong&gt;, qui est un élément fondamental de la &lt;strong&gt;création d'objets en Java&lt;/strong&gt;. Dans cet article, nous allons explorer ce qu'est une classe en Java, comment les créer et comment les utiliser.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qu'est-ce qu'une classe en Java ?
&lt;/h3&gt;

&lt;p&gt;Une &lt;strong&gt;classe&lt;/strong&gt; en Java est un &lt;strong&gt;modèle&lt;/strong&gt; qui définit les variables et les méthodes qui constituent un objet. La classe &lt;strong&gt;décrit les caractéristiques et les comportements d'un objet&lt;/strong&gt; en définissant ses &lt;strong&gt;propriétés&lt;/strong&gt; et ses &lt;strong&gt;méthodes&lt;/strong&gt;. Une fois qu'une classe est définie, elle peut être utilisée pour créer des instances (objets) de cette classe.&lt;/p&gt;

&lt;p&gt;Par exemple, nous pouvons définir une &lt;strong&gt;classe&lt;/strong&gt; "&lt;strong&gt;Personne&lt;/strong&gt;" qui a des propriétés telles que le &lt;strong&gt;nom&lt;/strong&gt;, &lt;strong&gt;l'âge&lt;/strong&gt;, le &lt;strong&gt;sexe&lt;/strong&gt;, &lt;strong&gt;l'adresse&lt;/strong&gt;, etc. et des &lt;strong&gt;méthodes&lt;/strong&gt; telles que "&lt;strong&gt;parler&lt;/strong&gt;", "&lt;strong&gt;manger&lt;/strong&gt;", "&lt;strong&gt;dormir&lt;/strong&gt;" (même si dormir n'est pas une action consciente mais ça c'est un autre débat 😌), etc. Une fois que nous avons défini la classe "Personne", nous pouvons créer des objets de cette classe qui représentent des personnes spécifiques avec leurs propres noms, âges, adresses, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comment créer une classe en Java ?
&lt;/h3&gt;

&lt;p&gt;La création d'une classe en Java est simple. Voici la syntaxe de base pour créer une classe en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MaClasse&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;// les variables et les méthodes sont définies ici&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commençons par examiner la première ligne. Le mot clé "&lt;strong&gt;public&lt;/strong&gt;" est utilisé pour indiquer que la classe est &lt;strong&gt;accessible à partir d'autres classes&lt;/strong&gt;. Si vous n'avez pas besoin que la classe soit accessible à partir d'autres classes, vous pouvez utiliser le mot clé "private" à la place.&lt;/p&gt;

&lt;p&gt;Le mot clé "&lt;strong&gt;class&lt;/strong&gt;" indique que nous sommes en train de définir une nouvelle classe. Nous pouvons donner un &lt;strong&gt;nom&lt;/strong&gt; à notre classe en le plaçant juste après le mot clé "class". Dans cet exemple, le nom de la classe est "&lt;strong&gt;MaClasse&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;Ensuite, nous pouvons définir les variables et les méthodes de notre classe entre les accolades. Les &lt;strong&gt;variables&lt;/strong&gt; définies dans la classe sont appelées "&lt;strong&gt;propriétés&lt;/strong&gt;" (ou attributs pour certains même si ce mot est lié au langage UML) et les &lt;strong&gt;méthodes&lt;/strong&gt; définies dans la classe sont appelées "&lt;strong&gt;méthodes de classe&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;Voici un exemple de classe "&lt;strong&gt;Personne&lt;/strong&gt;" qui a des attributs pour le nom, l'âge et l'adresse, ainsi que des méthodes pour parler et dormir :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Personne&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;// les attributs de la classe Personne&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;adresse&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

   &lt;span class="c1"&gt;// les méthodes de la classe Personne&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;parler&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Je parle."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;

   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;dormir&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Je dors."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons défini une classe "&lt;strong&gt;Personne&lt;/strong&gt;" avec des propriétés pour le &lt;strong&gt;nom&lt;/strong&gt;, &lt;strong&gt;l'âge&lt;/strong&gt; et &lt;strong&gt;l'adresse&lt;/strong&gt;, et des méthodes pour &lt;strong&gt;parler&lt;/strong&gt; et &lt;strong&gt;dormir&lt;/strong&gt;. Les &lt;strong&gt;propriétés&lt;/strong&gt; sont définis en tant que &lt;strong&gt;variables publiques&lt;/strong&gt;, ce qui signifie qu'ils sont &lt;strong&gt;accessibles à partir de l'extérieur de la classe&lt;/strong&gt;. Les méthodes sont également publiques.&lt;/p&gt;

&lt;p&gt;Cependant, il est généralement &lt;strong&gt;recommandé&lt;/strong&gt; de définir les &lt;strong&gt;propriétés&lt;/strong&gt; comme &lt;strong&gt;private&lt;/strong&gt; (privés) et de fournir des &lt;strong&gt;méthodes d'accès&lt;/strong&gt; (&lt;strong&gt;getters&lt;/strong&gt;) et de &lt;strong&gt;modification&lt;/strong&gt; (&lt;strong&gt;setters&lt;/strong&gt;) pour accéder à ces propriétés à partir de l'extérieur de la classe. Cela s'appelle &lt;strong&gt;l'encapsulation&lt;/strong&gt;, qui est l'un des principes fondamentaux de la programmation orientée objet. Voici comment définir les propriétés comme private et fournir des méthodes d'accès pour notre classe "Personne" :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Personne&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;adresse&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getNom&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setNom&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nom&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;getAge&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setAge&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getAdresse&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;adresse&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setAdresse&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;adresse&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;adresse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;adresse&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;parler&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Je parle."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;dormir&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Je dors."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maintenant, les propriétés "nom", "age" et "adresse" sont définis en tant que variables privées, ce qui signifie qu'ils ne peuvent être accédés qu'à l'intérieur de la classe "Personne". Nous avons également ajouté des méthodes d'accès (getters) et de modification (setters) pour accéder à ces attributs à partir de l'extérieur de la classe.&lt;/p&gt;

&lt;p&gt;En utilisant l'encapsulation, nous pouvons contrôler l'accès aux propriétés d'une classe et nous assurer que l'état de l'objet est maintenu de manière cohérente. Cela facilite également la modification de l'implémentation interne de la classe sans avoir à modifier le code qui utilise cette classe à l'extérieur.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comment utiliser une classe en Java ?
&lt;/h3&gt;

&lt;p&gt;Maintenant que nous avons créé une classe, comment pouvons-nous l'utiliser dans notre programme Java ? Pour utiliser une classe en Java, nous devons créer une instance de cette classe. Pour créer une instance de classe, nous utilisons le mot clé "new". Voici comment créer une instance de notre classe "Personne" :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Personne&lt;/span&gt; &lt;span class="n"&gt;personne1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Personne&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé une nouvelle &lt;strong&gt;instance&lt;/strong&gt; de la classe "&lt;strong&gt;Personne&lt;/strong&gt;" en utilisant le mot clé "&lt;strong&gt;new&lt;/strong&gt;". Nous avons ensuite stocké cette instance dans une variable appelée "&lt;strong&gt;personne1&lt;/strong&gt;". Nous pouvons maintenant accéder aux méthodes et aux propriétés de la classe "Personne" en utilisant cette instance.&lt;/p&gt;

&lt;p&gt;Par exemple, si nous voulons accéder à l'attribut "nom" de notre instance "personne1", nous pouvons utiliser la syntaxe suivante :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;personne1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"John"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons défini la propriété "nom" de notre instance "personne1" sur "John". Nous pouvons également appeler des méthodes de notre instance en utilisant la syntaxe suivante :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;personne1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parler&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Les classes sont un élément fondamental de la programmation orientée objet en Java. Les classes définissent les variables et les méthodes qui constituent un objet, et une fois qu'une classe est définie, elle peut être utilisée pour créer des objets de cette classe. En utilisant les classes, les développeurs peuvent créer des &lt;strong&gt;programmes modulaires&lt;/strong&gt; et &lt;strong&gt;réutilisables&lt;/strong&gt;. En créant des classes, ils peuvent également encapsuler la complexité de leur programme, ce qui &lt;strong&gt;facilite la maintenance et la mise à jour du code&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>poo</category>
      <category>java</category>
      <category>class</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Les interfaces en Java simplement</title>
      <dc:creator>Bassaoud</dc:creator>
      <pubDate>Wed, 08 Mar 2023 17:22:10 +0000</pubDate>
      <link>https://forem.com/bassaoudev/poo-les-interfaces-en-java-simplement-5fdd</link>
      <guid>https://forem.com/bassaoudev/poo-les-interfaces-en-java-simplement-5fdd</guid>
      <description>&lt;p&gt;En programmation orientée objet (POO), une &lt;strong&gt;interface&lt;/strong&gt; est un &lt;strong&gt;type de contrat qui définit les méthodes qu'une classe doit implémenter&lt;/strong&gt;. Une interface ne fournit &lt;strong&gt;pas d'implémentation&lt;/strong&gt; réelle des méthodes, mais elle fournit simplement une &lt;strong&gt;liste de méthodes&lt;/strong&gt; que la classe qui implémente l'interface doit fournir.&lt;/p&gt;

&lt;p&gt;En Java, le mot-clé "&lt;strong&gt;implements&lt;/strong&gt;" est utilisé pour indiquer qu'une &lt;strong&gt;classe implémente une interface&lt;/strong&gt;. Cela signifie que la classe fournit une implémentation pour toutes les méthodes définies dans l'interface. &lt;br&gt;
En POO, l'&lt;strong&gt;implémentation&lt;/strong&gt; fait référence au &lt;strong&gt;code concret&lt;/strong&gt; qui fournit une &lt;strong&gt;fonctionnalité&lt;/strong&gt; spécifique définie dans une interface, une classe abstraite ou une superclasse. Nous aurons l'occasion d'évoquer les deux dernières. Pour le moment, nous nous concentrons sur les interfaces uniquement.&lt;/p&gt;

&lt;p&gt;Voici un exemple de déclaration de classe qui implémente une interface en utilisant le mot clé "implements":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;MyInterface&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

&lt;span class="c1"&gt;// Code de la classe&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, "MyClass" est une classe qui implémente l'interface "MyInterface". La classe doit fournir des implémentations pour toutes les méthodes définies dans "MyInterface".&lt;/p&gt;

&lt;p&gt;En Java, une interface est définie à l'aide du mot-clé "&lt;strong&gt;interface&lt;/strong&gt;". Les &lt;strong&gt;classes&lt;/strong&gt; qui implémentent une interface doivent fournir une &lt;strong&gt;implémentation&lt;/strong&gt; pour toutes les &lt;strong&gt;méthodes de l'interface&lt;/strong&gt;. Une &lt;strong&gt;classe peut implémenter plusieurs interfaces&lt;/strong&gt;, ce qui permet à la classe d'avoir plusieurs types.&lt;/p&gt;

&lt;p&gt;Voici un exemple d'interface en Java :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;move&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons défini une &lt;strong&gt;interface&lt;/strong&gt; appelée "&lt;strong&gt;Animal&lt;/strong&gt;". L'interface définit deux méthodes, "&lt;strong&gt;makeSound&lt;/strong&gt;" et "&lt;strong&gt;move&lt;/strong&gt;". Toutes les classes qui implémentent cette interface doivent fournir une implémentation pour ces deux méthodes.&lt;/p&gt;

&lt;p&gt;Voici un exemple de classe qui implémente l'interface "Animal" :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Dog&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Woof!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;move&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The dog is running."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons défini une classe appelée "&lt;strong&gt;Dog&lt;/strong&gt;" qui implémente l'interface "&lt;strong&gt;Animal&lt;/strong&gt;". La &lt;strong&gt;classe&lt;/strong&gt; fournit une &lt;strong&gt;implémentation&lt;/strong&gt; pour les méthodes "&lt;strong&gt;makeSound&lt;/strong&gt;" et "&lt;strong&gt;move&lt;/strong&gt;". La méthode "makeSound" affiche "Woof!" et la méthode "move" affiche "The dog is running.".&lt;/p&gt;

&lt;p&gt;Nous pouvons également créer une autre classe qui implémente l'interface "Animal". Par exemple :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cat&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Meow!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;move&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The cat is running."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons défini une &lt;strong&gt;classe&lt;/strong&gt; appelée "&lt;strong&gt;Cat&lt;/strong&gt;" qui implémente également l'interface "&lt;strong&gt;Animal&lt;/strong&gt;". La classe fournit une implémentation pour les méthodes "&lt;strong&gt;makeSound&lt;/strong&gt;" et "&lt;strong&gt;move&lt;/strong&gt;". La méthode "makeSound" affiche "Meow!" et la méthode "move" affiche "The cat is running.".&lt;/p&gt;

&lt;p&gt;Maintenant, nous pouvons utiliser ces deux classes comme des objets de type "Animal". Par exemple :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="n"&gt;myDog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Dog&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="n"&gt;myCat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Cat&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;myDog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// affichera "Woof!"&lt;/span&gt;
&lt;span class="n"&gt;myCat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeSound&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// affichera "Meow!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, nous avons créé &lt;strong&gt;deux objets&lt;/strong&gt;, "&lt;strong&gt;myDog&lt;/strong&gt;" et "&lt;strong&gt;myCat&lt;/strong&gt;", de &lt;strong&gt;type&lt;/strong&gt; "&lt;strong&gt;Animal&lt;/strong&gt;". Nous avons ensuite appelé la méthode "&lt;strong&gt;makeSound&lt;/strong&gt;" sur chacun de ces objets. Lorsque nous avons appelé "&lt;strong&gt;myDog.makeSound()&lt;/strong&gt;", il a affiché "Woof!", et lorsque nous avons appelé "&lt;strong&gt;myCat.makeSound()&lt;/strong&gt;", il a affiché "Meow!".&lt;/p&gt;

&lt;p&gt;Ici j'aimerais ouvrir une petite parenthése qui me semble importante. Nous créons une &lt;strong&gt;nouvelle instance de la classe&lt;/strong&gt; "&lt;strong&gt;Dog&lt;/strong&gt;" (et non de la classe "Animal") en utilisant l'opérateur "&lt;strong&gt;new&lt;/strong&gt;" et nous la stockons dans une variable de &lt;strong&gt;type&lt;/strong&gt; "&lt;strong&gt;Animal&lt;/strong&gt;".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="n"&gt;myDog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Dog&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En utilisant cette approche, nous pouvons &lt;strong&gt;manipuler l'objet "Dog" en tant qu'objet "Animal"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cependant, il est important de noter que même si "&lt;strong&gt;myDog&lt;/strong&gt;" est référencé par une variable de type "Animal", il &lt;strong&gt;conserve toujours ses propriétés et son comportement de "Dog"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Les interfaces sont utiles dans de nombreuses situations, notamment lors de la création de bibliothèques de classes qui doivent être utilisées par d'autres développeurs. En utilisant des interfaces, les développeurs peuvent &lt;strong&gt;garantir que toutes les classes qui implémentent l'interface ont des méthodes spécifiques&lt;/strong&gt;, ce qui facilite la création de programmes qui utilisent ces classes.&lt;/p&gt;

</description>
      <category>java</category>
      <category>programmation</category>
      <category>poo</category>
      <category>interfaces</category>
    </item>
  </channel>
</rss>
