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

avec Java Discussion :

Existe-il un typage d'accès ?


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut Existe-il un typage d'accès ?
    Salut tout le monde,

    Je me demandais s'il existait un typage d'accès empêchant de modifier une variable dans d'autres classe ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Toto {
         access int nombre = 0;
         public Toto() {
              this.nombre = 10; // == OK !
         }
    }
     
    class Titi {
         public Titi() {
             Toto toto = new Toto();
             System.out.println(toto.nombre); // == OK !
             toto.nombre = -1; // == Error !
         }
    }
    Le problème étant que je n'en ai un peu marre de mettre des get() partout dans mon code sur du private....

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Bon je vous avoue que de passer de Javascript à Java après des années, c'est dur ! J'étais tellement habitué à nommer mes variables "spot.light.blue" que Java est devenu un casse tête lorsque j'ai voulu faire la même chose.

    Je me rend compte que ce sont des langages bien différents, et qu'un simple un simple Inner ou access devient un enfer...

    D'un autre côté la logique est plus forte du côté de java, ça permet de réfléchir plus et d'accélérer la compile ^^

    J'ai l'impression de vivre dans deux monde différents, mais je regarde la rapidité de nos pages web, je me dis que javascript ferait mieux de s'inspirer de Java avant même d'être une usine à gaz à la Angular.js ou autres frameworks qui ralentissent les pages, lorsqu'on ne comprend pas la logique même d'un objet...

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Pour ta première question, si la variable n'est jamais censée changer après qu'on lui ait donné une valeur, on peut toujours utiliser final. C'est util pour les variables public static, par exemple, ce sont des genres de constantes.

    Mais sinon, non. Que ça te plaise ou pas, Java est fondamentalement organisé pour utiliser les getters et setters, point final.
    Du coup, les outils se sont adaptés et ils le font pour nous.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Par défaut Justement je venais pour poser cette question ...
    les variables d'instances ont une visibilité private.
    Puisqu'elles ne servent qu'à instancier , nul besoin que leur visibilité soient publics.

    mais j'écris pour poser une question de convention. Pour savoir ce qui se fait en programmation Java.

    J'ai vu plusieurs tutos et j'ai déjà vu plusieurs façon de procéder.

    J'ai vu un tutoriel qui initialiser les variables tout de suite.
    J'ai vu un tuto qui initialise les variables dans un constructeur par defaut ( sans arguments) et qui déclare un deuxième constructeur avec arguments ( génération automatique) et un this.variableInstance.
    J'ai vu un tuto qui déclare deux constructeurs, un defaut et un avec arguments et des "property/getters-Setters/..." et qui initialise et définit les variables d'instances par l'appel des méthodes set.

    Laquelle dois je utiliser pour écrire correctement, puisque toutes fonctionnent ? Y a t il une convention ou une bonne pratique ? Mon Ide genere des this... mais je comprends l'appel de methode...

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Tout ça est correct et également utilisable. Tu fais ce que tu veux.

    Tu peux préférer initialiser les variables dès la construction, lorsque cela est possible et pragmatique. Cela permet de ne jamais avoir l'objet dans un état incomplet, et aussi, éventuellement de rendre la classe immutable, ce qui la rend thread-safe. Mais ce n'est pas forcément possible et pragmatique. Par exemple quand il y a beaucoup de variables on ne veut pas faire un constructeur avec 15 paramètres. Et les constructeurs avec paramètres, c'est pas le plus simple pour faire des beans compatibles avec Spring, la sérialisation automatique JSON/XML, ou Hibernate.

    Concernant l'utilisation de this.truc, ou bien de setTruc() dans le constructeur... Ça se vaut. Il y a une certaine tendance à écrire les constructeurs avant les setters et donc à utiliser this.truc. A l'inverse, dans le cas très improbable mais imaginable où les setters seraient modifiés pour faire plus que juste assigner la variable, mais aussi de la validation ou du logging par exemple, il vaut mieux toujours passer par le setter, d'où l'idée de setTruc() même dans le constructeur. C'est rarement nécessaire, mais ce n'est pas un mal non plus.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Mais sinon, non. Que ça te plaise ou pas, Java est fondamentalement organisé pour utiliser les getters et setters, point final.
    Du coup, les outils se sont adaptés et ils le font pour nous.
    Du coup, je me demandais si on pouvait conventionnellement écrire le code de cette manière ? Pour libérer les lignes de codes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public int getId() { return this.id; } 
    public String getName() { return this.name; } 
     
    public void setId(int id) { this.id = id; }
    public void setName(String name) { this.name = name; }
    Petite note : j'ai finis par retirer tous les constructeurs de mon code. Ainsi, je laisse ma Data gérer toutes les instanciations de manière indépendante et c'est mon contrôleur qui se charge de setter les liaisons.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/05/2010, 22h16
  2. [AC-2007] Avis pour la conception d'une table d'archives.
    Par eli-stein dans le forum Modélisation
    Réponses: 1
    Dernier message: 19/04/2010, 16h26
  3. Réponses: 2
    Dernier message: 16/03/2007, 12h09
  4. [Conception] Créer une table avec php
    Par freezerhm dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/10/2006, 12h15
  5. Interrogation sur la conception d'une table
    Par catoucat dans le forum Modélisation
    Réponses: 4
    Dernier message: 05/07/2006, 10h38

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