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 :

Que pensez-vous de mon code?


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut Que pensez-vous de mon code?
    Bonjour a tous.
    Je viens de finir d'ecrire 2 classes Server et Client pour transferer un entier en UDP.
    J'aimerais avoir votre avis sur ma progrmmation et savoir quelles sont les problemes .. (par exemple je n'ai pas utilise de Constructeur, est-ce que ca aurait ete plus judicieux ..? ).

    Merci d'avance.
    Vincent
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 137
    Par défaut
    Salut,

    Je viens de jeter un coup d'oeil à ton code et il m'a l'air correcte au niveau algorithmique.
    Si tu utilises un constructeur, c'est que tu souhaites conserver ton objet et les informations (attributs) qui y sont liées pour pouvoir les utiliser plus tard.
    Un constructeur te sert également à définir des méthodes d'instance pour traiter ton objet.
    Ici, je ne vois pas l'intéret d'en utiliser car l'information est éphémaire à moins que tu veuilles faire d'autres traitements.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Août 2002
    Messages : 35
    Par défaut
    Pour ma part, j'aurais juste une remarque de présentation :

    Il est préférable de déclarer toutes tes variables locales dès le début de ta méthode et ce dans un souci de lisibilité. Lorsque le projet devient assez conséquent, ça peut vite devenir galère de savoir où ont été déclarées les variables ( variables locales ou attributs )...

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Au niveau design pourquoi as-tu choisie d'utiliser uniquement des méthodes statiques plutôt que de choisir une approche plus orientée objet ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    j'aurais juste une petite remarque sur le nomage de tes methodes:
    create_listening_server
    -> createListeningServer, java naming

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Entre le code procédural et le nom des méthodes, ça sent le transfuge du C .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    Merci pour toutes vos réponses.

    La remarque sur le C est pertinente car c'est vrai que je me sers très peu de la POO finalement et je reste très attaché à l'algo "théorique" et procédural.

    Sinon pour la question des méthodes statiques, je ne voyais en fait pas comment les éviter.. Pourrais-tu m'expliquer comment faire quelque-chose de plus "objet" ?

    Aussi je me rends compte que je vais devoir récupérer la valeur RATE obtenue par le server. Devrais-je donc passer par un constructeur dans ce cas-là?

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par vincs72
    La remarque sur le C est pertinente car c'est vrai que je me sers très peu de la POO finalement et je reste très attaché à l'algo "théorique" et procédural.
    Ceci est plus un problème conceptuel.
    En gros la POO est une façon de programmer tout comme l'est le procédural.
    Java étant 99% objet, il est en général préférable de faire de l'objet avec Java.

    Pour ton exemple, il y aurait donc deux classes (UDPClientWithChannels et UDPServerWithChannels). Les Constructeurs pourraient permettre de créer et initialiser les sockets et channels. Puis des méthodes read/write ou receive/send permettraient l'envoie/reception de données.

    Il n'y a pas une seule façon de faire cela en objet (tout comme en procédural).
    A toi de voir l'utilisation que tu veux faire de ces objets.

    La programmation orientée objet n'est pas forcement évidente au premier abord et je te conseille vivement de lire quelques tutoriel sur le sujet pour en assimiler les principes de base (sinon tu risque de vite te noyer). Cf La programmation orientée objet en Java.

    Ensuite tu pourras te concentrer sur les question de design en POO avec notamment les Design Patterns .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #9
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Bonjour,

    je voudrais pondérer la remarque sur le procédural, on peut faire AMHA de bons algorithmes procéduraux * s'ils sont bien isolé dans un objet pour être réutilisable. * si on respecte les conventions Java ( de notation)

    1. Là tu a fait l'erreur de base N°1: tout en static j'y suis passé aussi, il vaut mieux sortir dans ton main du contexte static tout de suite pour travailler dans un instance: Appli monAppli = new Appli(); monAppli.lancement();
    c'est presque un paradoxe du Java de se lancer dans un contexte non-objet, ceci excuse l'erreur
    et donc il faut passer toutes les méthodes et variables en non-static.

    2. La notation: c'est pas grave, mais c'est facile de respecter la convention:
    fr.mondomaine.unnomdepackage
    UneClasse
    uneVariable
    UNE_CONSTANTE

    seule les notations de constantes sont héritées du C, sinon on évite les "_" et surtout on utilise la notation majuscule/minuscule sur les variable.

    3. j'anticipe tout de suite l'erreur N°3: de faire tout le traitement dans le constructeur. Si tu fait un constructeur, ne met que les initalisations de variable (ici le N° de port serait très bien) puis utilise une méthode différente pour lancer le vrai traitement. Si tu n'en fait pas, tu pourra créer un objet vide, ce qui est bien aussi.

  10. #10
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    Merci encore pour les reponses.
    Sinon pour le contexte static ou non :
    En gros pour resumer un contexte static est procedural et evite l'objet?
    Et main() est une partie procedurale necessaire et c'est pour ca qu'il est forcement static ?

    Enfin je voulais savoir quelle est l'interet de faire du surclassement ? Par exemple pour :
    "SocketAddress address = new InetSocketAddress(port_arg);"
    pourquoi priver 'address' de methodes existant dans InetSocketAddress ?
    (j'ai teste sans surclassement et cela marche aussi..).

  11. #11
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par vincs72
    Merci encore pour les reponses.
    Sinon pour le contexte static ou non :
    En gros pour resumer un contexte static est procedural et evite l'objet?
    Je ne suis pas sûr qu'on puisse dire cela car le contexte static fait partie intégrante de la POO. static ne veut pas dire procédural.

    Le procédural et l'orienté objet sont deux méthodes de conception totalement différente.
    Même si Java est fait pour être utilisé en utilisant la POO, il est tout à fait possible de faire du procédural (le contexte static y aidant effectivement). Cependant, tu perd tout les "avantages objets" que t'apporte le langage fait pour être utilisé avec la POO.


    Citation Envoyé par vincs72
    Et main() est une partie procedurale necessaire et c'est pour ca qu'il est forcement static ?
    La méthode main() est nécessaire pour lancer l'exécution de ton programme. Comme au début de ton programme tu n'as encore aucun objet, il est nécessaire d'être dans un contexte static.
    Une classe Java "exécutable" doit posséder une méthode main() qui à la signature
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void main(String[] args);
    Depuis Java 5 il est aussi possible d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void main(String ...args);

    Citation Envoyé par vincs72
    Enfin je voulais savoir quelle est l'interet de faire du surclassement ? Par exemple pour :
    "SocketAddress address = new InetSocketAddress(port_arg);"
    pourquoi priver 'address' de methodes existant dans InetSocketAddress ?
    (j'ai teste sans surclassement et cela marche aussi..).
    Il est en général préférable de choisir le type le plus abstrait (le plus haut dans la hiérarchie de l'héritage), ceci afin de s'abstraire de l'implémentation de la classe (pour que si celle-ci change, cela n'impacte pas le reste du code). Ce principe est surtout valable lors du développement d'une API.

    Bien entendu, si tu à besoin d'une fonctionnalité offerte par une implémentation particulière il faut utiliser celle-ci. En gros il faut choisir le type le plus abstrait qui convienne à l'utilisation que tu va en faire.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  12. #12
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    J'ai essayé d'améliorer mon code en suivant vos remarques. Si vous voyez des choses qui ne vont pas n'hésitez pas
    Fichiers attachés Fichiers attachés

  13. #13
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    Je voudrais en profiter pour demander une petite precision sur les exceptions...

    Dans mon code j'ai le choix entre :

    try {
    if (args.length != 2) {
    throw new Exception("usage : portServer,file ");
    }
    }
    catch(Exception ex){
    System.err.println(ex.getMessage());
    System.exit(1);
    }


    ET

    if (args.length != 2) {
    System.err.println("usage : portServer,file ");
    System.exit(1);
    }


    Vous me conseillez lequel a part que c'est le 2e est plus court ^^ ?

  14. #14
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Le 2ème: pas besoin de s'embêter s'il n'y a pas une programmation en couches et une gestion d'exception (i.e. une surcharge de Exception en plusieur type et un comportement différent en fonction du type d'exception).

    Concernat le code, c'est beaucoup mieux, par contre:
    - charset devrait être tout en majuscule: c'est une vraie constante qui ne change pas de valeur.
    - le tableau d'Integer est encore en static car tu boucle dessus dans le main -> le mieux srait de déplacer la boucle das une méthode de l'objet (on ne fait presque plus rien dans le main, c'est juste un point de démarrage).
    - les 2 classes ne sont pas homogène: dans l'un tu passe un integer en parsant dans le main, dans l'autre, tu passe directement les arguments que tu parse dans la méthode. (utilise de préférence la première technique dans les 2 classes: les méthodes sont spécialisées, et seul "main" garde la visibilité sur ses arguments.)

  15. #15
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    En fait ca ne me derange pas que le tableau soit static car j'ai envie que ca soit une variable de classe qui decrive le serveur..^^

  16. #16
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    OK, si ça respecte la conception

    il faut juste se demander si tu pourrais avoir à en lancer plusieurs sur une machine, et si le fait d'avoir un seule variable n'est pas gênant ( correspond un peu à avoir un variable globale en C)

  17. #17
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut
    Je vais encore vous mettre à contribution^^
    Je viens de terminer deux nouvelles classes et j'aimerais avoir votre avis, notamment sur les exceptions où j'ai bien galéré..
    Ici la classe server envoie un fichier au client en TCP.

    Merci
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. que pensez vous de mon site http://www.tout57.fr
    Par alain57 dans le forum Mon site
    Réponses: 4
    Dernier message: 21/01/2007, 12h47
  2. [Avis] Que pensez-vous de mon C.V.
    Par skynet dans le forum CV
    Réponses: 22
    Dernier message: 30/09/2006, 18h49
  3. Réponses: 11
    Dernier message: 09/09/2006, 15h54
  4. [SGBD/MLD]Que pensez vous de mon MLD?
    Par Bils dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 29/03/2006, 16h50
  5. que pensez vous de mon code source ecrit en c++(je debute)
    Par superspike23 dans le forum Débuter
    Réponses: 6
    Dernier message: 06/10/2005, 18h26

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