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

Logging Java Discussion :

Design Pattern en java


Sujet :

Logging Java

  1. #21
    Membre chevronné
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Par défaut
    Montre le code de ta méthode getSolver et reformule ta question, je ne comprends pas bien. Qu'est ce que te donne System.out.println(object.get_type()); ?

  2. #22
    Membre chevronné
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Par défaut
    Citation Envoyé par BainE
    re,
    je ne veux rien substituer du tout, mais pour moi le shéma UML est pas facile a decrire mais en decoule dans le code ces lignes :
    Je ne sais pas de quel pattern factory tu parles. Moi je te parle des patterns du GoF (Gang of Four), le livre de référence sur le sujet.

    Pour plus de détails sur les patterns factory (et du GoF) regardes ces liens (attention, implémentations en C#) :
    - http://www.dofactory.com/Patterns/PatternFactory.aspx
    - http://www.dofactory.com/Patterns/PatternAbstract.aspx
    - http://www.dofactory.com/Patterns/Patterns.aspx#list

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Factory {
       public Solver getSolver(String className)  throws Exception {
     
          String classNametmp = "Atelier_logiciel_fatigue."+className; 
     
          Class maClasse = Class.forName(classNametmp);
     
        if (Solver.class.isAssignableFrom(maClasse)) { 
            return (Solver) maClasse.newInstance();
        }
        return null;
       }
    }
    Voila ma méthode getSolver

    le type est une donnée membre de chaque classe Solver, Simmetrix
    get_type() renvoie Solver pour la classe Solver et Simmetrix pour la classe Simmetrix, c'est juste pour voir le type de l'objet que j'instancie.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public static void main(String[] args)  throws Exception {
            System.out.println("start main");
          /*  Simmetrix simmetrix = new Simmetrix();
            simmetrix.run();*/
            Factory factory = new Factory();
            Solver object = (Solver)factory.getSolver("Simmetrix");
            System.out.println(object.get_type());
            System.out.println("finish main");
        }
    Mais la j'instancie un objet de type Solver alors que j'ai mis le mot clés Simmetrix donc je devrais avoir un objet de type Simmetrix.

    J'espère que j'ai été clair ,
    merci

    Xavier

  4. #24
    Membre chevronné
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Par défaut
    Remplace System.out.println(object.get_type()); par System.out.println(object.getClass()); et tu verras que ton objet est bien un objet de type Simmetrix.

  5. #25
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    oki dlemoing, le pattern strict ne fais pas ca, mais je suis pas sur que ce soit idiot, en tout ca merci pour le lien il me servira.

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Par défaut
    merci bcp à tout le monde,

    je vais m'intéresser aux différences entre Java et C++ pour éviter certaines surprises et je vais m'intéresser aux gestions d'exception.

    Bonne fin d'aprem à tout le monde,

    Xavier

  7. #27
    Membre chevronné
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Par défaut
    Citation Envoyé par BainE
    oki dlemoing, le pattern strict ne fais pas ca, mais je suis pas sur que ce soit idiot, en tout ca merci pour le lien il me servira.
    Désolé de t'avoir fait penser que je considérais comme idiot ce que tu proposais. C'est juste que j'ai tendance à considerer qu'on ne doit pas abuser de l'utilisation du "static".
    Les membres et méthodes statiques, bien qu'ayant leur utilité, ne sont pas toujours le gage d'une conception objet de qualité et ils ont rarement leur place dans les designs patterns.
    Ce n'est pas pour rien si dans une factory les méthodes ne sont pas statiques, mais pour comprendre tout ca je te conseille le livre du GoF (existe aussi en francais).

  8. #28
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    nan je suis pa vexé
    je suis simplement parti de l idée que la factory est une classe dont la création d'instance est superflux, en effet une factory ne doit pas avoir beaucoup d attributs, et une fois crée et demandé une instance par un getter l instance est ramassé par le garbage collector. Il n'y a aucun interet de declaré plusieurs intance... Et je me basai sur mes souvenirs de cours...
    houlala enfin voila
    pour rajouté une betise il me semblai meme qu'il faille declaré le constructeur de la factory en private...

    Donc il va falloir que je revise dur !!!
    Voila bonne apres midi a tous
    et dlemoing

    Lu

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Par défaut
    je reviens, car j'ai un petit pb;




    public static void main(String[] args) throws Exception {
    System.out.println("start main");
    Factory factory = new Factory();
    Solver object = (Solver)factory.getSolver("Simmetrix");
    System.out.println(object.getClass());
    object.run();
    System.out.println("finish main");
    }

    quand j'appelle une méthode de la classe Simmetrix avec mon instance objet , j'ai le mess suivant :
    cannot find symbol; symbol : method run(), location: class Atelier_logiciel_fatigue.Solver at line 89 (89:16)
    Pourtant j'ai bien la méthode run() car Simmetrix implémente l'interface Runnable. Je comprends pas pourquoi il va chercher la méthode dans la class Solver .

    merci

    Xavier

  10. #30
    Membre chevronné
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Par défaut
    Il faut que ta méthode run() soit définie dans la classe Solver (ou déclarée en tant que méthode abstraite pour être redéfinie dans les sous-classes, mais alors Solver devient une classe abstraite).
    Par contre, à l'execution, ce sera bien la méthode run définie dans Simmetrix qui sera executée (polymorphisme oblige).

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Par défaut
    OK, mais alors toutes les méthodes que je veux coder dans des classes dérivées doivent être mise dans la classe de base comme abstract méthode.

    En C++, on peut faire ca, ajouter des méthodes dans des classes dérivées et qui ne sont pas déclarées dans la classe de base, il suffit juste de faire un dynamic_cast pour forcer le type et ainsi appeler la méthode.

    Ca permet d'avoir une classe de base avec toutes les méthodes qui sont communes à l'ensemble des classes dérivées et de préciser le comportement des classes "filles" en ajoutant des méthodes...

    Merci
    Xavier

  12. #32
    Membre chevronné
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Par défaut
    Tu peux également forcer le type si tu connais l'interface à utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Solver obj = factory.getSolver(...);
    ((Runnable)obj).run();
    ou directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Runnable obj = (Runnable)factory.getSolver(...);
    obj.run();

  13. #33
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Apparte : je suis desole mais les exceptions ca existe depuis longtemps en C++ et a ca ete finallement standardise entre '94 et '96 (pask'avant chacun faisait a sa sauce). Outre les exceptions propres a chacun des vendeurs (ex: CException dans MFC) il existe std::exception de base dans ISO C++.

    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
     
    #include <exception>
     
    class MonException1 : public std::exception {
    . . .
    };
     
    class MaClasse {
    public:
     . . .
     void moOp() throw (MonException1, MonException2);
     . . .
    };
     
    void MaClasse::monOp() throw (MonException1, MonException2) {
      . . .
      if (testErreur) {
        throw MonException1("Ca plante paske");
      }
      . . .
    }
     
    try {
      monInstance.monOp();
    }
    catch (MonException1& e1) {
       std::cout << "ERREUR : " << e1.what() << std::endl;
    }
    La grosse diff c'est qu'en C++on peut faire un throw de n'importe quoi (un int, un pointeur, une ref, un objet quelconque, ...) ce qui rend difficile la gestion des erreurs. Bien qu'on puisse faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try {
    . . .
    }
    catch (...) { // Oui il faut bien ecrire 3 points d'affilee.
      // Traitement de l'erreur.
      // Note : avec "..." impossible de savoir ce qui a ete catche).
      throw; // relancement eventuel de l'erreur.
    }
    Egalement il n'existe pas de bloc finally.

    En Java on ne peut lancer que des Throwable et classe heritee comme Exception et on dipose d'un bloc finally toujours execute (si ca marche ou si ca plante).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try {
    . . .
    }
    catch (Throwable t) {
      // Traitement de l'erreur.
      throw t; // relancement eventuel de l'erreur.
    }
    finally {
      // Traitement qui est tout le temps effectue.
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. 2 livres sur les design pattern en java : lequel prendre ?
    Par rXpCH dans le forum Général Java
    Réponses: 0
    Dernier message: 10/03/2010, 08h35
  2. [Conception] Design Pattern Observer Java
    Par jeb001 dans le forum Général Java
    Réponses: 4
    Dernier message: 02/05/2007, 23h43
  3. Meilleur livre sur les design patterns en Java?
    Par JFortranDoc dans le forum Logging
    Réponses: 5
    Dernier message: 15/06/2006, 01h19

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