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

Java Discussion :

[Débutant] problème de compréhension


Sujet :

Java

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 19
    Points
    19
    Par défaut [Débutant] problème de compréhension
    bonjour tous, voilà j'ai mon problème. Je dois compléter un code source qui doit gérer une bibliothèque. En fait, le code comprend 4 classes et une main. Je dois compléter la classe Ouvrage de cette manière:

    "Comme il n’est pas une bonne idée d’accéder directement aux variables d’instance d’une classe, votre
    premi`ere tache est d’implémenter les accesseurs de la classe Ouvrage (représentant les ouvrages contenus
    dans une bibliothèque), c’est-a-dire les méthodes qui permettent de renvoyer les valeurs contenues dans ces variables. Les signatures de ces accesseurs seront prévues dans la classe mais avec une implémentation
    “vide” (afin de pouvoir compiler le code). A vous de les impl´ementer correctement.
    Une fois que vous avez implémenté
    ces accesseurs, vous devrez implémenter les méthode affiche() sur
    la classe Ouvrage et la méthode afficheOuvrages() sur la classe Bibliothecaire qui permettent d’afficher
    les données d’un ouvrage ou, respectivement, les données de tous les ouvrages se trouvant dans une bibliothèque gérée par un bibliothécaire."

    voilà en fait je comprend pas bien le mot accesseur. Voici le code de la class Ouvrage


    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    package bisc8;
     
     
     
     
     
     
     
     
     
     
     
    import java.io.PrintStream;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
     
    /**
     * Cette classe représente un ouvrage, dont la bibliothèque peut posséder
     * plusieurs exemplaires. La différence entre un ouvrage et un exemplaire
     * est parfois utile, par exemple si un utilisateur veut réserver un livre :
     * il réservera un ouvrage et pas un exemplaire; pour l'utilisateur,
     * n'importe quel exemplaire d'un ouvrage conviendra.
     */
    public class Ouvrage {
     
    	// liste de tous les exemplaires correspondant à un ouvrage
    	private List exemplaires = new LinkedList();
     
    	// Données d'ouvrage
    	private List auteurs = new LinkedList();
    	private String titre;
    	private String date;
    	private String serie;
    	private String nombrePages;
    	private String reference;
    	private String editeur;
    	private String descriptionComplete;
     
    	/**
             * @return la référence, c'est-à-dire l'identificateur univoque 
             * de l'ouvrage.
             */
    	public String reference() {
    		return reference;
    	}
     
    	/**
             * Change la reference de l'ouvrage.
             * 
             * @param ref la nouvelle reference de l'ouvrage.
             */
    	public void changerReference(String ref) {
    		this.reference = ref;
    	}
     
    	/**
             * @return la série de l'ouvrage.
             */
    	public String serie() {
    		// méthode à implémenter (phase 1)
    		Main.erreur(this, "serie");
    		return null;
    	}
     
    	/**
             * Change la série de l'ouvrage.
             * 
             * @param serie la nouvelle série de l'ouvrage.
             */
    	public void changerSerie(String serie) {
    		this.serie = serie;
    	}
     
    	/**
             * @return l'éditeur de l'ouvrage.
             */
    	public String editeur() {
    		// méthode à implémenter (phase 1)
    		Main.erreur(this, "editeur");
    		return null;
    	}
     
    	/**
             * Change l'éditeur de l'ouvrage.
             * 
             * @param editeur le nouvel éditeur de l'ouvrage.
             */
    	public void changerEditeur(String editeur) {
    		this.editeur = editeur;
    	}
     
    	/**
             * @return un itérateur sur l'ensemble de tous les auteurs de l'ouvrage.
             */
    	public Iterator auteurs() {
    		// méthode à implémenter (phase 1)
    		Main.erreur(this, "auteurs");
    		return null;
    	}
     
    	/**
             * Ajoute un auteur à l'ouvrage.
             * 
             * @param nom le nom de l'auteur à ajouter.
             */
    	public void ajouterAuteur(String nom) {
    		auteurs.add(nom);
    	}
     
    	/**
             * @return le titre de l'ouvrage.
             */
    	public String titre() {
    		// méthode à implémenter (phase 1)
    		Main.erreur(this, "titre");
    		return null;
    	}
     
    	/**
             * Change le titre de l'ouvrage.
             * 
             * @param titre le nouveau titre de l'ouvrage.
             */
    	public void changerTitre(String titre) {
    		this.titre = titre;
    	}
     
    	/**
             * @return la date de publication de l'ouvrage.
             */
    	public String datePublication() {
    		// méthode à implémenter (phase 1)
    		Main.erreur(this, "datePublication");
    		return null;
    	}
     
    	/**
             * Change la date de publication de l'ouvrage.
             * 
             * @param la nouvelle date de publication de l'ouvrage.
             */
    	public void changerDatePub(String date) {
    		this.date = date;
    	}
     
    	/**
             * @return le nombre de pages de l'ouvrage
             */
    	public String nombrePages() {
    		// méthode à implémenter (phase 1)
    		Main.erreur(this, "nombrePages");
    		return null;
    	}
     
    	/**
             * Change le nombre de pages de l'ouvrage.
             * 
             * @param le nouveau nombre de pages de l'ouvrage.
             */
    	public void changerNombrePages(String nombrePages) {
    		this.nombrePages = nombrePages;
    	}
     
    	/**
             * Compare une instance d'Ouvrage avec un autre objet donné
             * et retourne vrai si le objet est un Ouvrage avec la même
             * reference.
             * 
             * @see méthode Ouvrage.reference()
             */
    	public boolean equals(Object obj) {
    		return
    			obj != null &&
    			obj instanceof Ouvrage &&
    			this.reference() != null &&
    			this.reference().equals(((Ouvrage)obj).reference());
    	}
     
    	/**
             * Quand on réecrit la méthode Object.equals(), il faut réecrire
             * Object.hashCode() pour respecter le contrait entre ces deux méthodes.
             * 
             * @see méthode Object.hashCode() 
             */
    	public int hashCode() {
    		return (null == reference() ? 0 : reference().hashCode());
    	}
     
    	/**
             * Affiche une répresentation texte de l'ouvrage.
             * 
             * @param le canal de sortie où la répresentation sera affichée
             *   (p.e. System.out)
             */
    	public void affiche(PrintStream out) {
    		// méthode à implémenter (phase 1)
    		Main.erreur(this, "affiche");
    	}
     
    	/**
             * Ajoute des nouveaux exemplaires à l'ouvrage.
             * 
             * @param quantité quantité d'exemplaires à ajouter.
             */
    	public void ajouterExemplaires(int quantite) {
    		for(; quantite > 0; quantite--)
    			exemplaires.add(new Exemplaire(this));
    	}
     
    	/**
             * Encode une réservation pour le client passé en paramètre.
             * Si le client possède déjà une réserve, la méthode ne fait rien et renvoie
             * vrai.
             * Si un autre client a déjà réservé l'ouvrage, le client donné ne peut
             * pas faire une réserve, et la méthode renvoie faux.
             * On peut réserver un ouvrage seulement s'il n'y a plus d'exemplaires
             * disponibles.
             * 
             * @return Vrai si la méthode réussit a placer une réserve pour le client, ou
             * si le client possédait déjà une réserve. Sinon, faux. 
             */
    	public boolean reservePour(Emprunteur client) {
    		// méthode à implémenter (phase 3)
    		Main.erreur(this, "reservePour");
    		return false;
    	}
     
    	/**
             * @return un itérateur sur l'ensemble de tous les exemplaires de cet ouvrage.
             */
    	public Iterator exemplaires() {
    		return exemplaires.iterator();
    	}
     
    	/**
             * @return le nombre d'exemplaires de cet ouvrage.
             */
    	public int nombreExemplaires() {
    		return exemplaires.size();
    	}
     
    	/**
             * @return un itérateur sur l'ensemble de tous les exemplaires non empruntés à ce moment.
             */
    	public Iterator exemplairesDisponibles() {
    		// méthode à implémenter (phase 2)
    		Main.erreur(this, "exemplairesDisponibles");
    		return null;
    	}
     
    	/**
             * Renvoie un exemplaire pour que le client donnée l'emprunte, tenant
             * compte des réservations placées sur cet ouvrage.
             *
             * S'il n'y a pas des exemplaires disponibles, la méthode renvoie null. Ceci
             * inclut le cas où il y a des exemplaires mais il y a une réservation pour
             * un autre client.
             * 
             * Si le client possède une réservation, il est possible de lui donner un
             * exemplaire disponible, et la réservation sur l'ouvrage est retiré.
             * 
             * Si l'ouvrage n'a pas de réservation à ce moment, la méthode renvoie un
             * exemplaire disponible quelconque.
             * 
             * @return Un exemplaire à emprunter par le client passé en parametre, ou null
             * s'il n'y a pas aucun exemplaire disponible pour ce client à ce moment.
             * 
             * @see Ouvrage.reservePour()
             */
    	public Exemplaire exemplairePour(Emprunteur client) {
    		// méthode à implémenter (phase 2 + 3)
    		Main.erreur(this, "exemplairePour");
    		return null;
    	}
     
    	/**
             * @return un itérateur sur l'ensemble de tous les exemplaires empruntés à ce moment.
             */
    	public Iterator exemplairesEmpruntes() {
    		// méthode à implémenter (phase 2)
    		Main.erreur(this, "exemplairesEmpruntes");
    		return null;
    	}
    }
    en fait ce qui m'intéresse moi visiblement c'est les "implémenter phase1 "

    si vous avez une idée merci de m'aider

  2. #2
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Salut

    Je n'ai pas regardé le code (trop long ) mais qu'est-ce qui te pose vraiment problème?

    Une méthode accesseur c'est une méthode qui permet d'accéder à une variable privée.
    Donc si dans une classe, tu as une variable privée :
    Toute autre classe que celle de cette variable n'y a pas accès.
    Il faut donc utiliser une méthode accesseur pour récupérer la valeur ou lui affecter une valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int getVar(){
    return this.var ; 
    }
     
    // et
     
    void setVar(int var){
    this.var = var ;
    }
    getVar et setVar sont les méthodes accesseurs. Pour accéder à la variable 'var', tu dois passer par elles.

    Nas'

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Nasky
    Salut

    Je n'ai pas regardé le code (trop long ) mais qu'est-ce qui te pose vraiment problème?

    Une méthode accesseur c'est une méthode qui permet d'accéder à une variable privée.
    Donc si dans une classe, tu as une variable privée :
    Toute autre classe que celle de cette variable n'y a pas accès.
    Il faut donc utiliser une méthode accesseur pour récupérer la valeur ou lui affecter une valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int getVar(){
    return this.var ; 
    }
     
    // et
     
    void setVar(int var){
    this.var = var ;
    }
    getVar et setVar sont les méthodes accesseurs. Pour accéder à la variable 'var', tu dois passer par elles.

    Nas'
    En fait, je tape this. devant la nom de la variable et c'est bon... ben c'est tout con alors, je vois pas l'utilité du truc...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    this.var
    demande la variable var a this cad à "l'objet courant"
    c'est l'unique facon de differncier cette variable de la classe avec la varaible var introduite par l'attribut. Lorsqu'il ne peut pas y avoir confusion, var tout court suffit.

  5. #5
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Nasky vient de très bien expliquer ce que sont les accesseurs.

    Ce qui t'interresses toi et ce qui t'es demandé, c'est de completer tous les accesseurs qui pour l'instant renvoient "null" tandis que le retour est typé.
    Il faut que tu implémentes de manière à ce qu'à l'appel d'une methode censée retourner une String (le nombre de page par exemple), la methode retourne bien la bonne valeur.
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Points : 11 101
    Points
    11 101
    Par défaut
    Citation Envoyé par Sylvester
    En fait, je tape this. devant la nom de la variable et c'est bon... ben c'est tout con alors, je vois pas l'utilité du truc...

    Regarde de plus près la méthode changeNombrePages(String nombrePages)
    Actuellement, elle ne fait que le truc tout bête this. C'est vrai.
    Mais demain, elle pourrait faire des choses plus poussées, comme s'assurer que c'est bien un nombre qui est passé et non des caractères. Et s'assurer que le nombre est bien positif.
    Et puis finalement, on pourrait décider qu'en interne, on aurait un int nombrePages. Il faudra alors faire une conversion String -> int.

    Oui les accesseurs présentés dans l'exemple sont très simples. Mais faut bien commencé par quelque chose. Je suppose que les exemples se compliqueront au fur et à mesure.

    Bonne chance
    Vincent Brabant

    Ne pas me contacter par MP ni par mail pour des questions techniques. Ma liste d'amis restera vide.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  7. #7
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    D'ailleurs, si la variable est déclarée en private, il est illogique de faire une methode setVar en public, autant mettre la variable en public...
    Enfin moi c'est ce qu'on m'a appris.

    mavina
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    le but etant de pouvoir controler l'acces, on ne peux fournir qu'un control d'acces a l'aide de function. En mettant ta variable public n'importe quel partie du code peut la modifier et de plus si tu change ta maniere de stocker les informations dans la classe tu est obligé de changer tout ton code, avec les fonctions acceseurs/mutateurs, ceux utilisant la classes ne savent pas comment sont gérées tes données et donc c'est beaucoup plus simple...

  9. #9
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Question à deux balles: Ce n'est pas le principe des Beans ?

  10. #10
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par TabrisLeFol
    le but etant de pouvoir controler l'acces, on ne peux fournir qu'un control d'acces a l'aide de function. En mettant ta variable public n'importe quel partie du code peut la modifier et de plus si tu change ta maniere de stocker les informations dans la classe tu est obligé de changer tout ton code, avec les fonctions acceseurs/mutateurs, ceux utilisant la classes ne savent pas comment sont gérées tes données et donc c'est beaucoup plus simple...
    ce que je veux dire, c'est que mettre un accesseur setVar en public, c'est pareil dans le fond que mettre une variable en public. Aucun droit n'est modifié, puisque n'importe quelle partie de ton code pourra acceder a cette procedure, et donc acceder au changement de variable.
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  11. #11
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut
    faux malvina, car si ta variable est public, n'importe qui peut mettre n'importe quoi dan ta variable. sinon, i faut passer la barrière du setvariable(..) qui peut faire des verifications comme explicité plus haut.

    par contre c'est vrai que si ta methode setvariable fait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public setVariable(String s) {
    this.variable = s;
    }
    alors la effectivement ca ne change rien ..

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    NON!!!
    Je pensais que j'étais assez claire..
    Les fonctions permettent de controller, par exemple dans une
    tu peux avoir une fonction ayant pour definition
    mais que l'attribut de la class soit
    ou
    Le deuxieme peut apraitre inutile mais par exemple avec cela la personne pourra "vieillir" son age passant de 0,0 a 0,1... à 0,9.. 1... Mais le comportement vu de l'exterieur ne change pas...
    Le code que tu a ecris avant de faire cette modification ne sera donc pas à changer (dans l'absolu il peut comme meme avoir des changmements si tu modifie de beaucoup la classe mais ils seront plus faciles à réaliser).
    Le code est purement independant de l'implementation interne des classes et de leur gestion des données : cela ne change rien pour le programmeur utilisant la classe...

    Au niveau de la fonction qui va modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void SetAge(int newAge) // il n'y a pas de jeu de mot
    on peux effectuer un controle :
    on peut a l'aide de cette fonction mettre a jour l'attribut de la classe si et seulement l'age entré est compris entre 0 et 100... (grace a des structures conditionnelles du genre if-else )

  13. #13
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par pierre.cellard
    par contre c'est vrai que si ta methode setvariable fait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public setVariable(String s) {
    this.variable = s;
    }
    alors la effectivement ca ne change rien ..
    C'est ce qu'il fait dans son code...
    C'est pour ca que je réagis, sinon je me serais tut ^^
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    De tout manièere il faut mieux mettre des acceseurs/mutateurs meme s'ils paraissent inutiles car comme je le disais si un jour du veux modifier ta classe, il faudra aussi que tu change ton code... Mettre des attributs variable d'instance en public est une mauvaise habitude...

  15. #15
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut
    d'accord, mais son code peut etre amené a évoluer et en ayant deja fait ses accesseurs public et ses variables private, il gagnera du temps plus tard.

  16. #16
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Vous parlez de mon exemple? Si oui, ce n'était que l'exemple le plus simple que je pouvais faire. Evidemment qu'il est inutile pour le setVar()...

    Nas'

  17. #17
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    bon je veux pas faire mon noob mais je ne vois pas trop quoi faire, on m'a montré une solution et visiblement ils ont simplement mis un this. et c'est tout...par contre on déclare d'abord les variables internes à la classe ouvrage puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        public void changerTitre(String titre) {
            this.titre = titre;
    alors qu'appelle t on la méthode de l'accesseur : le this. ou alors les méthodes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void setTitre(String titre)
     
    public String getTitre()
     
    public void setAuteur(String auteur)
     
    public String getAuteur()
    la premiere tache est d’implementer les accesseurs de la classe Ouvrage (representant les ouvrages contenus
    dans une bibliotheque), c’est-a-dire les methodes qui permettent de renvoyer les valeurs contenues dans ces variables. Les signatures de ces accesseurs seront prevues dans la classe mais avec une implementation
    “vide” (afin de pouvoir compiler le code). A vous de les imp´ementer correctement.
    donc je ne vois pas quoi faire... pourriez vous m'éclairer parce que là je seche
    edit: je sais je vous embete mais tout ce que vous m'aver appris pour le moment je l'ai retenu

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Tu as déjà toutes les réponses mais je me permet de rajouter un peu de litterature sur les accesseurs et this:

    La première est trouvée sur http://www.crescenzo.nom.fr/CMJava/002-ConceptsPOO.html.

    Définition : Un accesseur est une méthode qui permet d'accéder en lecture ou en écriture à la valeur d'un attribut.
    * Par convention, le rôle des accesseurs se limite à rendre, pour ceux en lecture, ou à modifier, pour ceux en écriture, la valeur de l'attribut concerné, et rien de plus.
    * Remarque : Les accesseurs sont des méthodes comme les autres en Java. On les distingue cependant assez aisément car, par habitude, ils portent le nom de get ou set suivi du nom de l'attribut concerné. Par exemple, l'accesseur en lecture de l'attribut prix se nomme généralement getPrix, celui en écriture setPrix.
    La seconde est issue du cours Java de J.M. Doudoux : http://jmdoudoux.developpez.com/java/?page=chapitre_4_programmation_oriente_objet#L4.5.8

    concernant this :
    Cette variable sert à référencer dans une méthode l'instance de l'objet en cours d'utilisation. this est un objet qui est égale à l'instance de l'objet dans lequel il est utilisé.
    This est aussi utilisé quand l'objet doit appeler une méthode en se passant lui même en paramètre de l'appel.
    Et pour les accesseurs
    L'encapsulation permet de sécuriser l'accès aux données d'une classe. Ainsi, les données déclarées private à l'intérieur d'une classe ne peuvent être accédées et modifiées que par des méthodes définies dans la même classe. Si une autre classe veut accéder aux données de la classe, l'opération n'est possible que par l'intermédiaire d'une méthode de la classe prévue à cet effet. Ces appels de méthodes sont appelés « échanges de message ».

    Un accesseur est une méthode publique qui donne l'accès à une variable d'instance privée. Pour une variable d'instance, il peut ne pas y avoir d'accesseur, un seul accesseur en lecture ou un accesseur en lecture et un autre en écriture. Par convention, les accesseurs en lecture commencent par get et les accesseurs en écriture commencent par set.

  19. #19
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    en gros, quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setVar(String var)
    {
       this.var=var;
    }
    on met this puisque ta variable passée en parametre porte le meme nom que celle que tu modifie...
    C'est exactement la meme chose que faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setVar(String toto)
    {
       var=toto;
    }
    ^^
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/02/2014, 11h29
  2. Débutant : Problème de compréhension d'un script
    Par developman dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 12/04/2011, 22h20
  3. [Débutant] Problème compréhension code XAML
    Par JolyLoic dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 26/08/2009, 17h00
  4. [Débutant] Problème de compréhension?
    Par k o D dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 25/10/2007, 08h48
  5. [Débutant] Problème de compréhension
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2006, 13h06

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