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 :

ENCAPSULATION : Objet entier en lecture seule


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 24
    Par défaut ENCAPSULATION : Objet entier en lecture seule
    Bonjour à tous,

    Ce post vient à la base d'une question que je me suis posée sur C#, mais j'aimerais savoir ce qu'il en est en Java :

    Je cherche à savoir s'il existe une façon pour qu'un objet (ainsi que tout ce qu'il contient ou référence) soit accessible depuis une autre classe mais uniquement en lecture seule.

    Je m'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
            class Class2
            {
                    Classe1 instance_1 = new Classe1();
     
                    void test()
                    {//Objectif : Ici le code du type :
                            instance_1.Doit_etre_en_lecture.CaseSensitive = false; //ne doit pas fonctionner car on essaie de modifier la valeur d'une propriété ou d'un objet "descendant" de l'objet Doit_etre_en_lecture;
                            bool flag1 = instance_1.Doit_etre_en_lecture.CaseSensitive; // Doit fonctionner car dans ce cas on essaie pas d'écrire sur le dataset "Doit_etre_en_lecture" mais de lire.                
                    }
            }
     
    class Classe1
            {
                    public DataSet Doit_etre_en_lecture = new DataSet();
     
            }
    Bien sur je pourrais faire pour l'intégralité des propriétés de l'objet concerné des propriétés au sein de Classe1 accessible uniquement avec Get{} sans Set{}, ou utiliser la méthode Dataset.Copy mais je pense que vous aurez compris que ce n'est pas ce que je cherche.

    En un mot en termes d'encapsulation mon but est de pouvoir me dire "Le code de la Classe2 voit un objet donné de l'instance de la classe1" mais il n'est pas en mesure d'agir dessus, ni sur les tables, ni sur les noms des colonnes des tables, ni sur quoi que ce soit. Il permet de lire les objets du dataset, mais pas de les modifier."

    Merci à tous et bonne soirée,
    Vincent.

  2. #2
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bien sur je pourrais faire pour l'intégralité des propriétés de l'objet concerné des propriétés au sein de Classe1 accessible uniquement avec Get{} sans Set{}, ou utiliser la méthode Dataset.Copy mais je pense que vous aurez compris que ce n'est pas ce que je cherche.
    Ben justement ça répond exactement à ce que tu demandes:
    Il suffit de mettre tous tes attributs en "private" au lieu de public.
    Ensuite tu définie des fonctions qui seront, elles, publiques, et feront ce que tu veux.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Classe1
            {
                    //En "private", seule la classe courante peut accéder à la variable.
                    private DataSet Doit_etre_en_lecture = new DataSet();
     
                    public String lectureSeule(){
                          // Methode qui ne fait qui lire dans le dataset
                    }
     
            }

  3. #3
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Par défaut
    tu peux déclarer tes données membres "final" sinon... La modification de celles-ci ne sera pas autorisée.

  4. #4
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    Citation Envoyé par Kanithael Voir le message
    tu peux déclarer tes données membres "final" sinon... La modification de celles-ci ne sera pas autorisée.
    "final" empêche juste de nouvelles affectation. Par contre, ca n'empèche pas de modifier le contenu de tes données memble.

    Par exemple si tu as le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public final List maListe = new ArrayList();
    Tu pourras pas faire de nouvelle affectation sur "maListe" mais tu pourras rajouter ou enlever des éléments de ta liste...

    Edit: Ca n'a pas vraiment d'intéret pour une liste mais pour un objet plus complexe le problème est le même.

  5. #5
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Par défaut
    Totalement exact... C'est stupide de ma part, je pensais à des données membres de type primitif.

    Dans ce cas, encapsulation !

  6. #6
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par Mobius Voir le message
    "final" empêche juste de nouvelles affectation. Par contre, ca n'empèche pas de modifier le contenu de tes données memble.
    Sauf ces données membres en question sont des instances de classe immuables.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Citation Envoyé par Deadpool Voir le message
    Sauf ces données membres en question sont des instances de classe immuables.
    ?

    Oui, mais ça, ce n'est pas dû à final.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/11/2012, 10h01
  2. Encapsulation : Objet en lecture seule.
    Par viniboy dans le forum C#
    Réponses: 3
    Dernier message: 14/11/2009, 00h41
  3. Réponses: 6
    Dernier message: 26/05/2009, 11h30
  4. Objet java en "Lecture seule"
    Par JamesP dans le forum Langage
    Réponses: 23
    Dernier message: 05/09/2007, 14h56
  5. Réponses: 2
    Dernier message: 30/03/2007, 21h11

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