Votre avis m'intéresse

Résolu
mau007 Messages postés 20 Date d'inscription lundi 2 janvier 2006 Statut Membre Dernière intervention 20 mai 2011 - 28 avril 2011 à 23:09
 Utilisateur anonyme - 4 mai 2011 à 22:24
Bonjour à tous,

je suis débutant dans le développement java et je souhaiterais vous soumettre mon début de code afin de savoir ce qu'en pense les plus expérimentés.

Class ClassSt
  {
  private String champI;
  private String champEx;
  private String champEn;
  private List <ClassTr> champClassStTr = new ArrayList <ClassTr>();
  
  // getter & setter pour chaque attribut
  }

Class ClassTr
  {
  private String champUn;
  private String champDeux;
  private String champTrois;
  private String champQuatre;

  // getter & setters pour chaque attribut
  }

Class ClassPar extends ClassComp
  {
  private String champI;
  private List <ClassComp> champClassParComp = new ArrayList <ClassComp>();
  private List <ClassTr> champClassParTr = new ArrayList <ClassTr>();

 // getter & setter pour chaque attribut
  }

Class ClassComp extends ClassSt
  {
  private String champI;
  private String champHis;
  private List <ClassTr> champClassCompTr = new ArrayList <ClassTr>();
  private List <ClassSt> champClassCompSt = new ArrayList <ClassSt>();

  // getter & Setter pour chaque attribut
  }


Voilà.. vous avez les définitions de mes classes. Je ne pense pas que ce soit fait de manière optimale car:

-1- J'ai certains champs (champI par exemple) qui se trouve dans différentes classes.
-2- J'ai certains getters & setters qui font exactement le même travail (getter & setter de champClassCompTr & champClassStTr possède le même code.

J'ai entendu parler des classes abstraites et des interfaces... Mais je ne comprends pas ce que ca apporte de plus.

Est-ce que cela semble correct? Peut-on l'améliorer (certainement je dirais!! :)) )




Merci d'avance

10 réponses

Utilisateur anonyme
29 avril 2011 à 18:09
Alors pour ton code :
D'un point de vu casse (minuscules/majuscules) pour le nom des tes attributs et tes classes c'est bon.

Maintenant pour champI :
Si jamais pour chaque classe champI a un rôle différent, tu peux le laisser ça ne gène pas.
Maintenant, si champI fais le même genre de choses dans tes classes, tu peux utiliser l'héritage.
Par exemple, tu mettrais ton attribut champI dans une classe dont héritera celles qui ont besoin de champI.
Si jamais tu as un ou deux champs en commun entre plusieurs classes, ce n'est pas dramatique en soit. Par contre si tu en as beaucoup, essaye de voir avec l'héritage.

Pour tes getters et setters :
Un getter et un setter sont des méthodes mais particulières. Ils ont pour but de donner une valeur (setters) ou de renvoyer une valeur (getters) d'un attribut de ta classe. Par conséquence, tu auras dans ta classe autant de getters et de setters que d'attributs. Tu ne peux pas faire autrement, ces méthodes doivent être dans la classe ayant les attributs utilisés.

Si jamais ça aurait été des méthodes différentes et communes entre les classes, là tu utilises l'héritage ou les interfaces.

Les classes abstraites :
On s'en sert souvent pour l'héritage justement. Elles peuvent contenir des attributs et des méthodes. Elles sont dites "abstraites" car on ne peut pas les instancier (pas de new). Toute classe ayant une méthode abstraite (abstract) doit être déclarée comme "abstraite". Une méthode abstraite est une méthode qui n'a pas de code et qui doit être obligatoirement être redéfinie dans les classes filles.
Ici, ce type de classe ne te servira pas à grand chose.

Enfin, les interfaces...
...Ne vont aps te servir pour tes getters et setters. Une interface sert à contenir des déclarations de méthodes. Une classe implémenté une interface pour pouvoir redéfinir les méthodes et les utiliser. Un peu comme un héritage. Une classe peut implémenter plusieurs interfaces mais peut hériter que d'une classe au maximum.

Je ne sais pas si j'ai été suffisamment clair alors n'hésite pas à poser des questions.

-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --
3
mau007 Messages postés 20 Date d'inscription lundi 2 janvier 2006 Statut Membre Dernière intervention 20 mai 2011
30 avril 2011 à 11:36
Bonjour Pylouq,


un grand merci pour tes explications. Et je te rassure, même avec mon niveau de béotien, tes explications sont claires :)

Par contre, entre le moment où j'ai posté ce message et aujourd'hui, j'ai déjà pas mal progressé et j'ai justement utilisé une classe abstraite car je n'aime pas dupliquer des champs identiques (champI par exemple) et des méthodes identique (getter et setter de champI entre-autre).

Donc, tout mon code de départ ressemble à ceci maintenant:


Class ClassAbstractSt
  {
  private String champI;
  private List <ClassTr> champClassTr = new ArrayList <ClassTr>();

  // getter & setter de champI
  public String getChampI()
    {
    return champI;
    }
  public void setChampI(String champI)
    {
    this.champI = champI;
    }

  // getter & setter de champClassTr
  public List getChampClassTr()
    {
    return champClassTr
    }
  public void setChampClassTr()
    {
    ClassTr myTr = new ClassTr();
    ...
    ...
    champClassTr.add(myTr);
    }
  }

Class ClassSt extends ClassAbstractSt
  {
  private String champEx;
  private String champEn;
  
  // getter & setter pour chaque attribut
  }

Class ClassTr
  {
  private String champUn;
  private String champDeux;
  private String champTrois;
  private String champQuatre;

  // getter & setters pour chaque attribut
  }

Class ClassPar extends ClassComp
  {
  private List <ClassComp> champClassParComp = new ArrayList <ClassComp>();

 // getter & setter pour chaque attribut
  }

Class ClassComp extends ClassSt
  {
  private String champHis;
  private List <ClassSt> champClassCompSt = new ArrayList <ClassSt>();

  // getter & Setter pour chaque attribut
  }


Même si l'intérêt d'une classe abstraite n'est pas très intéressante dans mon cas (quoique... :))), je trouve que l'utiliser permet d'avoir un code assez "propre". Et comme tout débutant, autant apprendre les bonnes manières de suite.. :)

Est-ce que cela reste cohérent?

Merci à tous ceux qui prendront la peine de me lire.. :)
0
Utilisateur anonyme
30 avril 2011 à 19:06
Juste une chose qui me titille :

Un setter donne un valeur à un attribut. Cette valeur est passée en paramètre.
Dans ton setChampClassTr tu crées l'objet directement dans ta méthode sans rien passer un paramètre.

Donc je te conseille de changer le nom de ta méthode ou alors de passer l'objet en paramètre comme les autres setters.

Sinon, simple curiosité, en quoi consiste ton projet ?


-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --
0
mau007 Messages postés 20 Date d'inscription lundi 2 janvier 2006 Statut Membre Dernière intervention 20 mai 2011
30 avril 2011 à 19:44
Bien vu Pylouq pour le setChampClassTr.
j'ai oublié de mettre les paramètres.

Sinon en ce qui concerne mon projet, je dois lire et interpréter le contenu d'un fichier ScXML. Et je me suis fixé 3 étapes:

- Lire le fichier XMl avec recherche de tous les attributs (ca s'est fait)
- Mise en mémoire du fichier XML dans des classes que j'aurais définie (c'est en cours)
- Exécution du fichier via les classes.


En gros, les fichiers SCXML sont des machines à Etat mis sous forme XML..

Bref, je trouve que c'est assez costaud... enfin pour moi qui n'y connais(sais) presque rien en Java.

Merci encore pour tes précieux conseils.
0

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

Posez votre question
Utilisateur anonyme
1 mai 2011 à 12:32
Pas de quoi, si jamais tu as des questions n'hésite pas.

Pense à utiliser "réponse acceptée"


-- Pylouq : jongleur de clavier AZE RTY et de clavier QWERTZ --
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
2 mai 2011 à 18:39
J'aurais une petite remarque toute bête.
Pourquoi appeler une classe ClassAbstractSt alors qu'elle n'est pas déclarée comme une classe abstraite ? :)
A partir du moment où elle n'est jamais directement instanciée et que seules les classes l'"extendant" sont instanciées, autant ajouter le mot clé "abstract" pour des raisons de cohérence ^^

A part ça, je suppose que ce que tu as écrit n'est qu'un exemple et que les champs ne s'appellent pas champXXX et les classes ClassXXX ?

Fanny
0
mau007 Messages postés 20 Date d'inscription lundi 2 janvier 2006 Statut Membre Dernière intervention 20 mai 2011
2 mai 2011 à 23:01
Bonjour Fanny,

pour la classe abstraite, j'ai juste oublié le mot Abstract. Je te rassure, elle est vraiment abstraite... :)

Et oui, le code que je mets est une "copie" de mon code sauf que je retire tout ce qui serait un peu trop "identifiable". En effet, nous sommes un certains nombres à devoir réaliser le même travail sans se concerter. Je ne voudrais pas que mon code "final" se trouve sur internet avant que je ne le livre au prof... :)

Mais promis, dès que j'aurais fini le projet et que la note sera connue, je viendrais le poster... afin de me faire évaluer par la communauté (ca va faire mal ca... :))) )
0
Utilisateur anonyme
3 mai 2011 à 22:56
OK !

Ça va faire mail, ça va faire mal...Il n'y a qu'en voyant ses erreurs qu'on progresse^^

Bonne continuation :)


--
Pylouq (actuellement jongleur de clavier AZERTY et de clavier QWERTZ)
0
mau007 Messages postés 20 Date d'inscription lundi 2 janvier 2006 Statut Membre Dernière intervention 20 mai 2011
4 mai 2011 à 00:38
Merci.
Je vais tenter de mettre un peu en pratique tous les conseils que j'ai pu glaner ces quelques jours. Je dois dire que les principes de classes abstraites, d'interface, d'héritage, de polymorphisme et de code générique font que je suis un peu en train de me perdre.

Par contre, je viens de découvrir les test unitaires!!!
(si j'en fait, ce sera un bonus pour mon travail). C'est sympa et ces tests vont me servir de fil conducteur pour l'avancement de mon projet.

Allez.. hop, je repars de 0 et on refait tout au propre.. :)
plus que 16 jours!!! :)
0
Utilisateur anonyme
4 mai 2011 à 22:24
Ok. Si tu as des questions n'hésite pas !

Et pour la petite info, tu verras que pour le polymorphisme et le code générique par exemple, ce sont de bien grands mots barbares pour des concepts que tu assimileras au fur et à mesure.
Après, la programmation objet n'est pas évidente pour tout le monde dès le début.


--
Pylouq (actuellement jongleur de clavier AZERTY et de clavier QWERTZ)
0
Rejoignez-nous