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

avec Java Discussion :

Les classes! un casse tête


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Les classes! un casse tête
    Bonjour, je débute sur Java et je souhaite vous poser une question :

    Je suppose que j'ai 3 classes hérités de ma classe mère (psf) de produits semi fini :

    psf1 est composé d'un métal et pétrole
    psf2 est compose de deux métaux
    psf3 est composé d'un métal et d'un liquide
    etc
    au total j'ai 8 classes de produits semi fini basé soit sur métal ou pétrole ou liquide ou ....

    jusqu'à là ca va!

    mais dans le cas où je veux déclarer des nouveaux produits semi fini (pssf) composés des produits semi fini(psf) que j'ai composé plus haut. comment faut il faire?
    au lieu de mettre toutes les combinaison possible, est ce qu'il est possible de dire à java que les classes psf1...psf8(avec chacune sa caractéristique) font partie d'une même classe.

    Merci pour votre aide.

  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
    commencez par nous donnez votre code actuel, on y verra plus clair et on pourra vous dégager de là

    Dans l'absolu, je dirais que vous avez besoin de deux classes

    une classe Composant (on y trouve le liquide, le métal, etc)
    une classe ProduitSemiFini, qui hérite de Produit et est composé de plusieurs produits:


    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
    public class Composant {
       public Composant(String name){....}
       // méthodes de chaque produit
    }
     
    public class ProduitSemiFini extends Composant {
       private List<Composant> contenu = new ArrayList<Composant>();
     
       public ProduitSemiFini(String name, Composant... composants){
           super(name);
           for (Composant c : composants) contenu.add(c);
       }
    }
     
    Composant fer = new Composant("fer");
    Composant carbone = new Composant("Carbone");
    ProduitSemiFini acier = new ProduitSemiFini("acier",fer,carbone);
    ProduitSemiFini cable = new ProduitSemiFini("cable",acier,new Composant("plastique"));

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    commencez par nous donnez votre code actuel, on y verra plus clair et on pourra vous dégager de là

    Dans l'absolu, je dirais que vous avez besoin de deux classes

    une classe Composant (on y trouve le liquide, le métal, etc)
    une classe ProduitSemiFini, qui hérite de Produit et est composé de plusieurs produits:


    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
    public class Composant {
       public Composant(String name){....}
       // méthodes de chaque produit
    }
     
    public class ProduitSemiFini extends Composant {
       private List<Composant> contenu = new ArrayList<Composant>();
     
       public ProduitSemiFini(String name, Composant... composants){
           super(name);
           for (Composant c : composants) contenu.add(c);
       }
    }
     
    Composant fer = new Composant("fer");
    Composant carbone = new Composant("Carbone");
    ProduitSemiFini acier = new ProduitSemiFini("acier",fer,carbone);
    ProduitSemiFini cable = new ProduitSemiFini("cable",acier,new Composant("plastique"));
    Bonsoir et merci

    C'est exactement cela que je voulais avoir! et en si peu de temps!
    J'ai quand même pls question :
    Pourquoi List est décalrée en Private, nous pouvons la déclarer en protected, ca ne cause pas de problèmes!
    Dans votre exemple, les composantes sont en réalité au nombre de 3, mais est ce que je peux faire cela :
    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
    public class Composant {
       public Composant(String name){....}
       // méthodes de chaque produit
    }
    
    public class ProduitSemiFini extends Composant {
       private List<Composant> contenu = new ArrayList<Composant>();
    
       public ProduitSemiFini(String name, Composant... composants){
           super(name);
           for (Composant c : composants) contenu.add(c);
       }
    }
    
    Composant fer = new Composant("fer");
    Composant carbone = new Composant("Carbone");
    Composant essence= new Composant("essence");
    ProduitSemiFini acier = new ProduitSemiFini("acier",fer,carbone,essence);
    ProduitSemiFini cable = new ProduitSemiFini("cable",acier,new Composant("plastique"));
    [/QUOTE]

    Avoir donc une classe modifiable ou bien il faut créer une nouvelle classe.

    je vais essayer ce code et je vous remercie

  4. #4
    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 georgeslb Voir le message
    Pourquoi List est décalrée en Private, nous pouvons la déclarer en protected, ca ne cause pas de problèmes!
    L'habitude. A moins d'avoir une bonne raison de faire autrement, je met toujours mes membres en private par défaut.

    Dans votre exemple, les composantes sont en réalité au nombre de 3
    Non, 2 plus le nom :p
    , mais est ce que je peux faire cela :
    Oui, c'est pour ca que le constructeur accepte un nombre variable de "Composant"

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    L'habitude. A moins d'avoir une bonne raison de faire autrement, je met toujours mes membres en private par défaut.


    Non, 2 plus le nom :p

    Oui, c'est pour ca que le constructeur accepte un nombre variable de "Composant"
    Merci tchize

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    L'habitude. A moins d'avoir une bonne raison de faire autrement, je met toujours mes membres en private par défaut.


    Non, 2 plus le nom :p

    Oui, c'est pour ca que le constructeur accepte un nombre variable de "Composant"
    Merci tchize

    J'ai une autre question :

    si maintenant je souhaite ajouter des ratios. par exemple :
    public class Composant {
    public Composant(String name){....}
    // méthodes de chaque produit
    }

    public class ProduitSemiFini extends Composant {
    private List<Composant> contenu = new ArrayList<Composant>();

    public ProduitSemiFini(String name, Composant... composants){
    super(name);
    for (Composant c : composants) contenu.add(c);
    }
    }

    Composant fer = new Composant("fer");
    Composant carbone = new Composant("Carbone");
    ProduitSemiFini acier = new ProduitSemiFini("acier",0.3,fer,0.4,carbone);
    Comment est ce que je pourrais faire

    Merci

  7. #7
    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
    dans ce cas tu évite de passer par le constructeur, ca va devenir le bordel. Tu crée ton produit "vide" et tu crée une méthode "addComposant" pour ajouter ton composant. Maintenant que t'as le principe, tu met ce que tu veux comme méthodes et contenu dans tes classes hein

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    dans ce cas tu évite de passer par le constructeur, ca va devenir le bordel. Tu crée ton produit "vide" et tu crée une méthode "addComposant" pour ajouter ton composant. Maintenant que t'as le principe, tu met ce que tu veux comme méthodes et contenu dans tes classes hein
    Merci tchize

    Est ce que tu cois que si je crée 3 classes différents avec la première contenant 1 composante et 1 ratio en double, la deuxième deux et la 3ème 3 composantes et 3 ratio en double (étant donné que je limiterais cela à 3 composantes) ca compliquerai les choses. Est ce que dans ce cas la troisième classe hérite de la deuxième qui hérite de la première qui hérite de la classe composante ou ca te parait un shéma compliqué? à éviter !

  9. #9
    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
    non, ca n'a aucun sens. Tu peux créer plusieurs constructeurs à ta classe si ça t'arrange. Il n'y a pas de raison de créer trois classe pour trois fois le même problème légèrement différent, il faut penser un peu à factoriser le code pour éviter de se retapper du code en double, en triple etc

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    non, ca n'a aucun sens. Tu peux créer plusieurs constructeurs à ta classe si ça t'arrange. Il n'y a pas de raison de créer trois classe pour trois fois le même problème légèrement différent, il faut penser un peu à factoriser le code pour éviter de se retapper du code en double, en triple etc
    ok d'accord
    je vais tenter cette solution
    Je te remercie

Discussions similaires

  1. Conception d'une classe : casse-tête
    Par Tomaka17 dans le forum C++
    Réponses: 9
    Dernier message: 22/03/2009, 17h09
  2. Réponses: 1
    Dernier message: 10/03/2009, 17h05
  3. [XSL~FO] pour les amateurs de casse tête.
    Par lilian300703 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/12/2007, 12h10
  4. casse-tête sur les adresses (classe C et A)
    Par HuZimA dans le forum Protocoles
    Réponses: 7
    Dernier message: 27/07/2006, 13h05
  5. Classe, pile, pointeurs et casse-tête!
    Par zazaraignée dans le forum Langage
    Réponses: 6
    Dernier message: 26/09/2005, 16h57

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