IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Classe immuable : commentaires


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut Classe immuable : commentaires
    Suite à cet article: Créer une classe immuable

    Citation Envoyé par gfx
    * La classe doit être déclarée final (dans le cas contraire, il serait possible de modifier une instance par héritage)
    On ne peut donc pas faire d'héritage entre classes immuables?
    Citation Envoyé par gfx
    * La référence à this ne doit jamais être exportée
    Je ne comprends pas la signification


    Avant je n'utilisais jamais final pour des classes immuables, je vais changer ça
    Merci

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par ®om
    Suite à cet article: Créer une classe immuable
    Citation Envoyé par gfx
    * La classe doit être déclarée final (dans le cas contraire, il serait possible de modifier une instance par héritage)
    On ne peut donc pas faire d'héritage entre classes immuables?
    Malheureusement non, une classe immuable n'est pas (ne doit pas) être dérivable.

    Citation Envoyé par ®om
    Citation Envoyé par gfx
    * La référence à this ne doit jamais être exportée
    Je ne comprends pas la signification
    Cela veut dire que tu ne dois pas avoir de méthode renvoyant this :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public final MauvaiseClasseImmuable { 
    
        // ...
    
         public MauvaiseClasseImmuable getThis() {
            return this;
        }
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par le y@m's
    Cela veut dire que tu ne dois pas avoir de méthode renvoyant this :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public final MauvaiseClasseImmuable { 
    
        // ...
    
         public MauvaiseClasseImmuable getThis() {
            return this;
        }
    }
    Pourquoi donc?

    De toute façon, si tu appelles getThis(), c'est que tu connais déjà l'objet sur lequel tu l'appliques... Pourquoi interdire cela?

    A la limite avec un final pour la méthode getThis() pour éviter de le redéfinir dans une sous-classe...

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par ®om
    On ne peut donc pas faire d'héritage entre classes immuables?
    Non, car la classe fille peut "casser" la notion d'immuabilité.

    Un exemple : cette classe qui représente un Integer Immuable (il s''agit bien sûr d'un exemple inutile car Integer est déjà immuable) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class ImmuableInteger {
     
        private final int value;
     
        public ImmuableInteger(int value) {
            this.value = value;
        }
     
        public int getValue() {
            return this.value;
        }
    }
    Elle semble tout à fait correct (pas besoin de protéger les types primitifs puisqu'ils sont copié lors de l'exportation), et nous garantit que tous les appels à getValue() renvoyent la même chose...


    Toutefois, si l'on prend cette classe fille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class IncrementInteger extends ImmuableInteger {
        private int count = 0;
     
        public IncrementInteger(int value) {
            super(value);
        }
     
        public int getValue() {
     
            return (++this.count + super.getValue() );
        }
    }
    On incrémente la valeur de l'objet à chaque fois qu'on y accède : on casse donc l'immuabilité de la classe.
    Ainsi le code suivant peut afficher deux valeur différentes selon le type exact de ii :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ImmuableInteger ii = ...
    System.out.println(ii.getValue());
    System.out.println(ii.getValue());
    Citation Envoyé par ®om
    Citation Envoyé par Gfx
    * La référence à this ne doit jamais être exportée
    Je ne comprends pas la signification
    Je n'y avais pas vraiment fait attention lorsque j'ai lu l'article... mais j'avoue ne pas très bien comprendre la raison de cela...

    a++

Discussions similaires

  1. Questions sur les classes immuables (par rapport au tutoriel)
    Par Gugelhupf dans le forum Général Java
    Réponses: 7
    Dernier message: 04/08/2013, 15h35
  2. Commentaire en tête de classe
    Par Goupo dans le forum Langage
    Réponses: 4
    Dernier message: 25/06/2008, 16h06
  3. Norme pour commentaire de fonction et de classe ?
    Par whitespirit dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/12/2007, 07h46
  4. commentaire initial des classes et fonctions
    Par goran kajfes dans le forum Général Python
    Réponses: 3
    Dernier message: 04/11/2007, 18h53
  5. Commentaires "javadoc" méthodes et classes
    Par JohnNC dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 07/02/2007, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo