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 :

Classes partielles en java


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut Classes partielles en java
    Bonjour,

    Je suis un jeune développeur et je fais mes dents sur le java et c#.
    J'ai découvert la notion de classe partielle en c# qui permet de fractionner une classe en plusieurs fichiers sources. Cela peut être utile quand on veux rajouter du contenu à une classe précédemment validée.

    Peut-on faire cela en java et si oui comment?

    Merci.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Bonjour,

    Peut-être avec la définition de la classe avec extends conviendrait

    Exemple: la classe de base:

    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
    
    package Coordinates;
    
    import java.io.Serializable;
    
    public class Coordinate2D  implements Serializable, Cloneable
    {
        private final String p01;
        private final String p02;
    
        public Coordinate2D(String p01, String p02)
        {
            this.p01 = p01;
            this.p02 = p02;
        }
    
        public String getP01()
        {
            return p01;
        }
    
        public String getP02()
        {
            return p02;
        }
    
        public boolean equals(Object o)
        {
            if (!(o instanceof Coordinate2D))
            {
                return false;
            }
    
            Coordinate2D c = (Coordinate2D) o;
            return getP01().equals(c.getP01()) && getP02().equals(c.getP02());
        }
    
        public int hashCode()
        {
            return 35 * 17 + getP01().hashCode() + getP02().hashCode();
        }
    
        public String toString()
        {
            StringBuilder sb = new StringBuilder();
            return (sb.append(getP01()).append(',').append(getP02())).toString();
        }
    }
    
    La classe extends
    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
    
    package Coordinates;
    
    
    public class Coordinate3D extends Coordinate2D
    {
        private final String p03;
    
        public Coordinate3D(String p01, String p02, String p03)
        {
            super(p01, p02);
            this.p03 = p03;
        }
    
        public String getP03()
        {
            return p03;
        }
    
        public boolean equals(Object o)
        {
            if (!(o instanceof Coordinate3D))
            {
                return false;
            }
    
            Coordinate3D c = (Coordinate3D) o;
            return getP01().equals(c.getP01()) && getP02().equals(c.getP02()) && getP03().equals(c.getP03());
        }
    
        public int hashCode()
        {
            return super.hashCode() + getP03().hashCode();
        }
    
        public String toString()
        {
            StringBuilder sb = new StringBuilder();
            return  (sb.append(getP01()).append(',').append(getP02()).append(',').append(getP03())).toString();
        }
    }
    

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 62
    Points : 162
    Points
    162
    Par défaut
    Bonjour,

    A ma connaissance, ce n'est pas possible d'éclater une classe Java en plusieurs fichiers. Par contre tu peux mettre plusieurs classes dans un seul fichier (même si c'est déconseillé).

  4. #4
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Tu peux aussi utiliser les interfaces.
    Tu crée une interface où tu écris toutes les signatures des méthodes et ensuite tu crée ta classe qui implements l'interface en question
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Merci pour vos réponses.

    Mais l'utilisation de extends et de implement ne marche pas toujours.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class A{
        // du code
        private void methode1(){
           // contenu de la méthode
        }
        //du code
    }
    Comment je fais en java pour créer une méthode methode2 utilisant methode1 sans modifier le contenu de A ni la visibilité de A et de methode1?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Comme dit précédemment, la notion de classe "partielle" (définition éclatée sur plusieurs fichiers) n'existe pas en Java.
    Les propositions utilisant les mécanismes d'héritage ne sont que des bricolages, qui ne vont évidemment pas remplacer cette notion.

    Dans ton exemple :
    La méthode methode1 étant privée, seule une méthode de A pourra l'utiliser. Et pour ajouter une méthode dans une classe, eh bien il faut modifier la classe, tu n'y couperas pas...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Points : 402
    Points
    402
    Par défaut
    Comme c'était dit la notion de partial n'existe pas en java, le principe d'ouverture à l'extension fermeture à la modification est plus facile à dire que faire..
    Je vois que tu peux changer ta méthode private en méthode sans modificateur (package private), donc si tu étend ta classe par une nouvelle classe qui se trouve dans le même package elle sera utilisable mais pas des autres packages ce qui va limiter son utilisation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package a.b;
     
    public abstract class Partial {
        // du code
        void methode1(){
           // contenu de la méthode
        }
        //du code
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package a.b;
     
    public class Complete extends Partial {
        void methode2(){
           methode1();
           //..etc
        }
        //du code
    }
    Cdlt

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par hibour Voir le message
    si tu étend ta classe par une nouvelle classe qui se trouve dans le même package elle sera utilisable
    Eh non, sa methode1 est privée, elle ne pourra être utilisée que dans la classe A, et pas dans les classes qui en héritent !

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Mon problème n'a donc pas de solution en java.
    J'espère ne jamais tomber dans ce cas là...

    Merci à tous pour vos réponses je considère ce sujet comme

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Points : 402
    Points
    402
    Par défaut
    Citation Envoyé par Astartee Voir le message
    Eh non, sa methode1 est privée, elle ne pourra être utilisée que dans la classe A, et pas dans les classes qui en héritent !
    Je parle quand methode1() et sans modificateur. regarde dans le code!

  11. #11
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Sinon il y'a le pattern du visiteur qui permet "en gros", de rajouter à une classe des fonctions sans avoir à modifier la classe. Mais cela revient à jouer avec les interfaces.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par hibour Voir le message
    Je parle quand methode1() et sans modificateur. regarde dans le code!
    Mais sprvnxlgls parle d'une méthode1 privée, regarde dans dans son message ! J'avais bien vu que tu proposais autre chose que ce qui était demandé, et c'est bien pour ça que j'ai rappelé ce point...

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

Discussions similaires

  1. Importer un *.class sans le *.java dans un projet.
    Par Agent22 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 15/09/2006, 17h00
  2. Réponses: 1
    Dernier message: 18/08/2006, 10h34
  3. Classe INET et Java...
    Par Julien_riquelme dans le forum VBScript
    Réponses: 2
    Dernier message: 10/05/2006, 08h44
  4. [Soundex] Class soundex en java
    Par shaun_the_sheep dans le forum Multimédia
    Réponses: 8
    Dernier message: 24/01/2006, 14h45

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