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 :

Appel d'un constructeur à partir d'un autre


Sujet :

Langage Java

  1. #21
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    non, ce n'est pas Eclipse, mais Java qui impose une seule classe publique par fichier.
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  2. #22
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*Constructeur avec tableau*/
    LaClassse(double[][] tab){
    initArrayList(tab);
    }
    /*Constructeur avec fichier*/
    LaClasse(String filePath){
    ...
    initArrayList(tab);
    }
    void initArrayList(double[][] tab){
    ...
    }
    ça marche parfaitement, mais il n'est pas prudent d'appeler les méthodes non-statiques d'une classe dans un constructeur de cette même classe. Les méthodes non-statiques sont en effet susceptible d'accéder à des variables d'instance dont c'est le rôle du constructeur de les initialiser ...
    Dans ton cas, étant donné qu'il n'est pas possible de déduire le chemin d'accès à partir du tableau ni inversement, sans quoi tu aurait uniquement recouru à la surcharge de constructeur, le mieux est donc de factoriser le code commun aux deux constructeurs dans une méthode statique. Ca ne change rien en l'état mais c'est plus propre.


    Sinon question subsidiaire:
    peut-on définir les méthodes d'une classe en dehors de celle ci comme en C++?[/QUOTE]

    En C++, la déclaration des prototypes de méthodes et de classes oblige à utiliser un fichier d'entêtes, et donc de jongler avec deux fichiers pour écrire une seule classe, sauf pour les classes template. Je préfère largement la façon dont on organise le code en Java qui permet d'avoir une vue d'ensemble de sa classe dans un seul fichier.

  3. #23
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    non, ce n'est pas Eclipse, mais Java qui impose une seule classe publique par fichier.
    C'était le:
    autant de classe non public que l'on veut.
    qui fait oublier le fait qu'il faut une classe par fichier.

    c'est le rôle du constructeur de les initialiser ...
    En fait c'est ma fonction qui fait office de "constructeur" en initialisant les données.
    Les vrais constructeurs se contentent de faire appel à cette fonction.
    une méthode statique
    Pourquoi static?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  4. #24
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    Citation Envoyé par seriousme
    Pourquoi static?
    Une simple méthode privée commune aux deux constructeurs suffit.


    had35, j'ai beau largement mieux connaître Java que C#, je ne connais pas la réponse à ta dernière question. En revanche, je qu'il existe en C# la concept de classes partielles (partial) : il permet de délocaliser une partie de la définition de la classe.
    C'est un axe à creuser ....
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  5. #25
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Citation Envoyé par seriousme
    Pourquoi static?
    Ca n'a pas une importance énorme mais une méthode non-statique est sensée s'appliquer à un objet et peut donc accéder à ses variables d'état. Si l'appel de la méthode (dans le constructeur, donc) se fait avant que la variable ait été initialisée, l'erreur ne se verra qu'à l'exécution. La méthode factorisant le code commun aux deux constructeurs devrait bien sûr être private, mais en ajoutant static, on demande au compilateur de veiller au grain, il nous interdira d'accéder à une variable d'instance. Ca peut paraître un peut dogmatique, mais je trouve que l'intérêt de Java est justement d'offrir une syntaxe permettant de limiter au maximum que ne se glisse des petites erreurs de ce type.

    En relisant le code, je constate d'ailleurs qu'en modifiant la méthode à static, celui-ci ne compilerait plus puisque l'idée, je suppose, était d'initialiser une ArrayList, membre de la classe. Une construction plus propre à mon avis serait donc d'avoir un constructeur prenant une List en argument et un constructeur sans argument, puis de fournir un méthode pour remplir l'ArrayList, une fois l'objet construit :

    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
     
    public class LaClasse {
     /*Constructeur avec tableau*/
     private List list;
     
     public LaClasse(List list) {
      this.list = list;
     }
     public LaClasse() {
      list = new ArrayList();
     }
     public void initArrayList(String filePath) throws IOException {
     }
     public void initArrayList(double[][] tab) {
     }
    }
    Ou bien d'étendre ArrayList et surcharger son constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MaListe extends ArrayList {
     public MaListe(String filePath) throws IOException {
      super();
      ...
     }
     public MaListe(double[][]) {
      super();
      ...
     }
    }
    Mais bon, je pars sur autre chose

  6. #26
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Merci de ces précisions.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #27
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par Alwin
    On appel ça une interface
    Hum... pas tout à fait en fait.

    Justement, si une classe implements une interface quelconque elle doit en définir les methodes donc il faut bien les écrire quelque part.

    A la limite c'est plus du coté de l'heritage qu'il faut réfléchir non ?
    Horloge : machine de grande morale pour l’Homme, lui rappelant sans cesse qu’il lui reste un peu de temps à vivre.

  8. #28
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    Citation Envoyé par RadicalBob
    Justement, si une classe implements une interface quelconque elle doit en définir les methodes donc il faut bien les écrire quelque part.
    Il me semble pas non ... que fais-tu des classes abstraites ?
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  9. #29
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par NeptuS
    Il me semble pas non ... que fais-tu des classes abstraites ?
    je n'y avais pas pensé il est vrai
    Horloge : machine de grande morale pour l’Homme, lui rappelant sans cesse qu’il lui reste un peu de temps à vivre.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Appel d'un constructeur à partir d'un autre constructeur
    Par moineauacoustic dans le forum Langage
    Réponses: 6
    Dernier message: 11/08/2014, 19h00
  2. Appel d'un projet à partir d'un autre
    Par kazhar dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/02/2007, 10h16
  3. comment appeler une requete a partir d'une autre ?
    Par DjBeGi dans le forum Access
    Réponses: 2
    Dernier message: 01/06/2006, 14h39
  4. Pb d'appel d'objet a partir d'un autre objet
    Par sebastien2222 dans le forum Langage
    Réponses: 11
    Dernier message: 31/05/2006, 09h49

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