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 :

Comment choisir un type d'attribut d'une classe?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 67
    Par défaut Comment choisir un type d'attribut d'une classe?
    Bonjour,

    j'ai les classes suivantes:

    1) la classe Carton qui est une liste d'articles(livre,vaisselle,...)
    2) La classe EsembleCarton qui est une liste de cartons
    3) La classe Article

    public class Article {

    1 ) private int poids; // Poids en Kg(1 à 50 kg) y a t' il un moyen en java de limiter
    le poid entre 1 à 50 kg

    2 ) private String degreResistance; // degre de resistance au choc prend fragile ou non
    fragile --> comment quel implémentation doit je faire pour que l'attribut degreResistance
    prend ces deux valeurs : fragile ou Non fragile?

    3 ) private String typeArticle; // soit livre, vaisselle, habit,divers ...) --> j'ai mis le type comme string mais j'ai pensé un arraylist ou un tableau simple---> est ce que ceci est juste ou pas sinon que choisir ?

    4 )private String descriptionArticle; // (chaine de caractères pouvant être vide).

    Description d’un carton
    Un carton est caractérisé par les informations suivantes :

    1--un identifiant (un entier qui est différent pour chaque carton);
    2 --le poids de la charge maximale du carton (1, 10 ou 50 kilos);// il existe 3 type de
    1, 10 ,50 kg ---> doit je mettre cet attribut en String ou comme un tableau comme
    un arraylist qui prend 3 valeurs , mais je crois que c'est lourd: , que choisir alors cry:

    3--la liste des objets contenus dans ce carton.

    public class Carton {

    private int idCarton;
    private int chargeMax;
    private HashMap Article = new HashMap // c'est bien ou je dois mettre une autre collection


    --la classe ensembleCartons(une liste de cartons)
    Un ensemble de cartons référencera une liste de cartons et comportera une chaîne de caractères
    (non vide) d´ecrivant l’ensemble. On considérera qu’il ne peut y avoir plus de 10 ensembles de cartons. Un ensemble de carton sera référencé par un numéro entier.

    public class EnsCarton {

    private int idEnsCarton; //Identifiant de cette classe auto incrément à chaque ajout de carton --> doit je utiliser la classe Integer ou juste un un int (type primitif)que j'incrémente avec une boucle..
    private String descripEnsCarton;
    private HashMap Article = new HashMap //ou private LinkedList <Carton>listCart;
    // quelle collection est mieux dans ce contexte..

    public EnsCarton(int idEnsC, String chEns ){

    this.idEnsCarton = idEnsC;
    this.descripEnsCarton = chEns;


    Merci pour votre réponse

  2. #2
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    1 ) private int poids; // Poids en Kg(1 à 50 kg) y a t' il un moyen en java de limiter
    par l'intermediaire de ton setter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void setPoids(int poids){
    if ( (poids>TROPLOURD) || poids < TROPLEGER ){
    //traitement --> lancer exception ou  tronquer ...
    }
    }
    Pour le 2 eme et 3 eme pareil mais tu autoriser seulement les valeurs de deux constantes FRAGILE et PAS_FRAGILE

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 159
    Par défaut
    public class Carton {

    private int idCarton;
    private int chargeMax;
    private HashMap Article = new HashMap // c'est bien ou je dois mettre une autre collection
    Un map ça relacione un élément avec une clef unique, ce qui n'est pas ton cas. Tu devrais donc utiliser une List. Pour choisir entre une LinkedList ou une ArrayList ça dépend surtout du type d'usage des setters et getter, vas voir la javadoc pour comprendre la différence. Essaye aussi d'utiliser des variables en minuscules et au pluriel pour les collections.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private List <Article> articles = new ArrayList <Article> ();
    public class EnsCarton {

    private int idEnsCarton; //Identifiant de cette classe auto incrément à chaque ajout de carton --> doit je utiliser la classe Integer ou juste un un int (type primitif)que j'incrémente avec une boucle..
    private String descripEnsCarton;
    private HashMap Article = new HashMap //ou private LinkedList <Carton>listCart;
    // quelle collection est mieux dans ce contexte..
    Pareil... utilise une List.
    Utilise aussi un nom plus explicite, là je ne vois pas que vient faire le nom Article.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private List <Carton> cartons = new ArrayList <Carton> ();

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 159
    Par défaut
    3 ) private String typeArticle; // soit livre, vaisselle, habit,divers ...) --> j'ai mis le type comme string mais j'ai pensé un arraylist ou un tableau simple---> est ce que ceci est juste ou pas sinon que choisir ?
    Tout dépend de l'usage. Si les types d'articles sont finis et doivent avoir des propiétes et taitements particuliers, tu devrais utiliser l'orientation objet en créant une Classe Article de laquelle heritent les classes Livre, Vaisselle, ... et dans tu aurais dans checune d'elles, une méthode toString que écrira la description de l'article. Mais dans ton cas je pense que le simple String est suffisant.

    private int idEnsCarton; //Identifiant de cette classe auto incrément à chaque ajout de carton --> doit je utiliser la classe Integer ou juste un un int (type primitif)que j'incrémente avec une boucle..
    A mon avis c'est pas important vu qu'il y a l'autoboxing, autant utiliser une primitive int.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 67
    Par défaut
    Rebonjour,

    1-->pour le 2 eme et 3 eme pareil mais tu autoriser seulement les valeurs de deux constantes FRAGILE et PAS_FRAGILE

    Je n'ai pas bien compris ta réponse pouvez me donner un exple SVP:
    car l'attribut degreResistance; qui prend soit fragile ou non fragile je dois les manipuler par la suite.

    2--> Ce que je dois dans mon miniprojet :

    1) créer un nouvel ensemble de cartons;
    2) inséer un objet dans un ensemble de cartons;
    3)lister les num´ros des cartons d’un ensemble de cartons;
    4) lister le contenu d’un carton;
    5 )afficher la place (en kilo) disponible dans un carton;
    6) afficher le poids total d’un ensemble de cartons;
    7) afficher le poids total de l’ensemble des ensembles de cartons;
    8)lister tous les objets d’un type donn´ (livre, vaisselle, disque ou ´lectrom´nager); on
    affichera en meme temps le numéro de carton et d’ensemble de cartons dans lequel l’objet est placé

    Vous me dite que la clé pour la HashMap est unique.
    En effet, j'ai besoin que l'identifaint de la classe Carton (un entier qui est différent pour chaque carton) soit unique equivalent d'une clé primaire, et de meme pour la a classe ensembleCartons(une liste de cartons) a aussi un Identifiant en int unique.

    Une autre question :
    Cas 1 private List <Carton> cartons = new ArrayList <Carton> ();

    Cas 2 private ArrayList <Carton> cartons = new ArrayList <Carton> ()
    j'ai vu la jadoc, et donc List est un intercace que la classe ArrayList implémente
    mais quelles conséquences et quelles différences entre le cas1 et le cas 2.
    de meme pour private Map <Truc> mp = new HashMap <Truc> ();

    J'ai mis le texte du début en couleur car je ne trouve pas le bouton pour citer un texte dans le forum
    Merci pour vos réponse

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 159
    Par défaut
    1) créer un nouvel ensemble de cartons;
    Disons dans la méthode main que tu mets dans une Classe que t'appelles Aplication ou Main.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EnsembleCartons ensemble = new EnsembleCartons();
    2) inséer un objet dans un ensemble de cartons;
    Je suppose que ce que t'appelle objet c'est un carton. Tu as donc besoin d'une méthode add(Carton carton) dans ta classe EnsembleCartons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void add(Carton carton){
     cartons.add(carton);
    }
    Bien entendu, cartons c'est la liste de type ArrayList <Carton> de l'objet.

    3)lister les num´ros des cartons d’un ensemble de cartons;
    Tu crée un enouvelle méthode dans la classe EnsembleCartons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void printCartons(){
       for(Carton carton: cartons){
          System.out.println("Carton : " + carton.id);
       }
    }
    4) lister le contenu d’un carton;
    Pareil mais dans la classe Carton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public void printArticles(){
       for(Article article: articles){
          System.out.println("Article : " + article.type_article);
       }
     }
    articles c'est la liste de type ArrayList <Article> de l'objet Carton.

    5 )afficher la place (en kilo) disponible dans un carton;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      public int poidsDispo(){
    int poids = 0;
        for(Article article: articles){
           poids += article.poids;
        }
    return poidsMaxCarton - poids;
      }
    6) afficher le poids total d’un ensemble de cartons;
    Dans EnsembleCartons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       public int poidsCartons(){
    int poids = 0;
         for(Carton carton: cartons){
            poids += carton.poids;
         }
    return poids;
       }
    7) afficher le poids total de l’ensemble des ensembles de cartons;
    Heu... j'avais compris qu'il y avait qu'un seul ensemble... bon donc dans ta classe Main tu peux avoir une liste d'ensembles de cartons et une méthode semblable à poidsCartons()

    8)lister tous les objets d’un type donn´ (livre, vaisselle, disque ou ´lectrom´nager); on
    affichera en meme temps le numéro de carton et d’ensemble de cartons dans lequel l’objet est placé
    Dans Main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    getAllType(String type){
       for(EnsembleCartons ensemble: ensembles){
          for(Carton carton: ensemble.cartons){
             for(Article article: carton.articles){
                  if(article.type_article.equals(type){
                     System.out.println("Article de type " + type + " dans carton " + carton.id + " dans ensemble " + ensemble.id);
                 }
             }
          }
       }
    }
    Bien sur tu peux utiliser des getters au lieu de faire par exemple ensemble.cartons tu pourrais avoir ensemble.getCartons() c'est plus propre.

    Vous me dite que la clé pour la HashMap est unique.
    Effectivement, mais dans ton cas ça ne sert pas. L'interet d'un map c'est quand tu veux récuperer un objet particulier en fonction d'un clef. C'est à dire que pour les cartons, ils n'auraient pas l'id dans leur classe, l'id serais la clef dans le map.

    J'ai mis le texte du début en couleur car je ne trouve pas le bouton pour citer un texte dans le forum
    La bulle, comme dans les BD.

    Merci pour vos réponse
    Pas de quoi, en général je ne donne pas de réponses aussi complétes mais je sait qu'au début la POO c'est pas évident.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 67
    Par défaut
    Bonjour,

    Merci beaucoup pour cette réponse très complète.
    for(EnsembleCartons ensemble: ensembles){
    for(Carton carton: ensemble.cartons)
    je suis tjs en age des dinosaures avec mes vielles boucles for(int i, .......),et que je ne comprends pas cette nouvelle boucle for.
    Comment ce fais l'incrémentation s'il n' y a pas de compteur comme i
    Merci

  8. #8
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    C'est simple, au lieu de prendre un index et de se balader dans la collection avec cet index, java récupère les instances chaînées directement au lieu de passer par une recherche d'index.

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 159
    Par défaut
    Je te donne un exemple pour préciser ce que dit Rayndell:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(Carton carton: ensemble.cartons)
    A gauche du symbole ":" tu as le type d'objet que contient la collection et une variable qui changera de valeur à chaque itération. A droite tu as la collection.
    Le code est donc équivalent à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Iterator iterator = ensemble.cartons.iterator();
    while(iterator.hasNext()){
       Carton carton = iterator.next();
    }

Discussions similaires

  1. Récupérer le nombre et le type d'attribut d'une class
    Par adurandet dans le forum Langage
    Réponses: 5
    Dernier message: 27/11/2009, 18h19
  2. Réponses: 5
    Dernier message: 18/09/2008, 15h02
  3. Réponses: 5
    Dernier message: 15/02/2008, 21h10
  4. comment choisir dynamiquement un fichier *.js externe à une feuille html
    Par j.p.mignot dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/01/2008, 08h51
  5. Comment choisir entre type et classe ?
    Par Invité dans le forum UML
    Réponses: 5
    Dernier message: 23/02/2007, 00h10

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