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

Concurrence et multi-thread Java Discussion :

enum avec attributs et méthodes et généralisation


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Par défaut enum avec attributs et méthodes et généralisation
    bonjour,

    y a t il un moyen de contourner le fait que l'accès aux variables d'une classe à partir d'une enum interne oblige lesdites variables à être static? de plus, grand débat philosophique, pourquoi une enum est un type de classe static? le but de la programmation objet n'est-il pas de créer des objets?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    La programmation orientée objet n'interdit pas de faire des appels static. On retrouve même ce genre d'appel dans des patterns reconnus et éprouvés comme Singleton ou Factory.

    Par ailleurs, les enums ne sont pas des solutions pour résoudre des problèmes d'architecture. Ils servent uniquement à typer des valeurs discrètes, au lieu de passer des paramètres génériques comme un String ou un int.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Par défaut
    en fait, je voudrais utiliser l'enum en temps que machine à états d'un thread, grâce à la possibilité d'ajouter des attributs et méthodes aux enums. Ce thread modifie une interface swing.

    Le fait que les enum soient static implique donc que ma méthode marcherait seulement si j'ai une seule instance de ma classe, ou que ma classe est terminale dans un arbre de généralisation. le problème est que le thread que j'utilise est contenue en classe interne d'un classe abstraite étant généralisé. je devrais donc mettre le thread dans chacune des classes généralisant la classe abstraite. Pas très efficace comme méthode. enfin bon si c'est la solution.

    (c'est peut-être pas très clair...)

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par dummygreg Voir le message
    y a t il un moyen de contourner le fait que l'accès aux variables d'une classe à partir d'une enum interne oblige lesdites variables à être static?
    Pourrais-tu préciser ce que tu veux faire précisément ??

    [edit] Tu as répondus entre-temps... mais j'ai une autre question : Pourquoi utiliser une enum pour cela ????

    Citation Envoyé par dummygreg Voir le message
    de plus, grand débat philosophique, pourquoi une enum est un type de classe static? le but de la programmation objet n'est-il pas de créer des objets?
    Au niveau d'une classe le mot-clef static n'a pas la même signification que pour un attribut...

    Pour une classe cela signifie qu'elle n'est pas implicitement lié à une instance de la classe "conteneur"... Ce qui est tout à fait logique pour une enum !

    a++

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Par défaut
    il s'agit en fait d'un thread qui parcoure un tableau et affiche les résultats sur une interface swing. c'est un thread de lecture dont la machine a 3 états, l'état lecture, l'état pause, et l'état stop. J'ai fait comme cela car mes tentatives au départ en utilisant les methodes wait() stop() et notify() me conduisaient dans le mur.

    voici le code du thread :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    public class LectureThread extends Thread{
            private static JPanel panelAModifier;
            private static LecturePanel controlLecture;
            public static Mode mode;
            /**
             * la machine à état du thread de lecture
             */
            protected enum Mode{
            Stop{
               public void pause(){
                   mode=Stop;
               }
     
            },
            Lecture{
                public void action(){
                    ArrayList<Object> listeAParcourir = getListe();
                    if(index<listeAParcourir.size()){
     
                        panelAModifier.update(listeAParcourir.get(index));
                        controlLecture.updatePositionSlider(index);
     
     
                        index++;
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException ex) {
     
                            }
                    }else{
                        stop();
                    }
                }
            },
            Pause;
            public int index=1;
            public void action(){       }
            public void pause(){  mode=Pause;}
            public void stop(){ 
                index=1;
                mode= Stop;
                controlLecture.updatePositionSlider(index);
            }
            public void lecture(){mode=Lecture;}
        }
     
            /*
             * le thread de lecture
             */
            public LectureThread(JPanel owner, LecturePanel controleur){
                LectureThread.panelAModifier=owner;
                LectureThread.controlLecture=controleur;
                mode = Mode.Stop;
     
            }
     
            public void run(){
                while(true){
                    mode.action();
                }
     
            }
     
     
        }
    je pense que c'est assez éloquent de mon incompétence sur les différences, static/non-static. en effet ma façon de penser dans ce cas la j'utilise static uniquement pour permettre l'accession aux attributs dans la machine à états mais les implications sont bien plus grandes que ça.

  6. #6
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Ton code n'est pas très compréhensible...
    Tu as un thread qui a un état qui peut modifier l'état du thread


    De plus si je comprend bien, lorsque tu es en pause ou arrêté, cela revient à appeler une méthode action() vide, donc à faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(true){
                    // RIEN
                }
    Une belle méthode d'attente active qui va prendre 100% du CPU pour rien !!!


    Bref : détailles plutôt ton objectifs exact plutôt que la manière dont tu veux le faire...


    a++

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Par défaut
    mon objectif est de faire un thread qui parcoure un tableau avec une pause entre chaque case. ce thread peut être mis dans 3 états, un état lecture dans lequel il parcoure le tableau jusqu'au bout, un état pause il n'avance pas dans le tableau et conserve en mémoire l'index de la case à lire, et un état stop ou l'on remet l'index de la case courante à 0. j'avais essayé au départ en utilisant les methodes wait(), et notify() mais j'obtenais des Exceptions a tire l'arigot (larigot, l'arigaux, l'art y go, ... enfin voila quoi).

    EDIT : et l'état de ce thread doit être modifiable grâce à une interface swing bien sur.

  8. #8
    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 : 76
    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
    Citation Envoyé par dummygreg Voir le message
    j'avais essayé au départ en utilisant les methodes wait(), et notify() mais j'obtenais des Exceptions a tire l'arigot (larigot, l'arigaux, l'art y go, ... enfin voila quoi).
    <ton paternaliste: mille fois pardon!>
    un petit conseil général: quand il y a des exceptions il vaut mieux y faire face plutot que d'essayer d'y échapper.
    </ton paternaliste>
    on peut voir une idée de ces exceptions (ce ne serait pas par hasard "not owner"?)

Discussions similaires

  1. Envoi de formulaire avec attribution de valeur
    Par nicovoa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/08/2006, 18h22
  2. [débutant][C#] enum avec Find
    Par shinkyo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/06/2006, 00h47
  3. enum avec des long
    Par gnto dans le forum C
    Réponses: 5
    Dernier message: 15/05/2006, 12h45
  4. [MFC]Probleme avec attributs d'une LOGFONT
    Par Fildz dans le forum MFC
    Réponses: 3
    Dernier message: 08/01/2006, 17h59
  5. [VB.NET] Variable de type enum avec du string
    Par Mouse dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/01/2005, 18h22

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