Java efficace

Ecrit par Joshua Bloch, chef de projet chez Sun, « Java efficace » édité chez Vuibert regroupe de nombreux conseils de programmation applicables sur la plate-forme J2SE. Ce livre s’adresse à des personnes ayant déjà une certaine expérience du développement Java, on ne peut donc le conseiller à des débutants.

 

Le but de cet ouvrage est l’écriture de programmes clairs, robustes, flexibles et facilement maintenables. L’auteur a lui-même participé à l’élaboration de bibliothèques Java, il connaît particulièrement bien leur fonctionnement et nous explique pourquoi procéder de telle manière plutôt qu’une autre. De nombreux exemples de code sont inclus pour illustrer les conseils donnés, dont certains montrant ce qu’il ne faut pas faire.

 

Les recommandations, au nombre de 57, sont réparties en plusieurs chapitres : création et destruction d’objets, méthodes communes à tous les objets, classes et interfaces, équivalents pour constructions du langage C, méthodes, programmation générale, exceptions, threads et sérialisation. On y apprend entre autres comment bien redéfinir les méthodes equals, hashCode, pourquoi préférer les interfaces aux classes abstraites, la bonne gestion des exceptions…

 

En résumé, un très bon livre qui permet d’optimiser son code tout en comprenant pourquoi. Il est recommandé par James Gosling en personne, co-créateur du langage Java.

 

Des extraits gratuits du livre sont disponibles au format PDF sur http://java.sun.com/docs/books/effective/, ainsi que les codes sources présents dans le livre.

Sommaire

Création et destruction d'objets

  • 1. Privilégier des méthodes de fabrique statiques aux constructeurs
  • 2. Appliquer la propriété du singleton avec un constructeur privé
  • 3. Empêcher l'instanciation avec un constructeur privé
  • 4. Empêcher la duplication d'objets
  • 5. Éliminer les références d'objets obsolètes
  • 6. Éviter les finaliseurs

Méthodes communes à tous les objets

  • 7. Obéir au contrat général lors d’une redéfinition de la méthode equals
  • 8. Toujours redéfinir hashCode lorsque equals est redéfini
  • 9. Toujours redéfinir toString
  • 10. Redéfinir judicieusement clone
  • 11. Envisager l'implémentation de Comparable

Classes et Interfaces

  • 12. Restreindre l'accès des classes et de leurs membres
  • 13. Favoriser l'immuabilité
  • 14. Préférer la composition à l’héritage
  • 15. Prévoir et documenter l'héritage ou bien l’interdire
  • 16. Préférer les interfaces aux classes abstraites
  • 17. N’utiliser les interfaces que pour définir les types
  • 18. Favoriser les classes imbriquées statiques

Équivalents pour constructions du langage C

  • 19. Remplacer les structures par des classes
  • 20. Remplacer une union par une hiérarchie de classes
  • 21. Remplacer les constructions enum par des classes
  • 22. Remplacer les pointeurs de fonctions par des classes et des interfaces

Méthodes

  • 23. Vérifier la validité d’un paramètre
  • 24. Procéder à des recopies défensives en cas de besoin
  • 25. Concevoir avec attention la signature d'une méthode
  • 26. Utiliser la surcharge avec discernement
  • 27. Renvoyer des tableaux vides plutôt que null
  • 28. Écrire des commentaires de documentation pour tous les éléments exposés d’une API

Programmation générale

  • 29. Minimiser la portée des variables locales
  • 30. Connaître et utiliser les bibliothèques
  • 31. Éviter float et double si un résultat exact est requis
  • 32. Éviter les chaînes de caractères là où d'autres types sont plus appropriés
  • 33. Attention à la performance dans la concaténation de chaînes de caractères
  • 34. Faire référence à un objet via son interface
  • 35. Préférer les interfaces à la réflexion
  • 36. Utiliser judicieusement les méthodes natives
  • 37. Optimiser judicieusement
  • 38. Suivre les conventions de nommage généralement acceptées

Exceptions

  • 39. N'utiliser une exception que dans des situations exceptionnelles
  • 40. Utiliser une exception vérifiée pour une situation récupérable et une exception non vérifiée pour une erreur de programmation
  • 41. Ne pas abuser des exceptions vérifiées
  • 42. Préférer l'utilisation d’une exception standard
  • 43. Lever des exceptions en rapport avec l’abstraction
  • 44. Documenter toutes les exceptions levées par une méthode
  • 45. Inclure l'information de contexte dans les messages détaillés
  • 46. Garantir l'atomicité d’une erreur
  • 47. Ne pas ignorer une exception

Threads

  • 48. Synchroniser l'accès à toute donnée partagée et muable
  • 49. Éviter toute synchronisation excessive
  • 50. Ne jamais invoquer wait en dehors d’une boucle
  • 51. Ne pas s'appuyer sur l'ordonnanceur de threads
  • 52. Documenter la sûreté des threads
  • 53. Éviter les groupes de threads

Sérialisation

  • 54. Implémenter judicieusement Serializable
  • 55. Envisager l'utilisation d’une sérialisation sur mesure
  • 56. Rédiger la méthode readObject de manière défensive
  • 57. Fournir une méthode readResolve lorsque cela est nécessaire

Annexes

  • Bibliographie
  • Index des idiomes et patterns
  • Index



Retrouvez ci-dessous les autres sections du Laboratoire Sun
Evènements
Java Sun Net Talk LIVE CHAT le 2 Avril à 16h303/29/08
SolarisSunDécouvrez les nouveaux Sun Fire sous Intel10/11/07
JavaValtech Days10/9/07
JavaApacheCon du 1 au 4 mai à Amsterdam2/13/07

Exemples de code
JavaManipuler les looks and feel (lister et affecter)10/15/07
JavaFaire sa propre injection de dépendance avec les annotations5/9/06
JavaSplash screen avec progress Bar5/5/06
JavaFaire un splash screen en swing5/5/06

Actualités
SunProjet Kenai: une nouvelle forge open source10/3/08
SunSun Microsystems en forme !8/4/08
SunOpenDS un ldap 100% java7/24/08
SunSun et Fujitsu annoncent un nouveau Sparc647/16/08
SunVisualVM, un outil de surveillance des applications Java7/10/08

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée