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 :

Java, utilisation de 1 classe pour 2 classes différentes


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Points : 37
    Points
    37
    Par défaut Java, utilisation de 1 classe pour 2 classes différentes
    Bonjour,

    J'ai un problème assez complexe à expliquer.

    Contexte: Je dois attaquer 2 bases de données différentes (oracle et postgresql) pour générer du flux SVG.

    Pour l'instant j'ai
    3 classes:
    -GetFromBd: Elle contient la grosse partie des requêtes. En fait il s'agit du code qui peut être similaire pour les deux bases de données (les simples 'select from')

    -GetFromBdOra et GetFromBdPost: Elles héritent de GetFromBd et contiennent chacune le code propre a leurs systèmes de gestion des formes géométriques dans des base de donnée

    1 interfaces:
    -GetFromBdInter: Elle contient la déclaration des méthodes de GetFromBdOra et GetFromBdPost

    Donc on a
    -GetFromBd
    -GetFromBdOra extends GetFromBd implements GetFromBdInter
    -GetFromBdPost extends GetFromBd implements GetFromBdInter
    -GetFromBdInter

    Pour l'instant je fais (en gros...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if(ORA)
    {
             GetFromBdOra getfrombdora;
             getfrombdora.uneMethodeDeGetFromBd();
             getfrombdora.uneMethodeDeGetFromBdOra();
    }
    else if(POST)
    {
             GetFromBdPost getfrombdpost;
             getfrombdpost.uneMethodeDeGetFromBd();
             getfrombdpost.uneMethodeDeGetFromBdPost();
    }
    J'aimerais pouvoir faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UneClasseMagique classemagique;
     
    //1ere opération
    classemagique.uneMethodeDeGetFromBd();
     
    //2eme opération
    classemagique.uneMethodeDeGetFromBdOraOuPost();
    Vu que les 2 classes hérites de GetFromBd(), je pourrais faire la première opération.
    La ou je cale, c'est pour la 2eme opération.

    Je pensais utiliser un objet "GetFromBdInter" (=interface qu'implémente les 2 classes) mais si je fais ca, impossible de réaliser la première opération. Vu que l'objet n'hérite pas de GetFromBd!


    Quelqu'un a comprit?

  2. #2
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Dans le monde objet, l'intérêt est d'éviter les 'if' pour connaître le type d'objet.
    Autrement dit, on appelle une méthode d'interface sans connaître précisément le type d'objet que l'on manipule : c'est le polymorphisme.

    Mon conseil : garde tes deux classes filles et ta classe mère et branche une interface uniquement sur ta classe mère.

    Ainsi, à chaque appel d'une méthode d'interface, suivant le type d'objet sous-jacent, ce sera l'une ou l'autre classe fille qui sera sollicitée !



    Hope it helps !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Points : 37
    Points
    37
    Par défaut
    Mais je vois pas trop comment l'objet du type de l'interface pourra s'y retrouver dans les méthodes de même noms des classes. Comment saura il si c'est celle d'Oracle ou celle de Postgresql?

  4. #4
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Ben, c'est justement un des FONDEMENTS du mécanisme objet !

    Grosso et modo, c'est le compilateur qui créé des tables d'indirections et les joints aux classes.



    Hope it helps !

  5. #5
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Ce que je ne comprends pas dans tes explications, c'est le principe même d'avoir à choisir.

    Que tu aies deux bases de données, soit. Mais elles servent chacune à quelque chose de bien précis, non ?

    Imaginons que, dans Oracle il y ait les rectangles, et dans postgress les cercles. Alors les choses devraient s'organiser d'elles mêmes selon le processus de chargement des rectangles ou des cercles ?...

    Peux-tu m'expliquer ce que je ne comprends pas pour que je t'explique ce que tu ne comprends pas ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par g0up1l
    Ben, c'est justement un des FONDEMENTS du mécanisme objet !

    Grosso et modo, c'est le compilateur qui créé des tables d'indirections et les joints aux classes.
    Hope it helps !
    Oui mais ici, c'est l'utilisateur qui choisira quelle base de donnée il souhaite utilisé. Je vois pas comment le compilateur pourrait deviner dans quel cas il faut utiliser les méthodes Oracle ou celle de PostgreSQL.


    Citation Envoyé par gifffftane
    Ce que je ne comprends pas dans tes explications, c'est le principe même d'avoir à choisir.

    Que tu aies deux bases de données, soit. Mais elles servent chacune à quelque chose de bien précis, non ?

    Imaginons que, dans Oracle il y ait les rectangles, et dans postgress les cercles. Alors les choses devraient s'organiser d'elles mêmes selon le processus de chargement des rectangles ou des cercles ?...

    Peux-tu m'expliquer ce que je ne comprends pas pour que je t'explique ce que tu ne comprends pas ?
    Non, en réalité, les 2 bases de données devront faire toutes les deux le même travaille. Simplement il faut que le programme puisse fonctionner sur Oracle OU PostrgreSQL.
    En fait Jdbc permet de conserver une certaine indépendance par rapport a la base de donnée dans la plupart des cas. Mais pour tout ce qui est base de données spatiales, les objets géométriques sont gérer de manière différente et on extrait leurs infos de manières différentes aussi! Donc tout ce qui concerne le spatial, je dois séparé les classes.

  7. #7
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Mais non, le truc c'est que suivant le type de BD choisis par l'utilisateur,
    tu instancieras soit la classe GetFromBdOra , soit la classe GetFromBdPost.
    Puis tu utiliseras l'objet sous la forme d'une interface GetFromBdInter.
    A l'utilisation les méthodes appelées sur l'interface seront redirigées vers GetFromBdPost ou GetFromBdOra.

    Comprends-tu ?


    Hope it helps !

  8. #8
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    OK pour l'idée que les bases ont le même rôle, et que le logiciel doit simplement s'adapter aux particularités de chacune.

    Pourtant j'avais l'impression à te lire que le logiciel devait traiter simultanément des deux bases, je veux dire, que pour un seul cas d'utilisation, il y a les deux bases présentes et utilisées ?

    Si mon impression est juste (-> deux bases simultanées), alors il faut tout de même savoir comment le logiciel choisi.

    Si mon impression est fausse (-> deux bases possibles, mais une seule utilisée, choisie au départ), alors c'est plutot la piste de g0up1l qui est la bonne.

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Si j'ai bien compris, tes 2 objets ont les mêmes signatures de méthodes, mais une adaptation spécifique du code pour la base cible, je pense que l'interface est ta sollution...

    Plutôt que d'instancier tes objets (je présume) comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GetFromDbORA db1 = new GetFromDbORA(...);
    GetFromDbPost db2 = new GetFromDbPost(...);
    Tu devrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GetFromDbInter db1 = new GetFromDbORA(...);
    GetFromDbInter db2 = new GetFromDbPost(...);
    Du moment que dans ton interface, tu définis toutes les signatures (communes) de tes méthodes, la question de savoir quel objet tu instancies ne se pose... qu'à la création... Après, c'est transparent...

    A+

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 65
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par gifffftane
    Pourtant j'avais l'impression à te lire que le logiciel devait traiter simultanément des deux bases, je veux dire, que pour un seul cas d'utilisation, il y a les deux bases présentes et utilisées ?
    Oui je ne l'avais pas précisé et je l'avais mal exprimé...désolé



    Merci à gifffftane pour les explications et à OButterlin pour les exemples, je testerai ça tantôt

Discussions similaires

  1. [AC-2003] Comment utiliser une table access pour 2 fichiers différents ?
    Par bigounet dans le forum Access
    Réponses: 2
    Dernier message: 08/04/2012, 22h45
  2. class pour table + class pour td = class td non fonctionnelle ?
    Par supergrey dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/05/2009, 08h13
  3. utiliser une classe pour gerer les signaux
    Par TrueBeliever dans le forum Qt
    Réponses: 2
    Dernier message: 21/12/2006, 17h57
  4. Utilisation de classes pour gérer une table
    Par mathias dans le forum Access
    Réponses: 11
    Dernier message: 30/08/2006, 16h57
  5. Réponses: 5
    Dernier message: 26/05/2005, 15h40

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