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 :

Quand utiliser la programmation orientée objet?


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut Quand utiliser la programmation orientée objet?
    Bonjour!

    J'ai déjà fait un peu de programmation, mais principalement en C pour l'instant. Cependant pour les cours, il faut que j'écrive un programme en Java.

    En fait, je n'arrive pas à voir quand on a besoin de la programmation objet, ou quand on peut se contenter de prog fonctionnelle. Par exemple, je dois faire une finale de jeu d'echec avec seulement roi, fou et cavalier contre roi. Je veux bien faire 4 objets représentant chaque pièce, mais dans ce cas-ci, comment gérer l'intelligence artificielle?
    Je vais quand même pas tout mettre dans le main... donc si vous pouviez m'indiquer des tutos qui préciseraient la chose, ca serait super sympa!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Pour ton exemple, la programmation orientée objet est très importante. Elle permettra de simplifier ton programme.

    Tu va créer une classe Echiquier qui contiendra des objets de type cases.
    Tu vas également définir une classe Pièce, qui possèdera des attributs comme couleur, caseCourante...

    Enfin, tu feras hérité tes différentes pièces (Cavalier, Roi, Fou...) de Pièce.
    Il te suffira de surchargé la méthode boolean DeplacementPossible(case Arrivee) pour avoir ton jeu fonctionnel. Tout les autres attributs seront défini dans Pièce.

    La lisibilité du code sera nettement améliorée, et le code plus facile à produire.

    Quant-à l'intelligence artificielle, c'est un peu plus compliqué... Il faut à partir de la position courante établir la liste de tout les coups possible, puis tout les sous-coups possibles, les sous-sous coups possibles... Pour ensuite évaluer la position finale et choisir la meilleure suite (d'après la valeur des pièces par exemple).

    Etant donné qu'il existe environ 50 coups par position en moyenne, il faut supprimer des branches de possibilité. L'algorithme Alpha-Bêta est le plus adéquate à mon avis pour cet exercice.

    J'espère avoir été relativement clair,
    Bonne chance

  3. #3
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    C'est surtout en effet un problème d'"ingénierie logicielle". Rappelle-toi qu'en pratique, ce sont des équipes qui travaillent sur un projet.

    De la même manière qu'en C on t'apprend qu'être clair dans l'écriture de ton code, être cloisonné (décomposer les taches répétitives en fonctions pour éviter la redondance, et faire plusieurs fichiers) la programmation objet permet de "moduler" tes programmes en taches diverses et protéger ton code contre une utilisation mauvaise / confuse de la part de tes collègues... ou de toi même ! Il y a un gros avantage aussi dans le sens où la programmation objet permet de faire une différence claire entre l'*interface* (Ce qu'est censé rendre comme service ton objet, la syntaxe d'utilisation et les valeurs renvoyées) et l'*implémentation* (quel algorithme tu utilises en pratique pour exécuter les taches annoncées dans l'interface.)

    Cela permet aussi la réutilisation de ton code (par d'autre ou par toi-même dans plusieurs programmes) plus facilement. Je pense particulièrement aux structures de données.

    Cela permet en outre, toujours dans le même esprit, de créer de nouveaux "types" qui réagissent exactement comme on le souhaite. Par exemple tu fais des maths et tu veux manipuler des matrices. En C c'est pas mal le bazar... En C++ ou en Java, en créant une classe tu vas créer une classe Matrice que tu pourras utiliser ensuite comme un type de données, avec en plus des fonctions personnalisées.


    Toujorus dans l'esprit de conception, il y a l'héritage, pour moduler encore mieux et plus finement, et éviter ainsi encore mieux les redondances.

    Les redondances et les codes confus créent la majorité des bugs (et surtout empêche de les traquer).

  4. #4
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Merci pour vos réponses!

    Pour le problème d'ingénierie logicielle, c'est vraiment mon cas en plus! Je suis avec 2 autres personnes encore plus nulles que moi en java, et qui me demandent juste de leur donner des algorithmes à coder, sans avoir à s'occuper de tout ce qui est programmation orienté objet... vu que c'est moi le plus calé en info (j'ai fait 2 mois de C cet été pendant mon stage... ).

    Et de l'autre coté, la dernière fois que j'ai vu mon prof, il nous a juste demandé de faire un programme qui s'occupe de faire capturer le centre par les pièces blanches, sans rien expliquer des méthodes à suivre... Autant dire que je dois faire la traduction entre un prof qui refuse de regarder du code et des diagrammes UML, et des étudiants qui veulent juste coder des if et des while

    Le prof veut aussi que les positions des pièces soient toujours stockées dans un tableau de seulement 4 cases... donc c'est pas trop compatible avec la programmation orientée objet? parce que à chaque fois que je bouge un pièce, il faudra que je mette à jour le tableau, et l'objet représentant la pièce en question? Ca me semble étrange comme façon de faire...

    Pour ce qui est de algorithmique, il va falloir que je mette tout dans ma classe principale (ce qui est clairement dégueulasse...) ? Ou est il possible comme en C de faire des include d'autres fichiers (donc d'autres classe à priori?), sans avoir à instancier la classe?
    Je pense que le problème est que je raisonne en terme de fonction et non de méthode, donc c'est trop le "bordel" dans ma tête!

    Est ce que vous auriez un tuto expliquant comment réaliser une intelligence artificielle en java?


    €dit: et puis la POO plus simple à mettre en oeuvre, je n'en suis pas si sur. par exemple, je cherche à réaliser une fonction des déplacements possibles pour chaque pièce. Il faut faire attention aux spécificités de déplacement de la pièce: pas de problème. Il faut faire attention à ce qu'elle ne sorte pas du plateau, ou qu'elle ne fasse pas un saut d'un coté à l'autre du tableau: la difficulté est la même quelle que soit le langage. Les pièces ne doivent pas se superposer, et les rois entrer dans leurs zones de "conflit", la c'est beaucoup plus dur. Y a t-il une solution simple pour faire communiquer les objets entre eux afin d'avoir leurs positions respectives?

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par funtim78 Voir le message
    Les pièces ne doivent pas se superposer, et les rois entrer dans leurs zones de "conflit", la c'est beaucoup plus dur.
    Ah bon ? Si c'est le cas rien ne t'empêche de faire de la programmation procédurale pour cette partie, mais je ne vois pas précisément où est le problème.

    Y a t-il une solution simple pour faire communiquer les objets entre eux afin d'avoir leurs positions respectives?
    Cette méthode me semble être une mauvaise idée. Ce n'est pas à la pièce de dire où elle est, sauf à la rigueur si on l'a déjà à portée. C'est un objet de type tableau de jeu qui devrait connaître la position des pièces, et notamment fournir la position des rois de chaque couleur. Je ne vois pas l'intérêt que des pièces connaissent leur emplacement respectif. La stratégie de calcul de déplacements autorisés des pièces devrait juste avoir accès au tableau de jeu actuel.

    Enfin, pour résumer, la programmation orientée objet est un outil, mais elle ne sert vraiment que quand on commence à comprendre comment s'en servir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Ah bon ? Si c'est le cas rien ne t'empêche de faire de la programmation procédurale pour cette partie, mais je ne vois pas précisément où est le problème.
    Ba si je fais cela, il faut à chaque fois que je passe en paramètre les objets représentants chaque pièce, donc c'est vraiment lourd à faire au final!

    Donc à ce moment là, autant faire directement une classe echiquier qui connaitra la position de mes 4 pièces et qui gérera leurs déplacements? Non? Parce que l'intérêt que les pièces connaissent leur emplacement respectif est justement qu'elles puissent dire où elles peuvent aller!

    Si je dois faire une classe pour chaque pièce, mais que ces classes ne gèrent ni leur position ni leur déplacement, je n'ai plus rien à mettre dedans! ^^

  7. #7
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Citation Envoyé par funtim78 Voir le message
    Si je dois faire une classe pour chaque pièce, mais que ces classes ne gèrent ni leur position ni leur déplacement, je n'ai plus rien à mettre dedans! ^^
    C'est bien vu. Il faut dans ta démarche de modélisation, envisager les objets en tant qu'état et comportement.

    Ainsi, quel est l'état d'un objet pièce ? Sa position sur l'échiquier. C'est bien évidemment un point de vue. Quel en est alors le comportement ? Le pouvoir de se déplacer, d'être capable de répondre si un déplacement est acceptable ou pas, d'énumérer l'ensemble des positions accessibles.

    Est-ce de la responsabilité de la pièce d'apprécier la superposition avec une autre pièce ? Je ne pense pas. C'est plutôt à l'objet échiquier d'arbitrer.

    En outre, tu peux très bien introduire la notion de case. Auquel cas, une pièce et une seule référence une case (le comportement de la case peut gérer cette politique). Il est également possible de demander à une case les cases voisines, pour gérer le déplacement.

    Plusieurs solutions sont donc envisageables...

    Pour les besoins de l'intelligence artificielle, tu peux très bien créer une classe supplémentaire dédié à cela. Et même prévoir une classe abstraite joueur, qui se décline en Ordinateur (pour l'IA) et en Humain.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/08/2013, 18h37
  2. Réponses: 8
    Dernier message: 21/02/2012, 18h21
  3. Réponses: 1
    Dernier message: 28/05/2011, 21h03
  4. [POO] apprendre la programmation orientée objet
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 10/12/2005, 11h33
  5. [DEBUTANT] Conseil sur la programmation orienté objet
    Par etiennegaloup dans le forum Langage
    Réponses: 7
    Dernier message: 27/05/2005, 12h59

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