<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://batmat.net/blog/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Blogounage - Bonnes pratiques de programmation en Java  - Commentaires</title>
  <link>http://batmat.net/blog/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Sat, 28 Jan 2012 08:26:48 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
    
    <item>
    <title>Bonnes pratiques de programmation en Java - Batmat</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c150372</link>
    <guid isPermaLink="false">urn:md5:46ff44f97e8e0d642c374fa635a57f78</guid>
    <pubDate>Tue, 21 Apr 2009 22:18:09 +0200</pubDate>
    <dc:creator>Batmat</dc:creator>
    
    <description>&lt;p&gt;&amp;gt; Donc, si j'ai bien tout compris HashMap et Vector doivent être utilisé si on a besoin d'une collection synchronized, exact?&lt;br /&gt;
Non. Il ne faut pas utiliser Vector.&lt;/p&gt;


&lt;p&gt;Plus précisément, il faut toujours préférer l'utilisation de l'interface Map (via l'une de ses implémentations dont la plus connu est certainement HashMap effectivement). Et si tu as besoin de la même chose synchronisée, passe simplement ta Map à la méthode Collections.synchronizedMap() pour l'enrober dans une Map thread-safe.&lt;/p&gt;


&lt;p&gt;&amp;gt; Et le fait de les utilisé sans ce besoin de synchronisme entraîne des pertes de performances, toujours exact?&lt;br /&gt;
Oui, c'est ça.&lt;/p&gt;</description>
  </item>
      
    
    <item>
    <title>Bonnes pratiques de programmation en Java - DaveNull</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c150361</link>
    <guid isPermaLink="false">urn:md5:4f0960fafd5eb9fa92231a828a0c94d2</guid>
    <pubDate>Tue, 21 Apr 2009 21:17:38 +0200</pubDate>
    <dc:creator>DaveNull</dc:creator>
    
    <description>&lt;p&gt;Hello, merci pour ces infos.&lt;br /&gt;
Donc, si j'ai bien tout compris HashMap et Vector doivent être utilisé si on a besoin d'une collection synchronized, exact?&lt;br /&gt;
Et le fait de les utilisé sans ce besoin de synchronisme entraîne des pertes de performances, toujours exact?&lt;/p&gt;


&lt;p&gt;Voilà, j'espère que mes questions étaieant pas trop bêtes.&lt;/p&gt;


&lt;p&gt;Bonne continuation pour le site.&lt;/p&gt;</description>
  </item>
      
    
    <item>
    <title>Bonnes pratiques de programmation en Java - Camel&amp;amp;on</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c453</link>
    <guid isPermaLink="false">urn:md5:6f47c49b54bf478ecada7f06ce18e5d8</guid>
    <pubDate>Tue, 21 Jun 2005 16:03:49 +0000</pubDate>
    <dc:creator>Camel&amp;amp;on</dc:creator>
    
    <description>&lt;p&gt;Merci pour la réponse!&lt;/p&gt;


&lt;p&gt;Effectivement, il est préférable en terme d'évolutivité d'avoir un code un chtouille moins performant mais mieux conçu.&lt;/p&gt;


&lt;p&gt;Cependant (au risque de passer pour un casse-pied (mais c'est le but&amp;nbsp;:)) ) quels critères permettent de dirent que Vector est mal conçu&amp;nbsp;? Est-ce parcequ'il a &quot;loads of legacy operation&quot;&amp;nbsp;? Je doit t'avouer que mes piètres compétences en anglais ont du mal a déchiffrer cette phrase (&quot;Vector contient des méthodes héritées&quot;&amp;nbsp;???).&lt;/p&gt;</description>
  </item>
      
    
    <item>
    <title>Bonnes pratiques de programmation en Java - Batmat</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c437</link>
    <guid isPermaLink="false">urn:md5:b3b1e14c4c354634cef4e4ff49f2adb7</guid>
    <pubDate>Thu, 09 Jun 2005 14:20:16 +0000</pubDate>
    <dc:creator>Batmat</dc:creator>
    
    <description>&lt;p&gt;Alors&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tu as zappé une partie de la phrase qui me semble très importante et rejoins ce dont je parle dans le billet&amp;nbsp;: &lt;q&gt;If you need synchronization, a Vector will be slightly faster than an ArrayList synchronized with Collections.synchronizedList. &lt;strong&gt;But Vector has loads of legacy operations, so be careful to always manipulate the Vector with the List interface, or you won't be able to replace the implementation at a later time&lt;/strong&gt;.&lt;/q&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En français dans le texte&amp;nbsp;: &lt;em&gt;Vector&lt;/em&gt; est mal conçu, donc si on l'utilise, il faut prendre grande attention à ne pas le montrer. C'est la raison pour laquelle il ne faut pas l'utiliser dans l'absolu.&lt;/p&gt;


&lt;p&gt;OK, il est dit que c'est &lt;strong&gt;légèrement&lt;/strong&gt; plus rapide&amp;nbsp;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Je ne sais pas de quand date cette doc, mais j'aimerais être sûr que ce commentaire soit toujours d'actualité, notamment avec les améliorations très importantes annoncées pour Tiger.&lt;/li&gt;
&lt;li&gt;L'éternel problème des performances... À ce sujet, je suis d'accord avec Vincent. Si tu es au millième de seconde et que tu as une problématique de fou-furieux en terme de perfs, c'est pas du Java qu'il faut faire, soyons clair. C'est un langage sans vm comme le C++ qu'il faut utiliser.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pour moi, à considérer que les performances sont proches, dans la majorité des développements, il vaut donc bien mieux perdre ce millième de seconde et obtenir une plus grande qualité et cohérence du code que de vouloir gagner des temps insensibles pour le client (qui à part un informaticien vous fera chier parce qu'un programme met 0.2s, même 0.5s de plus à faire que ce qu'on lui demande&amp;nbsp;?).&lt;/p&gt;


&lt;p&gt;Dans l'absolu, je préfère largement perdre ce temps à l'exécution mais gagner en maintenance et en réactivité des équipes de développement.&lt;/p&gt;</description>
  </item>
      
    
    <item>
    <title>Bonnes pratiques de programmation en Java - Camel&amp;amp;on</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c435</link>
    <guid isPermaLink="false">urn:md5:9e5367635ef54eacf9828c49eb523b7e</guid>
    <pubDate>Wed, 08 Jun 2005 17:10:32 +0000</pubDate>
    <dc:creator>Camel&amp;amp;on</dc:creator>
    
    <description>&lt;p&gt;Je sais que j'arrive un peu tard&amp;nbsp;! Mais je releve cette phrase sur le site de sun&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;q&gt;If you need synchronization, a Vector will be slightly faster than an ArrayList synchronized with Collections.synchronizedList.&lt;/q&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://java.sun.com/docs/books/tutorial/collections/implementations/list.html&quot; rel=&quot;nofollow&quot;&gt;http://java.sun.com/docs/books/tutorial/collections/implementations/list.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Donc SI mon appli a besoin de la synchronisation (genre appli J2EE) il vaut mieux utiliser Vector. Non&amp;nbsp;?&lt;br /&gt;
Ce que je comprend moi ce que y a une classe pour la synchronisation et l'autre non, donc en fonction de nos besoins y a qu'a choisir&amp;nbsp;!&lt;/p&gt;</description>
  </item>
      
    <item>
    <title>[ping] Bonnes pratiques de programmation en Java - Blogounage</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c212</link>
    <guid isPermaLink="false">urn:md5:fc601f7c0115b09b82d8f59e24628d6a</guid>
    <pubDate>Tue, 14 Dec 2004 19:34:08 +0000</pubDate>
    <dc:creator>Blogounage</dc:creator>
    
    <description>&lt;p&gt;&lt;a href="http://www.batmat.net/blog/2004/12/09/105-BestPracticesInJava"&gt;Best Practices in Java&lt;/a&gt;&lt;/p&gt;
    &lt;!-- TB --&gt;

&lt;p&gt;This post is a translation of this one. Many people commented it at the moment at the moment it was published although it was only available to those who speak french.

I found it very interesting to try and compare my opinion with the others. I though...&lt;/p&gt;</description>
  </item>
    
      
    
    <item>
    <title>Bonnes pratiques de programmation en Java - Anubis</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c133</link>
    <guid isPermaLink="false">urn:md5:12934607f8cb3aefd346186b7f0e855a</guid>
    <pubDate>Mon, 05 Jul 2004 15:24:45 +0000</pubDate>
    <dc:creator>Anubis</dc:creator>
    
    <description>
&lt;p&gt;Juste une petite chose à propos de tes Pouet, PouetImpl et PouetFactory... Tu aurais très bien pu faire une seule classe Pouet qui affichait « bonjour » tout simplement.&lt;/p&gt;

&lt;p&gt;Je pense qu'il faut bien réfléchir au choix de faire une interface et une factory, 3 classes sont bien plus couteuses qu'1 seule pour une JVM. Déjà que l'on est en Java, il ne faut pas non plus faire de son PC un tracteur :D&lt;/p&gt;

&lt;p&gt;Bien sûr, c'est très utile pour tout ce qui est classe utilitaire dont l'implémentation peut changer. Maintenant le concept objet de méthodes est bien souvent suffisant pour cacher une implémentation et les interfaces ne servent bien souvent qu'à définir plusieurs implémentations différentes d'un même « objet ». Ce concept est très souvent utilisé pour le développement de code externe (plugin).&lt;/p&gt;

&lt;p&gt;Pour la cas des List par exemples, je ne vois pas d'autres intérêts que le regroupement de fonctionnalités dans l'AbstractList. Et qu'on ne me dise pas que ça permet de passer facilement d'un ArrayList à une LinkedList... Ce choix est normalement à faire en amont, bien avant d'attaquer le code.&lt;/p&gt;
</description>
  </item>
      
    
    <item>
    <title>Bonnes pratiques de programmation en Java - Batmat</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c129</link>
    <guid isPermaLink="false">urn:md5:09e02c3bf6df6f74a441c7ddbd93a34d</guid>
    <pubDate>Fri, 02 Jul 2004 21:15:51 +0000</pubDate>
    <dc:creator>Batmat</dc:creator>
    
    <description>&lt;p&gt;J'y pense, j'y pense. Mais pas à MLV, c'est trop loin de Toulouse :-). J'me verrais bien faire des tds en IUT.&lt;/p&gt;

&lt;p&gt;J'aimerais surtout éviter que d'autres aient à subir des cours comme ceux de PC (un prof) où il nous faisait dériver la moindre classe pour l'utiliser...&lt;/p&gt;</description>
  </item>
      
    
    <item>
    <title>Bonnes pratiques de programmation en Java - Syl</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c128</link>
    <guid isPermaLink="false">urn:md5:be88f55b64d2fcc79fe59f607c808ca8</guid>
    <pubDate>Fri, 02 Jul 2004 20:52:36 +0000</pubDate>
    <dc:creator>Syl</dc:creator>
    
    <description>
&lt;p&gt;Hum! ça se sent que l'on a eu les même profs de Java et de Génie Log...
Alors Batmat c'est pour quand que tu enseignes à MLV ? &lt;img src=&quot;/dotclear/themes/default/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
</description>
  </item>
      
    
    <item>
    <title>Bonnes pratiques de programmation en Java - Batmat</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c127</link>
    <guid isPermaLink="false">urn:md5:33894fa5919403fcf76429d16f2249f9</guid>
    <pubDate>Thu, 01 Jul 2004 13:33:33 +0000</pubDate>
    <dc:creator>Batmat</dc:creator>
    
    <description>&lt;ul&gt;
&lt;li&gt;Doit-on faire une interface pour toutes les classes que l'on traite ? C'est à dire, doit-il toujours y avoir le couple Toto.java et TotoImpl.java ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je dirais que ça dépend de l'objet que tu implémentes, personnellement je ne le fais pas systématiquement. C'est peut-être d'ailleurs une erreur, j'attends les arguments pour et contre :), un blog est aussi fait pour réfléchir à plusieurs.&lt;/p&gt;

&lt;p&gt;Disons que je le fais plutôt avec les objets fonctionnellement complexes que je prévois de faire évoluer ou d'améliorer.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Est-ce qu'il faut mettre en oeuvre un système de factory pour tous les objets que l'on traite ? Si non, comment faire la distinction entre les objets pour lesquels la factory est nécessaire de ceux pour lesquels elle n'est pas utile ?&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Je dirais SYSTÉMATIQUEMENT lorsqu'on est dans le cas précédent : une interface publique et les implémentations censées être non utilisées ailleurs.&lt;/p&gt;

&lt;p&gt;En résumé, de toute façon, quand on écrit du code (d'après moi), il faut toujours penser à celui qui va l'utiliser. Il faut penser bibliothèque publique. C'est pour ça que j'utilise personnellement toutes les ressources possibles du langage pour contraindre le « développeur utilisateur » de mon code à l'utiliser commme je l'ai prévu.&lt;/p&gt;

&lt;p&gt;Par exemple, lorsque c'est possible, il peut être intéressant de mettre protected les constructeurs des classes qui ne sont pas destinées à une utilisation &quot;publique&quot;, etc.&lt;/p&gt;

&lt;p&gt;Quand j'écris une classe utilitaire, comme expliqué ci-dessus. Il est aberrant qu'on puisse l'instancier ou la dériver =&amp;gt; je la mets final avec un constructeur privé.
Une autre méthode couramment utilisée est de mettre une classe utilitaire abstract : mais en fait, ce n'est pas bon puisqu'on autorise sa dérivation (c'est le concept même d'une classe abstraite).&lt;/p&gt;

&lt;p&gt;Voilà, j'espère que j'ai été clair.&lt;/p&gt;</description>
  </item>
      
    
    <item>
    <title>Bonnes pratiques de programmation en Java - Nuwanda</title>
    <link>http://batmat.net/blog/post/2004/06/28/66-best-practices-en-java#c126</link>
    <guid isPermaLink="false">urn:md5:cfdcd47945f202462f3f0789cb9a9751</guid>
    <pubDate>Mon, 28 Jun 2004 20:44:26 +0000</pubDate>
    <dc:creator>Nuwanda</dc:creator>
    
    <description>&lt;p&gt;Bon je me lance... Tout d'abord c'est vachement bien expliqué, sisi c'est vrai...&lt;/p&gt;

&lt;p&gt;Cependant, j'ai quelques questions :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Doit-on faire une interface pour toutes les classes que l'on traite ? C'est à dire, doit-il toujours y avoir le couple Toto.java et TotoImpl.java ?&lt;/li&gt;
&lt;li&gt;Est-ce qu'il faut mettre en oeuvre un système de factory pour tous les objets que l'on traite ? Si non, comment faire la distinction entre les objets pour lesquels la factory est nécessaire de ceux pour lesquels elle n'est pas utile ?&lt;/li&gt;
&lt;li&gt;Question personnelle : est-ce que tu peux me filer les source de ton projet Java Graphique ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Par ailleurs, comme ce que tu écris est très clair, est-ce que tu pourrais faire un truc sur la reflection et le chargement dynamique&amp;nbsp;?&lt;/p&gt;

&lt;p&gt;Merci !&lt;/p&gt;</description>
  </item>
      
</channel>
</rss>
