Encapsulation et collections [L'infobrol, site éducatif de Stéphane Gaudry]

Vous devez être membre et vous identifier pour publier un article.
Les visiteurs peuvent toutefois commenter chaque article par une réponse.

Encapsulation et collections

Sommaire du document

Astuces de l’Infobrol (Java)Article publié le Mardi 05 Octobre 2010, 07:29


Afin de masquer la représentation interne des données pour satisfaire au principe d’abstraction des données, nous avons pour habitude de simplement respecter les principes minimum de l’encapsulation: restreindre la visibilité des champs avec l’attribut "private", et fournir des accesseurs sous la forme get... et set...

Et dans le cas des collections?

Nous avons la conscience tranquille car nous retournons le type de collection le plus générique.
Par exemple, un compteur (eau, gaz, électricité, etc.):
  1. public class Meter {
  2. private List<Measure> measures;
  3.  
  4. public Meter() {
  5. this.measures = new ArrayList<Measure>();
  6. }
  7.  
  8. public Collection<Measure> getMeasures() {
  9. return measures;
  10. }
  11.  
  12. public void addMeasure(Date date, double value) {
  13. measures.add(new Measure(date, value));
  14. }
  15.  
  16. public void clearMeasures() {
  17. measures.clear();
  18. }


Cette manière de procéder est un premier pas(nous devons par exemple avoir aussi une méthode pour supprimer un élément de la collection,...), mais ce n’est pas suffisant.

Imaginons que nous décidions de remplacer la liste de mesures par un tableau; dans getMeasures nous pouvons retourner une nouvelle collection, mais que se passera-t-il lorsque nous exécuterons le code suivant?
  1. meter.getMeasures().add(new Measure(date, value));


Nous pouvons éviter ce genre de comportement de la manière suivante:
  1. public class Meter {
  2. private List<Measure> measures;
  3.  
  4. public Meter() {
  5. this.measures = new ArrayList<Measure>();
  6. }
  7.  
  8. /**
  9. * Returns an unmodifiable view of the measures (only <b>indexes of the
  10. * meter</b>). This collection is <b>sorted by insertion order</b> and not
  11. * by date; call the {@link java.util.Collections#sort(List)
  12. * Collections.sort(List)} method to sort by date. <br />
  13. * This method allows modules to provide users with "read-only" access to
  14. * the measures. Query operations on the returned list "read through" to the
  15. * specified list, and attempts to modify the returned list, whether direct
  16. * or via its iterator, result in an <tt>UnsupportedOperationException</tt>. <br />
  17. * <br />
  18. * The returned list will be serializable if the specified list is
  19. * serializable. Similarly, the returned list will implement
  20. * {@link RandomAccess} if the specified list does.
  21. *
  22. * @return an unmodifiable view of the measures (never null).
  23. */
  24. public Collection<Measure> getMeasures() {
  25. return Collections.unmodifiableList(measures);
  26. }
  27.  
  28. public void addMeasure(Date date, double value) {
  29. measures.add(new Measure(date, value));
  30. }
  31.  
  32. public void clearMeasures() {
  33. measures.clear();
  34. }


Nous avons spécifié que la collection n’est pas modifiable, et lorsque l’utilisateur tentera de modifier la collection sans passer par les méthodes approuvées par notre modèle une exception sera lancée.

Avatar :: Steph Un article de StephModifié 1 fois. (dernière modification le Mardi 05 Octobre 2010, 08:09 par Steph)



Source : indéterminée


Commentaires

Sélection, tri et recherche d'articles
FILTRER :
TRIER :1er critère : 2e critère :
CHERCHER : Dans les titres Dans le contenu


[Afficher les liens en fonction des critères du formulaire ci-dessus]

 

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

127 mots clés dont 1 définis manuellement (plus d'information...).

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-419
Document créé le 12/09/04 23:00, dernière modification le Jeudi 06 Février 2014, 17:30
Source du document imprimé : http:///www.gaudry.be/ast.html
St.Gaudry©07.01.02
 
l'infobrol
Nous sommes le Jeudi 14 Décembre 2017, 17:55, toutes les heures sont au format GMT+1.00 Heure, heure d'hiver