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 :

early binding en java


Sujet :

Langage Java

  1. #1
    Membre à l'essai Avatar de davguez
    Homme Profil pro
    Chercheur
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 19
    Points
    19
    Par défaut early binding en java
    Bonjour à tous,
    Je développe pour mon travail une petite application graphique, et j'ai décidé de tenter d'utiliser JAVA comme language, sachant que je maîtrise correctement le C++ mais qu'il s'agit de ma première application en JAVA.

    L'application en question doit être capable de gérer des formes géometriques simples (lignes, polylignes, arcs de cercles, flèches,...) positionnables 'à la souris' afin de définir simplement et visuellement les paramètres d'un simulateur.

    Ma première surprise est de n'avoir quasiment rien trouvé dans la bibliotheque java standard pour m'aider (genre vecteur2D avec opérateur redefinis pour faire v=v1+v2 ou v.angle(v2) ) j'avais choisi JAVA en pensant que j'aurais ce genre de trucs dans un langage plus moderne et integré que C++. Mais bon, c'est pas grave (oui, je sais je suis un petit peu provocateur là...)

    Ma deuxième surprise est que sous eclipse, je n'ai rien trouvé de gratuit pour m'aider à construire visuellement une interface graphique swing.
    J'ai deja lutte pour installer eclipse, je ne me lancerais pas dans le combat pour NetBeans...

    J'ai pris sur moi de me taper à la main la définition d'un canvas graphique dans lequel il sera possible d'ajouter les formes geométriques en question.
    Mais là je me rends compte que ce que je ne pense pas en java, je m'explique:

    je pensait avoir une arborescence de classes des plus basiques du genre:

    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
     
     
    class VForme {
       ...
       void drawIn(Graphics g) {
          // operations communes a toutes les formes graphiques
          // genre afficher les points de controles de la forme
          // pour de deplacement a la souris, ...
       ...
    }
     
    class Line extends VForme {
       ...
       @override
       void drawIn(Graphics g) {
          // code specifique 
          g.drawLine(x1,y1,x2,y2);
          // code commun
         super.drawIn(g);
        }
    }
     
    class MultiLine extends Line{
       // derive de line pour reprendre les membres genre
       // line width, etc...
       ...
       @override
       void drawIn(Graphics g) {
          // code specifique 
          for (int i=0;i<npoint-1;++i) g.drawLine(xi[i],yi[i],xi[i+1],yi[i+1]);
          // code commun
         super.super.drawIn(g); // n'existe pas
         // LA EST MON PROBLEME
         // PARAIT IL QUE C'EST PARCE QUE JE NE PENSE PAS  EN JAVA
         // CE QUI EST VRAI AU DEMEURANT
         ((VForme)this).drawIn(g) // aurait marche en C++ pas en JAVA
     
        }
    }
    la question est : quel est (sont) la (les?) méthodes propre(s) pour faire ça ?
    J'ai contourné le problème en créant une méthode commonDrawIn dans VForme qui est appelée par tous les descendants mais je ne trouve pas ça très joli.
    Est-ce que si je pensait en java je trouverais ça beau ou est-ce que je n'ai pas l'info sur la façon jolie de le faire en java ? Avis aux experts...

    Merci!

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par davguez Voir le message
    Ma première surprise est de n'avoir quasiment rien trouvé dans la bibliotheque java standard pour m'aider (genre vecteur2D avec opérateur redefinis pour faire v=v1+v2 ou v.angle(v2) ) j'avais choisi JAVA en pensant que j'aurais ce genre de trucs dans un langage plus moderne et integré que C++. Mais bon, c'est pas grave (oui, je sais je suis un petit peu provocateur là...)
    L'api java est déjà bien grande, l'ajout de classes et méthodes de calcul spécifiques sont fonction des besoins d'utilisation. Et le calcul vectoriel n'est pas utile dans 99.9% des applications. On dispose donc des opérations mathématiques de bases, mais pas d'opération avancée. Ceci n'empêche pas de faire quelques recherches sur des librairies additionnelles fournissant les besoin rencontré. Il existe foison de librairies java additionnelles sur intenet

    au hasard, l'api java3D permet le calcul vectoriel à 2 3 et 4 dimensions
    http://download.oracle.com/docs/cd/E...e-summary.html mais ce n'est pas vraiment son but intrinsèque
    Ma deuxième surprise est que sous eclipse, je n'ai rien trouvé de gratuit pour m'aider à construire visuellement une interface graphique swing.
    un truc genre eclipse visual editor? Jamais testé mais ça doit correspondre à ton besoin
    http://www.ibm.com/developerworks/op...y/os-ecvisual/

    J'ai deja lutte pour installer eclipse, je ne me lancerais pas dans le combat pour NetBeans...
    Normalement pour installer eclispe, suffit de télécharger le .zip et de le décompresser, puis lancer le ficheir exécutable pour ouvrir eclipse :/


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         super.super.drawIn(g); // n'existe pas
         // LA EST MON PROBLEME
         // PARAIT IL QUE C'EST PARCE QUE JE NE PENSE PAS  EN JAVA
         // CE QUI EST VRAI AU DEMEURANT
    J'ignore comment ça se passe en C++, mais en java, on ne peux avoir accès que aux méthodes qu'on est occupées de surclasser, pas à N niveaux au dessus. Si ton parent a surclassé une méthode du grand parent, c'est qu'il a un bonne raison pour le faire. Si une méthode du grand parent doit rester accessibles pour tous, elle doit être séparée. Il y a une bonne raison à ça. Imagine que demain Line ne surcharge plus drawIn, tu devra alors revoir toutes les librairies qui héritent de Line car super.super.drawIn n'aura plus de sens, ce qui veux dire que les enfant doivent connaître la structure interne et l'évolution des classes qu'il héritent, ce n'est pas dans la "logique" java A noter que super en java ne veux pas nécessairement dire "parent" mais plutot "implémentation un cran au dessus"

    Alors la possibilité de base, mais pas très "propre" à mon gout, c'est celle que tu as suggérée (séparer une partie du code dans une autre méthode)

    Maintenant la méthode que je considère comme propre. Elle part du principe que le Line et MultiLine ont des comportements commun mais aussi des comportement distincts. Un peux comme un chat et un chien ont une couleur de poils, 4 pattes et une queue, mais qu'il ne me viendrais pas à l'idée d'écrire dans le code qu'un chat hérite d'un chien . Il faut bien penser dans la logique de l'appelant. Quand il aura un Line, et qu'il demandera "alors, quelles sont ses extrémités, quel est sont angle par rapport à l'horizontale, quel est sa longueur", il va répondre quoi un MultiLine là dessus??

    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
    class VForme {
       ...
       public void drawIn(Graphics g) {
          // operations communes a toutes les formes graphiques
          // genre afficher les points de controles de la forme
          // pour de deplacement a la souris, ...
       }
    }
    abtract class LinearForm extends VForme {
       // attributs et méthodes communes à tout ce qui est linéaire:
       // taille de ligne, type de lignes, couleur de lignes, etc
    }
    class Line extends LinearForm {
       // truc spécifique à line, comme 1 seul point de départ, un seul point d'arrivée, une axe, etc
       @override
       public void drawIn(Graphics g) {
          // code specifique 
          g.drawLine(x1,y1,x2,y2);
          // code commun
         super.drawIn(g);
        }
    }
     
    class MultiLine extends LinearForm{
       @override
       public void drawIn(Graphics g) {
          // code specifique 
          for (int i=0;i<npoint-1;++i) g.drawLine(xi[i],yi[i],xi[i+1],yi[i+1]);
          // code commun
          super.drawIn(g); // on est plus embeté par ce qui est spécifique à Line et ne nous concerne pas
        }
    }
    class Fleche extends LinearForm {.....}
    //etc ;)
    Sinon, par rapport à ton code, et pour gagner du temps, à tu pensé à regarder du coté de l'interface Shape en java, qui pourrait te faire gagner pas mal de temps car elle est gérée directement par les canevas de dessin de java via Graphics2D.draw(Shape)

    http://download.oracle.com/javase/6/...awt/Shape.html

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par davguez Voir le message
    Ma première surprise est de n'avoir quasiment rien trouvé dans la bibliotheque java standard pour m'aider (genre vecteur2D avec opérateur redefinis pour faire v=v1+v2 ou v.angle(v2) ) j'avais choisi JAVA en pensant que j'aurais ce genre de trucs dans un langage plus moderne et integré que C++. Mais bon, c'est pas grave (oui, je sais je suis un petit peu provocateur là...)
    Je n'ai pas de connaissance approfondis de la chose, mais il me semble que c'est ce que font les sous-types de Shape...

    Citation Envoyé par davguez Voir le message
    Ma deuxième surprise est que sous eclipse, je n'ai rien trouvé de gratuit pour m'aider à construire visuellement une interface graphique swing.
    Il y a bien le "Visual Editor"... mais je ne pourrais pas t'en dire plus.

    Citation Envoyé par davguez Voir le message
    J'ai deja lutte pour installer eclipse, je ne me lancerais pas dans le combat pour NetBeans...
    Tu as lutter à quel niveau ???

    Citation Envoyé par davguez Voir le message
    Mais là je me rends compte que ce que je ne pense pas en java
    En effet...

    Bien qu'étant deux langages orientés objets, Java et C++ ne partagent pas forcément les mêmes concepts ni la même approche de la POO. Après on ne peut pas vraiment dire qu'un a raison et l'autre tord, c'est juste une approche différente.


    a++

    [edit] grillé
    [edit par tchize_] et Toc!

  4. #4
    Membre à l'essai Avatar de davguez
    Homme Profil pro
    Chercheur
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 19
    Points
    19
    Par défaut D'accord!
    Hé bien merci de ces réponses...
    j'avoue bien volontiers que les arguments sont pertinents. A vrai dire c'est un peu ca qui me 'plait' dans la POO ça oblige dans un sens a rester rigoureux dans le design. Et effectivement, une polyligne n'est pas une une ligne particulière je suis donc plutôt censé mieux designer mon arborescence de classes.

    Pour les classes Shape j'étais tombe dessus en cherchant dans la doc java, mais ca ne m'avais pas paru répondre a mes besoins, je regarderais quand même a nouveau... Pour la bibliothèque mathématique ça m'a l'air de correspondre a mes besoins par contre, merci de l'info.

    Juste pour info, lorsque je disait avoir du me battre pour installer eclipse c'était avec le service info, pas avec eclipse hein...

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    disons que la Shape seule ne te suffira pas, mais elle est déjà bien intégrée dans le dessin java, donc se baser dessus (avoir une méthode getShape par exemple dans VForme) serait probablement un plus, mais t'es le seul maitre à bord

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

Discussions similaires

  1. [XL-2013] Macro accès internet et Late/early binding
    Par bendu31 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/10/2014, 07h22
  2. [2.2.2] Java add property binding query
    Par flo123456 dans le forum BIRT
    Réponses: 0
    Dernier message: 15/04/2008, 17h54
  3. Early binding de composant DLL
    Par yonialhadeff dans le forum C#
    Réponses: 1
    Dernier message: 27/03/2007, 09h53
  4. JSF + ADF] tutorial java + bindings
    Par bertlef dans le forum JSF
    Réponses: 1
    Dernier message: 11/09/2006, 09h02

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