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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    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 chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    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 averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 63
    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 Expert 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 : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    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

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    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 émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    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
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    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

  8. #8
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    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.

+ 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