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 :

[debutant] creation de classe


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut [debutant] creation de classe
    bonjour,

    J'ai créé une classe qui me permet d'ouvrir un fichier de configuration et d'en récupérer les valeurs. Voici mon code :
    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
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
     
     
    public class ConfigFile extends Object {
     
    	private File pIniFile;
    	private File pHexFileSrc;
    	private File pHexFileOut;
     
    	private Boolean pDebugMode;
    	private File pMchFileOut1;
    	private File pMchFileOut2;
     
    	private String pModuleName;
     
    	private File pBexFileSrc;
     
     
     
     
    	// constructeur 1
    	public ConfigFile(){
    		super(); // appel le constructuer de la classe héritée
     
    		pIniFile = new File("config.ini");
    		initVar();
    		run();
    	}
     
    	// constructeur 2
    	public ConfigFile(File file){
    		super(); // appel le constructuer de la classe héritée
     
    		pIniFile = file;
    		initVar();
    		run();
    	}
     
    	// initialisation avec les valeurs par défaut
    	private void initVar(){
    		pHexFileSrc = (new File("data\\in.hex"));
    		pHexFileOut = new File("data\\out.hex");
     
    		pDebugMode = false;
    		pMchFileOut1 = new File("data\\out1.MCH");
    		pMchFileOut2 = new File("data\\out2.MCH");
     
    		pModuleName = "192.168.1.1";
     
    		pBexFileSrc = new File("data\\in.bex");
    	}
     
     
     
    	// *******************************************	
    	// lancement du traitement
    	private void run(){
     
    		try {
    			Scanner scn = new Scanner (pIniFile); // ouverture du fichier
     
    			// lecture ligne par ligne du fichier
    			while (scn.hasNextLine()){
    				String line = scn.nextLine(); // récupère la ligne
     
    				line = line.replace('	',' '); // remplace tabulation par espace
    				line = line.trim(); // suppression des espaces en debut et fin de chaine
     
     
    				if (line.length() !=0){ // vérifie que la ligne n'est pas vide
     
     
    					// test si la chaine commence par une lettre en majuscule
    					// => si ce n'est pas le cas, la chaine ne sera pas traitée
    					if(('A' <= line.charAt(0)) && (line.charAt(0) <= 'Z')){
     
    						String[] tabStr = line.split("=");
     
    						// vérifier que le split a renvoyé deux chaines
    						// => si le nombre n'est pas bon, on ne traite pas la chaine
    						if (tabStr.length == 2){
     
    							//System.out.println("ConfigFile : commande trouvée");	
     
    							String strTmp = tabStr[0].trim();
     
    							if(strTmp.equals("HEXFILE_SOURCE")){
    								strTmp = tabStr[1].trim();
    								pHexFileSrc = (new File("data\\" + strTmp));
     
    							} else if(strTmp.equals("HEXFILE_OUT")){
    								strTmp = tabStr[1].trim();
    								pHexFileOut = new File("data\\" + strTmp);
     
    							} else if(strTmp.equals("DEBUG_MODE")){
    								strTmp = tabStr[1].trim();
     
    								if (strTmp.toUpperCase().equals("TRUE")){
    									pDebugMode = true;	
    								} else {
    									pDebugMode = false;								
    								}
     
    							} else if(strTmp.equals("MCH_FILE1_OUT")){
    								strTmp = tabStr[1].trim();
    								pMchFileOut1 = new File("data\\" + strTmp);
     
    							} else if(strTmp.equals("MCH_FILE2_OUT")){	
    								strTmp = tabStr[1].trim();
    								pMchFileOut2 = new File("data\\" + strTmp);
     
    							} else if(strTmp.equals("MODULE_NAME")){
    								strTmp = tabStr[1].trim();
    								pModuleName = strTmp;
     
    							} else if(strTmp.equals("BEXFILE_SOURCE")){						
    								strTmp = tabStr[1].trim();
    								pBexFileSrc = new File("data\\" + strTmp);
     
    							}
    						}
    					}
    				}
     
    			}
     
    			scn.close(); // fermeture du fichier
     
    		} catch (FileNotFoundException e){
    			e.printStackTrace();
    		}	
    	}
     
     
    	// *******************************************	
    	// Définition des ascensseurs
     
    	/**
             * @return IniFile
             */
    	public File getIniFile() {
    		return pIniFile;
    	}
     
     
    	/**
             * @return HexFileSrc
             */
    	public File getHexFileSrc() {
    		return pHexFileSrc;
    	}
     
     
    	/**
             * @return HexFileOut
             */
    	public File getHexFileOut() {
    		return pHexFileOut;
    	}	
     
     
    	/**
             * @return DebugMode
             */
    	public Boolean getDebugMode() {
    		return pDebugMode;
    	}
     
     
    	/**
             * @return MchFileOut1
             */
    	public File getMchFileOut1() {
    		return pMchFileOut1;
    	}	
     
     
    	/**
             * @return MchFileOut2
             */
    	public File getMchFileOut2() {
    		return pMchFileOut2;
    	}	
     
     
    	/**
             * @return BexFileSrc
             */
    	public String getModuleName() {
    		return pModuleName;
    	}
     
     
    	/**
             * @return BexFileSrc
             */
    	public File getBexFileSrc() {
    		return pBexFileSrc;
    	}	
     
     
    	// *******************************************	
    	// toString
    	// => pour le debug
    	public String toString(){
     
    		String strTmp;
     
    		strTmp = "IniFile : " + pIniFile.toString();
    		strTmp += "\r\n" + "HexFileSrc : " + pHexFileSrc.toString();	
    		strTmp += "\r\n" + "HexFileOut : " + pHexFileOut.toString();
    		strTmp += "\r\n" + "HexFileOut : " + pHexFileOut.toString();
     
    		strTmp += "\r\n" + "DebugMode : ";
    		if (pDebugMode == true){
    			strTmp += "true";	
    		} else {
    			strTmp += "false";				
    		}
     
    		strTmp += "\r\n" + "MchFileOut1 : " + pMchFileOut1.toString();	
    		strTmp += "\r\n" + "MchFileOut2 : " + pMchFileOut2.toString();
     
    		strTmp += "\r\n" + "ModuleName : " + pModuleName;
     
    		strTmp += "\r\n" + "BexFileSrc : " + pBexFileSrc.toString();
     
    		return strTmp;
    	}
    }
    => Mon code fonctionne mais étant débutant en Java, j'aurais vouloir savoir si je n'avais pas fait de boulette (pour ne pas prendre de mauvaises habitudes dès le départ) : est-ce bon ?


    Quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ConfigFile cfg = new ConfigFile();
    System.out.println(cfg);
    => comment fait le programme (2ieme ligne) pour savoir que c'est la methode .toString qu'il faut appeler ?


    merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Quelques remarques sur le code :
    • pour le constructeur sans paramètres, tu as le même code que celui avec un paramètres, seule la valeur pour le fichier change, donc tu peux simplifier en faisant ainsi :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
       
              // constructeur 1
      	public ConfigFile(){
      		this(new File("config.ini")); // appel le constructuer avec paramètre
      	}
       
      	// constructeur 2
      	public ConfigFile(File file){
      		super(); // appel le constructuer de la classe héritée
       
      		pIniFile = file;
      		initVar();
      		run();
      	}
      Ce qui réduit le code et évit de devoir modifier à plusieurs endroits en cas de changements
    • dans ta méthode toString(), il vaut mieux utiliser la classe StringBuilder, ce qui donne quelque chose comme
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
       
              public String toString(){
       
      		StringBuilder strTmp = new StringBuilder();
       
      		strTmp.append("IniFile : ").append(pIniFile.toString());
       
                      ....
       
      		return strTmp.toString();
      	}

    Je n'ai pas vraiment lu le traitement donc je ne peux pas le commenter

    Pour ce qui est de la méthode toString, c'est facile : cette méthode est définie dans la classe Object dont héritent toutes les classes Java. Donc la méthode println() n'a qu'à appeler cette méthode sur l'objet car elle est toujours présente (par défaut elle renvoie le type et le hash de l'instance si elle n'est pas redéfinie)

    A plus

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    ok merci pour les infos

    Pour ce qui est de la méthode toString, c'est facile : cette méthode est définie dans la classe Object dont héritent toutes les classes Java.
    => donc ça veut dire que ça ne sert a rien de mettre "extends Object" a ma classe, non ?

    la commande super(); dans le constructeur, c'est vraiment utile ? ça fait quoi exactement avec la classe object ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par boboss123 Voir le message
    ok merci pour les infos


    => donc ça veut dire que ça ne sert a rien de mettre "extends Object" a ma classe, non ?

    la commande super(); dans le constructeur, c'est vraiment utile ? ça fait quoi exactement avec la classe object ?
    Oui je n'avais pas vu, mais les "extends Object" est inutile car implicite.

    Le "super()" n'est pas non plus explicitement utile, ça appelle le constructeur sans paramètre de la classe parente (dans ton cas Object), ce qui est ajouté implicitement par le compilateur si tu ne fais aucun appel à un constructeur de la classe parente

  5. #5
    Membre expérimenté

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Par défaut
    => donc ça veut dire que ça ne sert a rien de mettre "extends Object" a ma classe, non ?
    Non, ce n'est pas utile

    la commande super(); dans le constructeur, c'est vraiment utile ? ça fait quoi exactement avec la classe object ?
    Cette méthode permet d'appeler le constructeur de la classe mère (dans le cas ou tu hérites d'une classe et que des traitements sont fait dans le constructeur de la classe mère),
    le constructeur de Object ne fait aucun traitement, donc ce n'est pas utile pour ta classe.

    Même heure mais trop tard

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    oki, merci beaucoup

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

Discussions similaires

  1. [debutant]creation Inteface web?
    Par ould dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 14/12/2004, 12h30
  2. [jbuilder 9] [debutant] creation d'un executable
    Par matN59 dans le forum JBuilder
    Réponses: 2
    Dernier message: 18/11/2004, 19h16
  3. [debutant][Classpath][Linux] Classe non trouvée
    Par oghma777 dans le forum Général Java
    Réponses: 5
    Dernier message: 15/10/2004, 21h26
  4. [Eclipse3.0][Debutant]Pas de .class généré
    Par willowII dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 10/08/2004, 17h07
  5. [debutant] Creation de TextField - champ texte
    Par wkd dans le forum Composants
    Réponses: 3
    Dernier message: 04/06/2004, 14h00

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