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 :

Organisation des classes


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut Organisation des classes
    Bonjour,

    me voila devant un projet en POO. N'étant pas habitué à ce paradigme de la programmation, je suis un peu confus quant à l'architecture de mon programme et l'articulation entre mes classes.

    je dois ouvrir un fichier (pdb) et y lire des informations sur les atomes (lignes commençant par ATOM) ainsi que d'autres paramètres. Lire le fichier ligne par ligne ne me pose pas de problèmes: Pour l'instant tout est dans une seule classe, mais cela me permet de ne lire mon fichier qu'une seule fois et de récupérer toutes les informations en une seule fois...

    Faudrait-il créer une classe juste pour lire? dois-je faire une classe Atome, une autre paramètres?


    Est-ce que quelqu'un pourrait m'éclairer sur la manière d'envisager mon problème?

    En espérant avoir été assez clair...

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Comme tu l'as suggéré :
    Une classe Atome qui contient les propriétés d'un atome.
    Une classe AtomeFileReader qui contient une méthode
    List<Atom> read(File f)

    Cette méthode va lire les atomes (Si tu as bien un atome par ligne), les ajouter à une liste et ensuite retourner cette liste.

    Après il faudrait connaître tes besoins exacts.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut
    merci mad-math pour ta réponse!

    alors pour préciser, un fichier pdb contient des lignes commençant par ATOM ressemblant à ça :

    ATOM 99 O SER A 36 19.371 -0.479 -11.286 1.00 12.56 O

    je dois récupérer les coordonnées (x, y,z) de ces atomes (19.371 -0.479 -11.286) deux paramètres (1.00 et 12.56) et le type (ici O).

    il y a d'autres lignes qui me sont utiles, donnant des paramètres valables pour tous les atome (ce sont des informations sur la maille cristalline...), ici :

    SCALE1 0.016280 0.009400 0.000000 0.00000
    SCALE2 0.000000 0.018799 0.000000 0.00000
    SCALE3 0.000000 0.000000 0.010121 0.00000

    Alors, je pense procéder comme suit :
    Une classe PdbReader qui contiendrait une méthode read et qui, selon le début de la ligne (ATOM, SCALE ou autres) appliquerait soit les méthodes de la classe Atome, soit les méthodes de la classe Scale.
    ça sonne bien?
    comment se passe l'héritage?

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Proposition :
    Pas d'héritage.

    Une classe PDBFile qui contiendra la liste de tes atomes et ton paramétrage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class PDBFile {
        private List<Atom> atoms;
        private Parameters parameters;
     
        //getter / setters
    }
    Tu peux stocker la position dans une classe du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Position{
        private double x;
        private double y;
        private double z;
     
        //getter / setters
    }
    Si les types possibles d'atomes sont fixe, tu peux créer une Enum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public enum AtomType {
        O, H, C...
    }

    Ta classe Atom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Atom {
        private Position position;
        private double param1; // 1.00
        private double param2; // 12.56
        private AtomType type; // Remplacer par String si pas d'enum
        //getter / setters
    }
    Ton paramétrage commun à tous les atomes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Scale {
        private double x, y, z,? ;
    }
     
    public class Parameters{
        private Scale scale1; 
        private Scale scale2; 
        private Scale scale3; 
        //getter / setters
    }

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut
    Waow! merci beaucoup!

    je vais potasser ça et voir comment ça se présente!
    je reviendrai si j'ai d'autres questions, si tu as encore du temps?!

    Bonne soirée

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut
    Me revoilà!

    mes classes sont crées, (j'ai dû en créer plus que prévu, afin d'être plus souple quant à l'utilisation de mon code). J'ai maintenant 2 questions :

    - j'ai une classe Coordonnees, et je voudrais créer une classe CoordonneesFractionnaires héritant de la première qui effectuerait un calcul sur les coordonnées x y et z. Je vous avoue que j'ai énormément de mal à faire tourner cette structure, je dois avoir un problème avec la compréhension des mots clés "super" et "this". Comment faire pour que ma classe dérivée puisse fonctionner?

    - J'ai aussi essayé de faire une Enum pour les éléments, comme me l'a suggéré mad-math, avec un switch/case, comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public enum Element { N, C, O}
     
    	public static String getElementValue( Element element){
    		switch(element){
    			case N:		return "azote"; // etc....
    ce n'est pas faux, mais ça ne fait rien, je ne peux pas l'utiliser.

    Merci encore pour l'aide et l'attention...

  7. #7
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public enum Element {
        N("azote"), H("hydrogène");
        private String élément ;
        Element(String élement) {
            this.élément = élément ;
        }
        public String getNom() {
            return this.élément ;
        } 
    }

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut
    Merci professeur shadoko, je comprends mieux le but maintenant!

    Personne n'a une idée pour mon héritage? peut-être n'ai-je pas été assez clair :
    j'ai une classe Coordonnees, qui permet d'instancier un objet composé de 3 doubles (x, y et z). Je dois maintenant transformer chaque Coordonnees avec un calcul, ce qui me donnerait un autre type de coordonnées.
    A mon avis l'héritage est la bonne méthode (elle m'a d'ailleurs déjà été suggérée), mais je n'arrive pas à voir comment le mettre en place :
    - faut-il redéfinir x y et z (sachant que le but est de les changer par rapport à la superclasse)?
    - ou bien faudrait-il plutôt que je fasse une méthode en plus?

    si quelqu'un pouvait m'éclairer (pardon encore pour la question qui peut paraître évidente).

    En vous remerciant.

  9. #9
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Si c'est juste pour faire un calcul qui peut s'appliquer à n'importe quelle coordonées et qui renvoir une Coordonnee classique l'héritage ne sert à rien. Une bonne vieille méthode fera l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Coordonnee doCalcul() {
    bla bla...
    return new Coordonnee(xCalcule, yClacule, zClacule);
    }

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut
    Non, il ne s'agit pas tout à fait du même type de coordonnées. De plus il m'est demandé de ne pas stocker ces deux types de données dans la même classe, de faire hériter la seconde de la première.

Discussions similaires

  1. Organisation des classes dans un jeu de type Mario
    Par peijnoob dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 16/01/2008, 22h08
  2. organisation des classes et package
    Par blaise_laporte dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 28/02/2007, 11h55
  3. [POO] Organisation des classes PHP
    Par AsQuel dans le forum Langage
    Réponses: 6
    Dernier message: 16/02/2007, 10h09
  4. [GUI]Organisation des classes
    Par c-top dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 04/03/2005, 18h46
  5. Organisation des classes
    Par R3iTt0R dans le forum Langage
    Réponses: 2
    Dernier message: 02/06/2004, 18h27

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