Constructeur/methode

Résolu
laurent2403 Messages postés 80 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 23 février 2020 - 5 juil. 2012 à 12:32
laurent2403 Messages postés 80 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 23 février 2020 - 8 juil. 2012 à 10:08
bonjour a tous!
voila j'ai un petit soucis en java:
je suis débutant en prog java ,j'ai un petit programme a faire ,j'ai les attributs de ma classe qui sont:
nom,couleur,domestique o/n,poids ,age
j'ai crée mes guetters et setters,on me demande ensuite de créer un constructeur pour chat domestique,et chat sauvage.
pour le chat domestique je suppose que son constructeur est de paramètre de la classe Chat (<<ses attributs>>),comme je l'ai fait en faisant appel au constructeur de la classe Chat sous éclipse ,mais pour chat sauvage comment faire ? ai_je le droit de faire un second constructeur "chat sauvage" simplement en supprimant l'attribut "domestique"? ça me parait un peu gros quand même---
voila mon souci ,on me demande aussi de faire figurer les méthodes "dormir","manger","miauler",et franchement je vois pas comment faire apparaitre ceci,je débute en poo,j'aurais besoin d'un petit coup de pouce si bien sure ça ne pause pas de problème.
je vous remercie d'avance, bonne soirée a tous, et bien le bonjour de Nouméa.....

Laurent.

7 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
5 juil. 2012 à 21:56
Salut,

non, j'avais plus dans l'idée de faire une unique classe (chat) et ensuite des variables représentant les chats.


import java.awt.Color;

public class Cat {
  private String  name   = null;
  private Color   color  = null;
  private int     weight = 0;
  private int     age    = 0;
  private boolean wild   = false;
  
  public Cat() {
  }
  
  /* Trop d'arguments sur un constructeur tue celui qui lit le code et rend l'héritage imbuvable */
  public Cat(final String name, final Color color, final int weight,
      final int age, final boolean wild) {
    setName(name);
    setColor(color);
    setWeight(weight);
    setAge(age);
    setWild(wild);
  }
  
  @Override
  public String toString() {
    final StringBuilder sb = new StringBuilder();
    sb.append("Name: ").append(name);
    sb.append(", Color: ").append(color);
    sb.append(", Weight: ").append(weight).append("g");
    sb.append(", Age: ").append(age);
    sb.append(", Wild: ").append(wild);
    return sb.toString();
  }
  
  public boolean isWild() {
    return wild;
  }
  
  public void setWild(final boolean wild) {
    this.wild = wild;
  }
  
  public String getName() {
    return name;
  }
  
  public void setName(final String name) {
    this.name = name;
  }
  
  public Color getColor() {
    return color;
  }
  
  public void setColor(final Color color) {
    this.color = color;
  }
  
  public int getWeight() {
    return weight;
  }
  
  public void setWeight(final int weight) {
    this.weight = weight < 0 ? 0 : weight;
  }
  
  public int getAge() {
    return age;
  }
  
  public void setAge(final int age) {
    this.age = age < 0 ? 0 : age;
  }
}

.......
public static void main(String[] args) {
  Cat attila = new Cat("Attila", Color.BLACK, 5000, 3, false);
  Cat felix = new Cat("Felix", Color.GRAY, 2000, 1, true);
    
  System.out.println(attila);
  System.out.println(felix);
  /* On abandonne Attila au profit de Felix */
  attila.setWild(true);
  felix.setWild(false);
  System.out.println();
  System.out.println(attila);
  System.out.println(felix);
}
....


Je ne sais pas jusqu'où tu veux/dois pousser tes travaux mais le mieux serait de faire une classe animale(pour rester subjectif) et une classe chat qui hérite d'animale. Ensuite pourquoi pas enrichir la classe chat en ajoutant par exemple la race, soit si il s'agit d'un Persant, Chartreux, Gouttière, etc... et tout autres spécificités qu'ont les chats.



...on me demande aussi de faire figurer les méthodes "dormir","manger","miauler"...


Dormir les animaux dorment et mangent, les chats miaulent.

-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
3
cs_nour1991 Messages postés 3 Date d'inscription lundi 22 novembre 2010 Statut Membre Dernière intervention 16 juillet 2012
5 juil. 2012 à 12:51
tu peut utiliser l'héritage classe chat aprés 2 classes chat sauvage et domestique
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
5 juil. 2012 à 21:03
Salut,

Je suis très mitigé sur la création d'un héritage pour qualifier si le chat est sauvage ou domestique... un chat sauvage peut devenir domestique et un chat domestique peut devenir sauvage ce qui n'est pas possible si sauvage et domestique héritent de la classe chat.
Pour le coup je verrais plus la classe Chat avec un type (enum/boolean/autre) précisant si le chat est domestique ou pas. Comme ça il peut se faire domestiquer ou péter un câble et devenir sauvage ^^'


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
laurent2403 Messages postés 80 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 23 février 2020
5 juil. 2012 à 21:05
bonjour !
merci pour ta reponse ,donc si j'ai bien compris ,je fais une classe chat1 et une autre chat2 ce qui me semble coherent,comme ca elles ont chacune leurs constructeurs,voila merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
laurent2403 Messages postés 80 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 23 février 2020
6 juil. 2012 à 11:21
merci beaucoup pour ta réponse plus que détaillée....
que pense tu de mes constructeurs ,d’après toi ,est ce que cela peut faire l'affaire ?(j'ai pas mis les seters et gueters,car ce n'est pas ce qui me pose probleme...


////////////////////////////////////////////////////////////////////////////////////////////
class Chat{
int age;

String categorie;

String couleur;

String nom;

Double taille;
////////////////////////////////////////////////////////////////////////CONSTRUCTEUR N°1////////////////////////
Chat(int age, String categorie,String couleur,String nom,Double taille ){

this.age = age;

if ((categorie=="sauvage")||(categorie=="domestique")) {
this.categorie = categorie;

}
else System.out.println("Erreur d'initialisation");

this.couleur=couleur;

this.nom=nom;

this.taille = taille;

}
////////////////////////////////////////////////////////////////////////CONSTRUCTEUR N°2///////////////////////////////////////////////////////////
Chat(int age, String categorie,String couleur,String nom, double taille){

this.age = age;

switch (categorie) {
case 0 :
this.categorie = "sauvage";

break;

case 1:
this.categorie= "domestique";

break;

default :
System.out.println("Erreur d'initialisation");

break;

}

this.couleur = couleur;

this.nom=nom;

this.taille=taille;

}

}

CROIS TU QUE COMME CA JE PUISSE INSTANCIER DES OBJETS CHATS SAUVAGE ET DOMESTIQUE.
voila encore merci pour tes interventions très constructives @+.
Laurent
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
6 juil. 2012 à 12:27
Salut,

Ok je vais partir sur ton code:
Clairement il ne compilera pas...

Classe:
/*
Si ta classe est dans un fichier qui s'appel Chat.java elle devra commencer par public
donc ici sinon il est préférable de qualifier sa portée (protected, private).
*/
public class Chat{


Variables:
/*
Il est préférable de qualifier/limiter la portée (public, protected, private) de tes variables.
Comme je vais ajouter des getter/setter je les passes en private.
Le choix de la classe wrapper pour la taille à la place du type double est discutable
*/
private String categorie; 
private String couleur; 
private String nom; 
private Double taille; 


Constructeur 1:
/*
Il est préférable de qualifier/limiter la portée (public, protected, private) de tes constructeurs (ici on passe en public).
*/
public Chat(int age, String categorie,String couleur,String nom,Double taille ){ 
  this.age = age; 
   /*
    En Java si tu compares deux chaînes de caractères avec l'opérateur == tu compares les références et non les contenus.
    Du coup il faut passer (au besoin) par equals, compareTo, autre.
    Si possible utilise des constantes pour les chaînes de caractère qui sont en dure dans ton code.
    Bien qu'ici l'utilisation d'un enum serait plus propre.
    */
  if (categorie.equals("sauvage")||categorie.equals("domestique")) { 
    this.categorie = categorie; 
  } 
  else System.out.println("Erreur d'initialisation"); 
  this.couleur=couleur; 
  this.nom=nom; 
  this.taille = taille;
} 


Constructeur 2:
/*
 Il est préférable de qualifier/limiter la portée (public, protected,
 private) de tes constructeurs (ici on passe en public). Si tu veux utiliser
 un switch pour la categorie il faut que tu changes le type de la variable
 "categorie". Si possible utilise des constantes pour les chaînes de
 caractères qui sont en dure dans ton code. Bien qu'ici l'utilisation d'un
 enum serait plus propre.
 */
public Chat(int age, int categorie, String couleur,
    String nom, double taille) { 
  this.age = age;
  /*
   En java tu peux oublier l'idée d'utiliser un String comme condition.
   Si categorie est de type String "switch (categorie)" provoquera une erreur de compilation
   */
  switch (categorie) {
    case 0:
      this.categorie = "sauvage";
      break;
    case 1:
      this.categorie = "domestique";
      break;
    default:
      System.out.println("Erreur d'initialisation");
      break;
  }
  
  this.couleur = couleur;
  this.nom = nom;
  this.taille = taille;
}


Code complet:
public class Chat {
  private int    age;
  private String categorie;
  private String couleur;
  private String nom;
  private Double taille;
  
  //CONSTRUCTEUR N°1
  public Chat(final int age, final String categorie, final String couleur,
      final String nom, final Double taille) {
    this.age = age;

    if (categorie.equals("sauvage") || categorie.equals("domestique")) {
      this.categorie = categorie;
    } else
      System.out.println("Erreur d'initialisation");
    this.couleur = couleur;
    this.nom = nom;
    this.taille = taille;
  }
  
  // CONSTRUCTEUR N°2
  public Chat(int age, int categorie, String couleur,
      String nom, double taille) { 
    this.age = age;
    switch (categorie) {
      case 0:
        this.categorie = "sauvage";
        break;
      case 1:
        this.categorie = "domestique";
        break;
      default:
        System.out.println("Erreur d'initialisation");
        break;
    }
    
    this.couleur = couleur;
    this.nom = nom;
    this.taille = taille;
  }
  
  @Override
  public String toString() {
    final StringBuilder sb = new StringBuilder();
    sb.append("Nom: ").append(nom);
    sb.append(", Couleur: ").append(couleur);
    sb.append(", Taille: ").append(taille);
    sb.append(", Age: ").append(age);
    sb.append(", Categorie: ").append(categorie);
    return sb.toString();
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public String getCategorie() {
    return categorie;
  }

  public void setCategorie(String categorie) {
    this.categorie = categorie;
  }

  public String getCouleur() {
    return couleur;
  }

  public void setCouleur(String couleur) {
    this.couleur = couleur;
  }

  public String getNom() {
    return nom;
  }

  public void setNom(String nom) {
    this.nom = nom;
  }

  public Double getTaille() {
    return taille;
  }

  public void setTaille(Double taille) {
    this.taille = taille;
  }
  
}

.......
public static void main(String[] args) {
  Chat attila = new Chat(5, "domestique", "rouge", "Attila", .85);
  Chat felix = new Chat(1, "sauvage", "jaune", "Felix", .25);
  System.out.println(attila);
  System.out.println(felix);
}
.......



-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
laurent2403 Messages postés 80 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 23 février 2020
8 juil. 2012 à 10:08
bonjour mon ami....
merci beaucoup pour ton aide ,j'ai finalement fait qu'un constructeur qui me donne ou des sauvages ou des domestique ,ça compile très bien et puis ça fait exactement ce qui m'est demande .
si non j'ai un nouveau tp,j'ai un mal fou avec mon code secret qui ne doit être, une fois instancie unique autrement dit quand je crée l'objet carte bancaire ,après, je ne dois plus pouvoir le changer,je n'y arrive pas si cela ne te gène pas trop pourrais tu jeter un œil sur mes classes je t'en remercie d'avance.
Laurent
package CarteBancaire;


public class Cartebancaire {
private Titulaire titulaire =new Titulaire(" ", " ");
private long numero;
private int code_secret;

////////////////////////CONSTRUCTEUR//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public Cartebancaire(Titulaire titulaire, long numero, int code_secret) {
super();
this.titulaire = titulaire;
this.numero = numero;
this.code_secret = generate_code_secret();
}



//////////////////////////////////METHODES///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public static int generate_code_secret(){double n =Math.random()*9998;
int code_secret=1+(int)Math.round(n);
return code_secret;

}

////////////////////GUETTERS SETTERS///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public Titulaire getTitulaire() {
return titulaire;
}

public void setTitulaire(Titulaire titulaire) {
this.titulaire = titulaire;
}

public long getNumero() {
return numero;
}

public void setNumero(long numero) {
this.numero = numero;
}

public int getCode_secret() {
return code_secret;
}

public void setCode_secret(int code_secret) {
this.code_secret = code_secret;
}
}
0
Rejoignez-nous