Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programme en Java

    4 mai 2010 à 11:28:08

    Bonjour,
    je souhaite effectuer un petit programme Java qui a pour fonction de représenter la hiérarchie des mammifères (qui comprend des représentants différents), car je souhaite faire un programme qui recouvre les notions d'héritage,polymorphisme et compagnie.
    Ce que je voudrais c'est qu'on puisse ajouter une catégorie facilement.
    par exemple:
    =============================mammifère===============================
    ==================chien=========chat===========homme==========singe

    Ce que je souhaite par ailleurs c'est pouvoir instancier une classe, comme ajouter par exemple le chien médor.
    J'ai pensé à inclure dans la classe mammifère les caractéristiques propres à ceux ci. je vais dire n'importe quoi mais ça peut être allaitement, poils, système nerveux.
    Et faire hériter les sous classes.
    Je veux également que lorsqu'un examinateur entre une espèce animale qui n'est pas un mammifère, cela soit reconnu, ce qui est déjà une difficulté en soi. Et qu'il ait la possibilité de créer un nouvel ordre comme la classe amphibiens.

    Pourriez vous me donner:
    1)des conseils méthodologiques.
    2)Comment faire pour que le programme énonce que ce n'est pas un mammifère? L'intérêt étant que le programme puisse déterminer sans que moi j'ai fait une liste prédéfinie d'animaux qui sont ou pas des mammifères.
    • Partager sur Facebook
    • Partager sur Twitter
      4 mai 2010 à 11:41:53

      Juste pour préciser une chose : ton programme est incapable de deviner tout seul ce qu'est un mammifère on doit être d'accord.
      Par contre si tu lui donnes les critères pour dire tel être vivant est un mammifère, là c'est bon. Tu auras juste une série de tests à faire.

      Sinon je vois pas trop ce que ton programme doit faire.
      Quant à créer une classe à l'exécution du programme, je ne sais pas si c'est possible (ça m'étonnerait). Par contre tu peux créer des instances à l'exécution en utilisant l'API java.lang.reflect.
      Y'a une partie là-dessus dans le tuto officiel.

      Selon ce que ton programme doit être capable de faire, tu devrais procéder différemment. Il est possible que tu ne veuilles pas qu'un utilisateur instancie un Mammifère (ce n'est pas assez spécialisé) donc tu rendras cette classe abstract.
      Ensuite selon tes besoins tu pourrais utiliser des interfaces pour décrire les actions possibles. Là je ne vois pas trop l'utilité (mais ce n'est pas moi qui fait le programme je n'y ai pas réfléchi plus de trois secondes).
      • Partager sur Facebook
      • Partager sur Twitter
        5 mai 2010 à 13:04:19

        Bonjour,
        oui cela pose un problème de reconnaissance.
        Je vais te répondre en détail.
        Mon programme est un programme de gestion d'animaux domestiques.
        La fonction du programme est de faire rentrer à l'utilisateur une liste d'animaux domestiques qu'il a eu.
        Chaque animal appartient à un ordre, mammifère, reptile et autre (je pense faire une liste d'animaux reconnus parmi les mammifères, le chien, le chat et autres reptiles (serpent,lézard).
        Si l'utilisateur entre un nom d'animal qui présente une dangerosité, ce sera signalé, et si l'animal présente une incompatibilité entre un animal déjà possédé, le programme en avertit l'utilisateur.

        Je veux que le programme puisse
        -indiquer combien d'animaux possède le propriétaire.
        -Combien appartiennent à un ordre donné: si j'ai 3 chiens je possède 3 mammifères par exemple.
        -Une alerte indiquant que l'animal ne figure dans aucune liste établie et que l'on peut le faire appartenir à un nouvel ordre, style les amphibiens.
        -une alerte qui dit que l'animal est dangereux pour un autre et peut vouloir en faire son repas.
        -une alerte qui me dit que l'animal est déconseillé car ne figurant pas sur la liste des animaux mignons et me propose alors d'acquérir un animal mignon
        -une méthode qui compare les animaux acquit et indique s'il y a possibilité de reproduction entre eux.
        -une méthode pour afficher une vraie image de l'animal lorsqu'il est choisi.

        Je pensais pour cela faire
        une classe animaux avec comme méthode, senourrir(), communiquer(), sociabilité()
        senourrir() varie selon chaque objet, l'objet chien mange de la pâtée, l'objet serpent mange des souris, or souris est un animal domestique mignon qui risque de mourrir...
        communiquer() est polymorphe aussi puisqu'un serpent ne parle pas, mais un chat fait miaouw
        sociabilité() indiquerait selon l'animal s'il peut cohabiter avec un autre (un chien et un chat, ou un lapin et un tigre), en fait je veux que ce soit une part d'aléatoire avec un facteur fixe, un carnivore mange des petits carnivores ou herbivore mais peut épargner un autre s'il a mangé avant. (je ne sais pas où faire figurer ces lois de la nature en fait)

        Bien sûr si je vais établir des listes ça ne collera pas parfaitement à la réalité mais ce n'est pas vraiment l'objet du travail. C'est plutôt de montrer que je manipule des objets et des méthodes avec ce qui plaît à des professeurs.

        En héritage la classe des animaux correspondants, la classe chien, la classe chat.

        J'ai assez peu de pratique avec la programmation java, je comprends tout juste les mécanismes.
        Qu'en penses-tu? Est ce que peut donner une bonne note en examen.
        • Partager sur Facebook
        • Partager sur Twitter
          6 mai 2010 à 18:05:29

          Quelqu'un pour m'aiguiller?
          Ce serait gentil.
          • Partager sur Facebook
          • Partager sur Twitter
            7 mai 2010 à 0:13:55

            Ok là, l'UML serait de mise.
            Si c'est un projet d'école, avec une soutenance, je te conseille vivement de faire un diagramme de classe (au moins) UML. Non seulement il t'aidera toi à concevoir ton application, mais en plus t'ajouteras probablement des points.

            Pour ce qui est de la mise en œuvre je ne suis pas assez familiarisé avec la réflexivité pour en connaître les possibilités.

            Oui ça peut donner une très bonne note, ça touche à quasiment tous les domaines du Java "de base", à condition que le projet soit bien pensé (et bien mené).

            Comme j'ai trop souvent l'habitude de faire des posts en vrac, je vais me contenter de reprendre point par point tes contraintes :
            • -indiquer combien d'animaux possède le propriétaire.
              Autrement dit, tu vas créer un compte à chaque utilisateur ? Via une base de données ? Un fichier texte peut-être ? A toi de choisir la méthode de stockage des données.
            • -Combien appartiennent à un ordre donné: si j'ai 3 chiens je possède 3 mammifères par exemple.
              A chaque propriétaire correspondrait une List (un ArrayList par exemple) d'animaux qu'il possède. Là, soit tu parcoures la liste en utilisant la réfléxivité pour déterminer la classe mère de chaque animal. Ou encore tu gardes une variable disons espece qui sera initialisée à la construction de l'animal, et ainsi tu parcours ta List en comptant chaque membre d'une espèce donnée. A noter qu'il y'a sûrement de meilleurs moyens.
            • -Une alerte indiquant que l'animal ne figure dans aucune liste établie et que l'on peut le faire appartenir à un nouvel ordre, style les amphibiens.
              Ca me semble compliqué. Un moyen serait de lister toutes les espèces possibles que t'as décidé de répertorier, ainsi que tous les représentants dans une base de données par exemple (ou fichier XML, ou fichier texte, et j'en passe).
              Puis quand l'utilisateur rentre un animal qui n'apparaît pas dans la base de données, tu l'indiques. Ca impliquerait une méthode de recherche dans la base de données...
            • -une alerte qui dit que l'animal est dangereux pour un autre et peut vouloir en faire son repas.
              Bon là c'est un peu toujours pareil. Tu fouilles la base de données à la recherche de certaines choses selon différents critères.
              Vaut mieux stocker les caractères de chaque espèce entre elles au départ, et faire en sorte que le programme affiche simplement ce qui a été inscrit (on dit aussi persisté) dans la base de données. Si tu veux que ton programme calcule des caractères selon certains critères, ça sera encore plus compliqué (pas infaisable mais ça rajoute du boulot).
            • -une alerte qui me dit que l'animal est déconseillé car ne figurant pas sur la liste des animaux mignons et me propose alors d'acquérir un animal mignon
              idem qu'au-dessus
            • -une méthode qui compare les animaux acquit et indique s'il y a possibilité de reproduction entre eux.
              idem, vaut mieux largement rentrer ces informations soi-même dans la base de données
            • -une méthode pour afficher une vraie image de l'animal lorsqu'il est choisi.
              idem, dans le sens où tu places une variable d'instance de type Image dans la classe Animal


            Pour être honnête si tu fais ce que j'ai proposé à chaque fois, y'a du boulot. Les classes sont vachement entremêlées, si tu ne fais pas de diagramme UML j'te vois mal t'en sortir.
            Comme tu l'as peut-être noté il reste plusieurs questions ouvertes à résoudre avant de programmer.
            Enfin dernier conseil, si tu codes une interface en Swing, code-la en dernier.
            Et pis pour du piment supplémentaire tu peux utiliser le pattern MVC qui me semble particulièrement bien adapté à ton programme.

            Bon courage :)
            • Partager sur Facebook
            • Partager sur Twitter
              7 mai 2010 à 13:49:33

              Un merci d'abord,
              maintenant je lis ton post et te répond après:)
              • Partager sur Facebook
              • Partager sur Twitter
                7 mai 2010 à 13:58:55

                Citation


                A chaque propriétaire correspondrait une List (un ArrayList par exemple) d'animaux qu'il possède. Là, soit tu parcoures la liste en utilisant la réfléxivité pour déterminer la classe mère de chaque animal.


                C'est pas la peine de se casser le fion je pense. Il suffit de mettre une méthode isMamifere(), isReptile() etc etc dans l'interface "Animal".

                Citation

                une méthode qui compare les animaux acquit et indique s'il y a possibilité de reproduction entre eux.
                idem, vaut mieux largement rentrer ces informations soi-même dans la base de données


                Pourquoi ? Je ne comprends pas.
                public boolean peutSaccouplerAvec(Animal unAutreAnimal)
                {
                    if(unAutreAnimal instanceof LaBonneEspece)
                        return !this.sexe.equals(unAutreAnimal.getSexe());
                    else
                        return false;
                }
                

                Spa mal ça non ?

                En fait d'une manière générale je comprends pas l'emploi d'une base de données. Il pourra voir ça après s'il y a un réel problème de persistence. Pour l'instant les questions posées sont purement liées à son modèle de données.
                • Partager sur Facebook
                • Partager sur Twitter
                  7 mai 2010 à 22:48:15

                  Le "problème" de ta méthode peutSaccouplerAvec() est qu'il faut renseigner quelque part "LaBonneEspece". Et s'il y'a plusieurs bonnes espèces, tu traînes des if() à répétition (la duplication de code c'est le mal). Par contre là j'avoue que je ne suis pas franchement calé en biologie...

                  En vérité j'ai même pensé à une enum pour que chaque Animal soit prédéfini avec tous ses caractères. Mais je n'arrive pas à décider quelle est la meilleure méthode.

                  Pour le premier point tu as raison c'est mieux.

                  Par contre moi j'ai plus vu sa base de données comme étant évolutive donc il y'a certainement plusieurs points à revoir. Mais il y'a des questions à régler tout de suite, comme toutes les actions possibles de l'utilisateur sur le programme.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 mai 2010 à 9:38:41

                    Je n'ai pas zappé le sujet, je règle des points techniques annexes et vous donne les précisions.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Programme en Java

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown