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 :

[DEBUTANT] Conseil sur la programmation orienté objet


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut [DEBUTANT] Conseil sur la programmation orienté objet
    Bonjour,

    je débute en java et je me pose une question,

    J'ai crée une classe lblPanel(Elle n'a pas trop d'interêt mais c juste pour l'exemple) dont voici la définition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class lblPanel extends JPanel {
    JLabel lbl;
    int entier;
    }
    Dans une autre classe, j'ai crée une matrice d'objet qui sont tous des instances de la classe lblPanel. Pour certaines conditions, je dois mettre le texte du lblJour en rouge plutôt qu'en noir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class autreClasse {
    lblPanel []label;
     
    public autreClasse(){
    label=new lblPanel[10];
     }
    }
    Dans la classe autreClasse, j'ai crée une méthode redaction.
    D'après vous pour changer la couleur du texte, vaut-il mieux faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void redaction(int i) {
    if (condition) 
        label[i].lbl.setForeground(Color.RED);
    else label[i].lbl.setForeground(Color.BLACK);
    }
    ou dois-je développer une méthode dans la classe lblPanel qui change la couleur du texte de lbl ?

    Merci pour votre aide.
    Ciao.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 85
    Points
    85
    Par défaut Re: [DEBUTANT] Conseil sur la programmation orienté objet
    Salut,

    Citation Envoyé par etiennegaloup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void redaction(int i) {
    if (condition) 
        label[i].lbl.setForeground(Color.RED);
    else label[i].lbl.setForeground(Color.BLACK);
    }
    Moi je ferais comme ça.
    En plus c'est prévu comme ça à l'origine, alors pourquoi changer.

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    D'un point de vue objet ca ne change pas grand chose, autant garder la première solution.
    Par contre si tu veux faire de la porgrammation objet plus propre, met les membres de ta classe lblPanel en private et utilise des accesseurs (méthode get et set) pour y accèder en lecture ou en écriture depuis les autres classes.

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Salut,

    mais vu que les méthodes définissent le comportement des objets, si on utilise pas de méthode pour manipuler les variables d'instance d'un objet, à quoi servent-elles ? (Je vous avais dit, je débute)

    Autre p'tite question:
    Supposons que ma classe lblPanel contienne d'autres éléments comme un bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class lblPanel extends JPanel {
    JLabel lbl;
    JButton bton;
    int entier;
    }
    Si je souhaite dans ma classe autreClasse rendre invisible les éléments,
    est-il préférable de redéfinir dans ma classe lblPanel la méthode setVisible du JPanel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class lblPanel extends JPanel {
    ...
    public void setVisible(boolean bool) {
    lbl.setVisible(bool);
    bton.setVisible(bool);
    }
    ...
    }
    ou tout simplement mettre dans ma classe autreClasse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    label[i].lbl.setVisible(false);
    label[i].bton.setVisible(false);
    Merci pour votre aide.
    Ciao

  5. #5
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    bonsoir,

    une classe doit réaliser une abstraction de données, et présenter aux autres classes des méthodes masquant la représentation interne des attributs. Dans ton exemple, la couleur du label est une caractéristique intrinsèque de ta classe lblPanel, car si tu laisses aux autres classes l'accès public à l'attribut, rien ne leur interdit de modifier d'autres caractéristiques du label, la couleur de fond, le texte, la police, ...
    donc il faut que tu définisses précisément quelles sont les opérations que tu rends publiques au niveau de ta classe lblPanel qui délégueront leur traitement au label lbt et/ou au bouton bton, afin d'avoir l'entière maîtrise de ce qui se passe sur ces derniers. Plus tu masques d'informations, plus ton logiciel est robuste et fiable.
    Dans ton cas, qq chose comme ça :
    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
    public class LblPanel extends JPanel { 
     
      private JLabel lbl; 
      private JButton bton; 
      private int entier;
     
      public LblPanel() {
      ...
      }
     
      public void setForegroundForLabel(Color foreground) {
        if (lbt != null) {
            lbt.setForeground(foreground);
        }
      }
     
      public setComponentVisibility(boolean visible) {
     
        if (lbt != null) {
            lbt.setVisible(visible);
        }
        if (bton != null) {
            bton.setVisible(visible);
        }   
      }
    } 
     
    public class AutreClasse { 
     
      lblPanel[] label; 
     
      public AutreClasse(){ 
         label = new lblPanel[10]; 
      }
     
      public void redaction(int i) { 
         label[i].setForegroundForLabel(condition ? Color.RED : Color.BLACK); 
      }
    }

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Bonsoir,

    merci pour cette réponse, je saisis déjà mieux,

    Citation Envoyé par herve91
    public setComponentVisibility(boolean visible) {

    if (lbt != null) {
    lbt.setVisible(visible);
    }
    if (bton != null) {
    bton.setVisible(visible);
    }
    }
    par contre encore une question, tu me conseilles d'utiliser setComponentVisibility, mais ça ne convient pas de redéfinir la méthode setVisible ?

    Merci
    +

  7. #7
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Quand tu redéfinis une méthode, il faut en préserver la sémantique. Dans le cas de setVisible : positionne l'état visible / invisible du composant. Tu peux très bien décider de redéfinir setVisible comme tu l'as fait, mais alors il faut préserver le comportement par défaut et donc compléter comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void setVisible(boolean bool) {
      super.setVisible(bool);
      lbl.setVisible(bool); 
      bton.setVisible(bool); 
    }
    Avec ta redéfinition, tu ne mets pas à jour l'attribut visible du panel, donc tu n'es pas conforme à la spécification.

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Bonjour

    je te remerice beaucoup pour tes réponses...

    Je vois déjà mieux le principe...

    A +

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

Discussions similaires

  1. tutoriel programmation orienté objet
    Par azouzdoc dans le forum MATLAB
    Réponses: 9
    Dernier message: 08/09/2017, 10h04
  2. Réponses: 6
    Dernier message: 23/09/2013, 14h12
  3. Réponses: 4
    Dernier message: 08/01/2009, 11h56
  4. Question sur la programmation Orienté-Objet
    Par gibea00 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/11/2008, 19h21

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