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

JDBC Java Discussion :

classe MyConnection statique


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut classe MyConnection statique
    bonjour,

    je voudrais créer une classe statique MyConnection, plutôt que de me trimbaler des instances d'une classe dynamique dans tous mes objets.
    Le fait est que cette classe doit neanmoins rester paramétrable (port,ip,db,user,password).
    Que la connection, ainsi créer doit rester active de sorte a ne pas avoir a se reconnecter tout le temps.

    La question : est ce que c'est cohérent, possible de concevoir les choses ainsi.

    Merci d'avance pour vos réponses.

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    pourquoi ne pas utiliser un singleton ?

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    c'est a dire ?

    je vais chercher dece côté là.

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par mitje
    c'est a dire ?

    je vais chercher dece côté là.
    Un singleton permet de restreindre les instances à une seule et unique et ainsi la meme pour tout le monde.

    Si tu veut faire une classe singleton, il faut déclarer ton constructeur private et faire une méthode statique getInstance() qui te permettra de renvoyer une unique instance de la classe.

    Ca peut donner quelque chose du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class TaClasse {<div style="margin-left:40px">TaClasse instance = null;
     
    private TaClasse{
     
    }
     
    public static TaClasse getInstance(){<div style="margin-left:40px">
    if(instance == null){<div style="margin-left:40px">instance = new TaClasse();</div>}
     return instance;</div>}</div>}

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    plus précisément :

    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
    public class TaClasse {
      private static TaClasse instance = null;
     
      private TaClasse(){
    
      }
     
      public static TaClasse getInstance(){
        if(instance == null){
          instance = new TaClasse();
        }
        return instance;
      }
    }

  6. #6
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    Voici le code de ce que j'ai fait, si vous avez des suggestions, des critiques (même s'évère), surtout n'hesitez pas, allez y de bon coeur.
    Je vous laisse éventuelement répondre et mettrais le tag resolu ensuite.
    Merci à tous pour vos réponses.

    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
    /*
     * MyDBConnection.java
     *
     * Created on 7 mars 2006, 16:18
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package guitp;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.swing.JFrame;
     
    /**
     *
     * @author lole
     */
    public class MyDBConnection {
     
        /** Creates a new instance of MyDBConnection */
        private static Connection connection;
        private static ConnectDBDialog dbd;
        private static String db;
        private static String host;
        private static String port;
        private static String user;
        private static String password;
     
        /** Creates a new instance of MyDBConnection */
        private MyDBConnection() {} 
        /*private MyDBConnection(String db, String host, String port, String user, String password) {
            setParams(db, host, port, user, password); 
        }*/
     
        private static Connection init(){
     
     
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (Exception e){System.out.println(e);}
     
            try{
     
                //System.out.println("Connection complete");
                return DriverManager.getConnection(
                        "jdbc:mysql://" + host + ":" +port +"/" + db ,user , password
                        );
            } catch(SQLException sqle){
     
                System.out.println("Failed to get connection");
                System.out.println("Exception SQL : ");
                while (sqle != null) {
                    String message = sqle.getMessage();
                    String sqlState = sqle.getSQLState();
                    int errorCode = sqle.getErrorCode();
                    System.out.println("Message = "+message);
                    System.out.println("SQLState = "+sqlState);
                    System.out.println("ErrorCode = "+errorCode);
                    //sqle.printStackTrace();
                    sqle = sqle.getNextException();
                }
     
                return null;
     
     
            }
        }
     
        public static void showConnectDialog(MainFrame fr) {
            dbd = new ConnectDBDialog(fr);
        }
     
        public static void setParams(String dbs, String h, String p, String u, String pwd) {
     
            db = dbs;
            host = h;
            port = p; 
            user = u;
            password = pwd;
     
        }
     
        public static Connection getConnection(){
            if (connection == null) {
                connection = init(); 
            }
            return connection;
        }
     
     
        public static void destroy(){
     
            if(connection !=null){
     
                try{
                    connection.close();
                } catch(Exception e){}
     
     
            }
        }
     
        public static boolean isActive() {
     
            if(connection !=null)
                return true;
            else
                return false;
     
        }
     
     
    }

  7. #7
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par dude
    plus précisément :

    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
    public class TaClasse {
      private static TaClasse instance = null;
     
      private TaClasse(){
    
      }
     
      public static TaClasse getInstance(){
        if(instance == null){
          instance = new TaClasse();
        }
        return instance;
      }
    }
    En effet, j'avais oublié

    Pour ton code, ca m'a l'air pas mal, mais c'est dommage que tu aies toutes ces méthodes statiques, mais ca a l'air d'être assez cohérent.

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    Liste non exhaustive :

    1 - Tous tes attributs et méthodes sont statiques. Ce n'est pas la peine d'utiliser des langages objets pour faire ca...

    2 - Si un jour ton appli doit gérer 2 connexions avec 2 bases différentes, comment fais-tu ? Tu écris une classe MyDBConnectionBis ?

    3 - La méthode setParams(String dbs, String h, String p, String u, String pwd) n'a aucun intérêt, et est même "génante", pour 2 raisons :
    - Ces paramètres ne sont utilisés que dans la méthode init(); il vaudrait mieux avoir init(String dbs, String h, String p, String u, String pwd)
    - De plus, ces attributs sont indispensables au bon fonctionnement de ta classe; autant les spécifier dans le constructeur.
    4 - Plutôt que d'écrire une méthode destroy(), surcharge la méthode Object.finalize() afin d'être certein que la connection sera toujours libérée.



    Et pour finir.... plutôt que de réinventer la roue, pourquoi n'utilises-tu pas un pool de connexion tel que commons-dbcp ?

  9. #9
    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 : 38
    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 dude
    Et pour finir.... plutôt que de réinventer la roue, pourquoi n'utilises-tu pas un pool de connexion tel que commons-dbcp ?
    Salut,

    On commence toujours par réinventer la roue... Comment utiliser un truc que tu ne connais pas toi même ?
    Eh puis qui sait, un jour c'est ptet toi ou moi ou lui qui inventeront la nouvelle roue.

    Fred
    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]

  10. #10
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par dude
    Liste non exhaustive :

    1 - Tous tes attributs et méthodes sont statiques. Ce n'est pas la peine d'utiliser des langages objets pour faire ca...
    Pourquoi ces facilités sont elles présentes dans ce langage alors ?

    Citation Envoyé par dude
    2 - Si un jour ton appli doit gérer 2 connexions avec 2 bases différentes, comment fais-tu ? Tu écris une classe MyDBConnectionBis ?
    non, mais selon le cahier des charges et le modèle que j'ai fait, je n'ai besoin que d'une seule connexion. Si tu as une suggestion pour palier ce problème, n'hesites pas .

    Citation Envoyé par dude
    3 - La méthode setParams(String dbs, String h, String p, String u, String pwd) n'a aucun intérêt, et est même "génante", pour 2 raisons :
    - Ces paramètres ne sont utilisés que dans la méthode init(); il vaudrait mieux avoir init(String dbs, String h, String p, String u, String pwd)
    - De plus, ces attributs sont indispensables au bon fonctionnement de ta classe; autant les spécifier dans le constructeur.
    oui c'est vrai, merci pour la remarque.

    Citation Envoyé par dude
    4 - Plutôt que d'écrire une méthode destroy(), surcharge la méthode Object.finalize() afin d'être certein que la connection sera toujours libérée.
    oui d'accord, mais en quoi ça garanti la destruction de la connexion ?

    Citation Envoyé par dude
    Et pour finir.... plutôt que de réinventer la roue, pourquoi n'utilises-tu pas un pool de connexion tel que commons-dbcp ?
    Pourquoi utiliser un pool lorsque on sait exactement de combien de connexion on a besoin ? Autrement dit, pour rester dans la metaphore et faire aussi dans l'ironie, pourquoi faire simple quant on peut compliqué ?

    J'ai une autre question :
    Que se passe t'il lorsque je detache une tache (pour laquelle j'utilise ce singleton) dans un thread ?

  11. #11
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    Citation Envoyé par mitje
    Pourquoi ces facilités sont elles présentes dans ce langage alors ?
    Pour pouvoir définir des comportement qui ne dépendent pas de l'état d'une instance.
    Si tu définis une classe qui ne comporte que des attributs et méthodes statiques, tu sors de "l'esprit objet".


    Citation Envoyé par mitje
    non, mais selon le cahier des charges et le modèle que j'ai fait, je n'ai besoin que d'une seule connexion. Si tu as une suggestion pour palier ce problème, n'hesites pas .
    La solution est justement de ne pas définir ta classe entièrement statique. Si tu as deux connexions, tu pourras instancier 2 objets MyDBConnection qui se comporteront différemment suivant leur état respectif. Chacun fournira une connexion à la base spécifiée dans leurs paramètres.


    Citation Envoyé par mitje
    oui d'accord, mais en quoi ça garanti la destruction de la connexion ?
    Pour être plus correct, j'aurais du dire : "surcharge la méthode Object.finalize() pour qu'elle fasse un appel à la méthode destroy()".
    La méthode finalize() est appellée par le garbage collector avant de détruire l'instance. De ce fait tu es sure que la connection sera toujours fermée, même si le client "oublie" de faire un appel a la méthode destroy().

    Citation Envoyé par mitje
    Pourquoi utiliser un pool lorsque on sait exactement de combien de connexion on a besoin ? Autrement dit, pour rester dans la metaphore et faire aussi dans l'ironie, pourquoi faire simple quant on peut compliqué ?
    Parce que le pool va gérer les connections à ta place. Il ne suffit pas d'instancier une Connection au lancement de l'application et de l'utiliser tout au long de l'éxecution de l'appli. Il se peut tres bien que le SGBD décide à un moment de fermer la connexion de lui-même (timeout, erreur d'execution d'une requete, ...). Et dans ce cas, ton objet Connection n'est pas forcément réinitialisé. Et ta methode getConnection() retournera toujours la variable connection qui sera détachée de la base.


    si tu veux quand meme garder ta classe, voila comment je l'ecrirais (c'est fait a l'arrach', je n'ai rien testé)
    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
     
    public class MyDBConnection {
     
       private static MyDBConnection instance;
     
       /** Creates a new instance of MyDBConnection */
       private Connection connection;
       private ConnectDBDialog dbd;
       private String db;
       private String host;
       private String port;
       private String user;
       private String password;
     
       static {
          try {
             Class.forName("com.mysql.jdbc.Driver");
          } 
          catch (Exception e){
            // Traitement de l'exception
          }
       }
     
       private static MyDBConnection getInstance(String db, String host, String port, String user, String password) {
          if (instance == null) {
             instance = new MyDBConnection(db, host, port, user, password);
          }
          return instance;
       }
     
       private MyDBConnection(String db, String host, String port, String user, String password) {
          this.db = db;
          this.host = host;
          this.port = port;
          this.user = user;
          this.password = password;
       }
     
       // permet au client de reinitialiser la connection
       public void init() throws SQLException {
          connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" +port +"/" + db ,user , password);
       }
     
       public void showConnectDialog(MainFrame fr) {
           dbd = new ConnectDBDialog(fr);
       }
     
       public Connection getConnection() throws SQLException {
          if(connection == null) init();
          return connection;
       }
     
       /* (non-Javadoc)
        * @see java.lang.Object#finalize()
        */
       protected void finalize() throws Throwable {
          destroy();
          super.finalize();
       }
     
       public void destroy(){
           if(connection !=null){
     
               try{
                   connection.close();
               } catch(Exception e){}
     
     
           }
       }
     
       public boolean isActive() {
     
           if(connection !=null)
               return true;
           else
               return false;
     
       }
     
     
    }

    Citation Envoyé par mitje
    J'ai une autre question :
    Que se passe t'il lorsque je detache une tache (pour laquelle j'utilise ce singleton) dans un thread ?
    Je ne vois pas ce que tu veux dire...

  12. #12
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    J'ai lu sur ce site :

    Dans le cas de multithreading, l'instance présentée sous cette forme sera multiple si deux threads essayent d'accéder ensemble à la méthode getConnection().
    Hors dans mon cas, j'utilise justement MyDBConnection dans l'eventDispatchingThread mais aussi dans un autre thread utilisé pour améliorer la qualité de reaction de mon interface graphique.

    On propose en fait pour palier ce problème ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    synchronized(objetSynchrone__)
    A utiliser, dans le code de getConnection() comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public static Connection getConnection(){
            if (connection == null) {
                synchronized(objetSynchrone__);
                if (connection == null)
                      connection = init(); 
            }
            return connection;
        }
    La question : que ce passe t-il quand j'utilise MyDBConnection dans le second thread ?

  13. #13
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    Et bien tu risques de te retrouver avec deux threads utilisant simultanément la même connection. Et c'est pas bon du tout, ca...

    La solution peut etre effectivement de blinder tes acces à l'object connection dans des blocs synchronized.
    Ou de changer ton design et laisser chaque thread bosser avec sa propre connection, parce que, pour revenir a ta metaphore, la solution la plus simple n'est pas forcement celle que tu crois...

  14. #14
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    Pour dude,

    Pour ce qui est du theading et par rapport à ce que j'ai lu, je ne pense pas, comme tu le dis que les deux thread utilisent en même temps la connection mais plutôt que l'on perd l'aspect singleton de classe myDBConnection.
    c-a-d que plutôt que d'utiliser en même temps la même connection on aurait plutôt une duplication du singleton qui se produirai, ce qui en contradiction avec le concept même de singleton.

    De plus, je viens de lire quelques tutoriels sur le connection pooling et franchement je trouve pas ça trés simple, d'autant plus qu'il faut utiliser différents objets. Maintenant, je vais percevérer et on va voir si c'est aussi simple que tu le dis.
    Pour ce qui est du problème due au threading, je vois pas encore trop comment le pooling peut venir à mon secours.

    En tout cas, je te remercie dude pour tes observations et je ferai un post sur une autre solution en connection pooling à la suite de celui-ci mais je pense qu'il va me falloir la soirée pour digerer ça.

    merci à tous et A+

  15. #15
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    pour te prouver qu'avec du multi-thread, tu ne perds pas "l'aspect singleton" (ce qui, commme tu l'as dit, n'a pas de sens).
    Tu verras que les 2 threads accèdent au même objet :
    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
     
    public class MySingleton {
     
       private static MySingleton instance;
     
       private double value;
       public double getValue() { return value; }
       public void setValue(double value) { this.value = value; }
     
       public static MySingleton getInstance() {
          if (instance == null) {
             instance = new MySingleton();
          }
          return instance;
       }
     
       private MySingleton() {
          setValue(Math.random());
       }
     
       public static class MyThread extends Thread {
          public MyThread(String name) {
             super(name);
          }
     
          public void run() {
             MySingleton s = MySingleton.getInstance();
             for (int i = 0; i < 10 ; i++) {
                System.out.println(getName() + " - " + s.getValue());
             }
          }
       }
     
       public static void main(String[] args) {
          new MyThread("Thread 1").start();
          new MyThread("Thread 2").start();
       }
    }

    j'ai relu ton premier post, et ce que tu cherches c'est "Que la connection, ainsi créer doit rester active de sorte a ne pas avoir a se reconnecter tout le temps."
    Les pools vont justement te permettre d'avoir en permanence quelques connections actives prêtes à l'emploi.

    Jette un oeil sur ces exemples (tu auras juste quelques paramètres adaptés à ton cas à positionner)

    Le temps que tu vas passer sur les pools ne sera pas du temps perdu. Si ca ne te sert pas aujourd'hui, tu finiras par les utiliser un jour ou l'autre.

  16. #16
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Citation Envoyé par mitje
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public static Connection getConnection(){
            if (connection == null) {
                synchronized(objetSynchrone__);
                if (connection == null)
                      connection = init(); 
            }
            return connection;
        }
    Je ne crois pas que le double lock soit à utiliser en java, ni dans n'importe quel autre langage, ça ne te ganranti pas qu'un seul objet soit crée... il vaut mieux synchroniser la méthode en entier ou passer par une instance de ThreadLocal...

  17. #17
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    +1
    Voici un excellent tutoriel sur la question : Le singleton en environnement mulithred.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  18. #18
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    bon, je pense qu'on à fait le tour du sujet.
    Merci à vous tous pour vos conseils et vos observations.
    ciao et a+

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

Discussions similaires

  1. Classe outil statique
    Par olibara dans le forum C#
    Réponses: 14
    Dernier message: 03/09/2012, 11h37
  2. Classe interne statique d'une classe interne
    Par Satch dans le forum Langage
    Réponses: 6
    Dernier message: 15/11/2010, 09h36
  3. Classe utilitaire / statique
    Par oodini dans le forum C++
    Réponses: 3
    Dernier message: 26/08/2009, 04h38
  4. Réponses: 2
    Dernier message: 06/05/2009, 19h00
  5. Variable de classe véritablement statique ?
    Par thomzon dans le forum Langage
    Réponses: 10
    Dernier message: 06/06/2007, 15h39

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