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

Java Discussion :

Aide pour un refactoring


Sujet :

Java

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1
    Par défaut Aide pour un refactoring
    Bonjour,

    J'ai un projet à réaliser dans lequel je dois effectuer le refactoring d'un programme java.
    Je vous rassure c'est du refactoring de base.

    Je vous présente rapidement le programme.
    C'est un gestionnaire de clinique et d'animaux.
    En gros on peut ajouter de nouveaux veterinaires. Et pour chaque veterinaires on peut leur ajouter des chiens et des chats.
    Il y a une classe parent Animals, et deux classes enfant Chiens et Chats qui ne contiennent pas les memes informations.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Animals {
    	public String ID;
    	public String type;
     
    	public void setName(String N) {
    		Name = N;
    	}
     
    	public String getName() {
    		return Name;
    	}
     
    	private String Name;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Cat extends Animals {
    	public void setFav_cat_toy(String toy) {
    		fav_cat_toy = toy;
    	}
     
    	public String getFav_cat_toy() {
    		return fav_cat_toy;
    	}
     
    	private String fav_cat_toy;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Dog extends Animals {
    	public void setK9_family(String fam) {
    		K9_family = fam;
    	}
     
    	public String getK9_family() {
    		return K9_family;
    	}
     
    	private String K9_family;
    }
    C'est aussi simple que ça.

    Le problème que je rencontre c'est que je n'arrive pas a simplifié un bout de code redondant.

    Dans la classe vetclinic (dans laquelle on peut créer un veterinaire et lui ajouter des chiens et des chats), il y a une methode qui permet de lister tout les animaux en possessions du véterinaire.

    Le code ressemble a ç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
    public String listAll_animals() {
    		String ret = "";
    		int i = 0;
     
    		ret = "Animal: Cats\n";
    		for (i = 0; i < numCats; i++) {
    			Cat c = Catlist[i];
    			ret += "\t ID: " + c.ID + " Name: " + c.getName() + " Type: "
    					+ c.type + " Toy: " + c.getFav_cat_toy() + "\n";
    		}
     
    		ret += "\nAnimal: Dogs\n";
    		for (i = 0; i < numDogs; i++) {
    			Dog d = Doglist[i];
    			ret += "\t ID: " + d.ID + " Name: " + d.getName() + " Type: "
    					+ d.type + " K9_family: " + d.getK9_family() + "\n";
    		}
     
    		return ret;
    	}
    Comme vous le voyez ce code est redondant et qui plus est, il n'est pas optimum.

    Je voudrais le modifier afin de le rendre autonome suivant le type d'animal (chien ou chat). Je voudrais que ce bout de code fonctionne, meme si j'ajoute une nouvelle classe enfant Souris. en faisant listAll_animals, j'aurais ainsi la liste des chiens, des chats et des souris de ce veterinaires.


    Mais voila, je ne sais pas trop comment m'y prendre, es-ce que quelqu'un pourrait me donner quelques indices?
    Si vous avez des questions, n'hésitez pas


    Merci d'avance

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    je te conseillerais de redéfinir la méthode toString() qui sert exactement à ce que tu veux : afficher une description d'un objet.

    Ainsi, tu peux la définir au niveau de ta classe parente pour tout ce qui est commun et la redéfinir (en utilisant un appel à super.toString()) pour y ajouter la description spécifique.

    Dans ton affichage général, tu n'auras plus qu'à appeler la méthode toString().

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    dans ce cas ci, le toString() serait l'idéal.

    D'une manière général, pour ce genre de code (traitement différentié mais traitement sur chaque animal), c'est créer une méthode dans Animal et dans Cat et Dog, redéfinir cette méthode pour qu'elle fasse un truc spécifique pour les chats et les chiens.

Discussions similaires

  1. Outil d'aide pour le refactoring de code
    Par progfou dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 14/03/2008, 14h04
  2. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  3. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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