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
Article publié le 05/10/2010 08:29:53Afin 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.):
Code Java (18 lignes)
public class Meter { public Meter() { } return measures; } measures.add(new Measure(date, value)); } public void clearMeasures() { measures.clear(); }
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?
Code Java (1 ligne)
meter.getMeasures().add(new Measure(date, value));
Nous pouvons éviter ce genre de comportement de la manière suivante:
Code Java (34 lignes)
public class Meter { public Meter() { } /** * Returns an unmodifiable view of the measures (only ‹b›indexes of the * meter‹/b›). This collection is ‹b›sorted by insertion order‹/b› and not * by date; call the {@link java.util.Collections#sort(List) * Collections.sort(List)} method to sort by date. ‹br /› * This method allows modules to provide users with "read-only" access to * the measures. Query operations on the returned list "read through" to the * specified list, and attempts to modify the returned list, whether direct * or via its iterator, result in an ‹tt›UnsupportedOperationException‹/tt›. ‹br /› * ‹br /› * The returned list will be serializable if the specified list is * serializable. Similarly, the returned list will implement * {@link RandomAccess} if the specified list does. * * @return an unmodifiable view of the measures (never null). */ } measures.add(new Measure(date, value)); } public void clearMeasures() { measures.clear(); }
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.
Un article de StephModifié 1 fois. (dernière modification le 05/10/2010 09:09:44 par Steph)
Source : indéterminée
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 13/09/2004, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/ast-rf-463.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.