Bibliothèque [niveau débutant]
Le
lionmarron

Je ne suis pas sûr d'être forcément sur les bons forums : ma
problématique (ma question autrement dit) pourrait être toutefois
relative au langages de programmations en général, plus précisément aux
langages de programmations actuels, et par conséquent aux langages
orientés objet.
Pour éviter de parler d'une façon abstraite, je précise que, dans le
contexte, le langage que je tente d'utiliser est python (version 2.7).
Ce que fait mon programme n'a en revanche pas d'importance : il s'agit
avant tout de faire des essais et par conséquent c'est quelque chose de
facile à faire. Lorsque je découvre un nouveau langage de programmation
je programme toujours un jeu d'échecs, ce qui est donc le cas ici,
toutefois il s'agira seulement de savoir si un déplacement est légal ou
non, pas de juger de la valeur d'un coup. Il y a qq décennies je pouvais
faire ça (et d'autres pouvaient faire plus) avec 32 K de ram.
Étant donné qu'il faut malgré tout une certaine longueur de listing pour
savoir si un coup est légal ou non, je voudrais mettre ce qui fait ça
dans une partie externe du programme, et c'est là que se trouve le fond
du problème, ou en tout cas ce qui constitue le sujet de ce message.
Peut-on faire une bibliothèque normale (quelque chose de normalement
compréhensible pour un cerveau normal et pour un simple mortel), ou bien
faut-il nécessairement faire une classe ?
Ma principale référence est le livre de Swinnen <Apprendre à programmer
avec Python> , édition 2005 (O'Reilly). D'après ce livre on pourrait
penser qu'il n'y a pas d'autre moyens que de créer un classe, toutefois
ce n'est pas dit explicitement, alors autant être sûr.
Je précise que la question que je pose (ou que je cherche à soulever)
n'est pas de savoir si les langages orienté objet sont mieux ou moins
bien que ce qu'on faisait avant. On aura peut-être compris que, de mon
point de vue, ce qui relève de ce mode de programmation n'est pas <
furieusement très clair >. Cela étant je me doute bien que si c'est plus
compliqué c'est parce que cela permet sans doute de faire mieux dans
certains cas, même si ce sont des cas que je n'imagine peut-être pas, ou
que j'ai rencontrer sans en percevoir la véritable nature.
Si certains acceptent de me promettre qu'ils ne le répéteront pas, je
veux bien leur concéder que je n'y crois pas réellement, autrement dit
je pense que c'est de la blague. Mais ça je l'ai pas dit, je l'ai
seulement pensé. (Autrement dit si certains ont pu lire ce qui précède
cela signifie qu'ils se trompent : ils ont cru le lire.)
A vos claviers. Et que ça saute. Ça manque d'agitation ici (c'est pas
possible).
Suivi sur fr.comp.algorithmes
--
lionmarron
problématique (ma question autrement dit) pourrait être toutefois
relative au langages de programmations en général, plus précisément aux
langages de programmations actuels, et par conséquent aux langages
orientés objet.
Pour éviter de parler d'une façon abstraite, je précise que, dans le
contexte, le langage que je tente d'utiliser est python (version 2.7).
Ce que fait mon programme n'a en revanche pas d'importance : il s'agit
avant tout de faire des essais et par conséquent c'est quelque chose de
facile à faire. Lorsque je découvre un nouveau langage de programmation
je programme toujours un jeu d'échecs, ce qui est donc le cas ici,
toutefois il s'agira seulement de savoir si un déplacement est légal ou
non, pas de juger de la valeur d'un coup. Il y a qq décennies je pouvais
faire ça (et d'autres pouvaient faire plus) avec 32 K de ram.
Étant donné qu'il faut malgré tout une certaine longueur de listing pour
savoir si un coup est légal ou non, je voudrais mettre ce qui fait ça
dans une partie externe du programme, et c'est là que se trouve le fond
du problème, ou en tout cas ce qui constitue le sujet de ce message.
Peut-on faire une bibliothèque normale (quelque chose de normalement
compréhensible pour un cerveau normal et pour un simple mortel), ou bien
faut-il nécessairement faire une classe ?
Ma principale référence est le livre de Swinnen <Apprendre à programmer
avec Python> , édition 2005 (O'Reilly). D'après ce livre on pourrait
penser qu'il n'y a pas d'autre moyens que de créer un classe, toutefois
ce n'est pas dit explicitement, alors autant être sûr.
Je précise que la question que je pose (ou que je cherche à soulever)
n'est pas de savoir si les langages orienté objet sont mieux ou moins
bien que ce qu'on faisait avant. On aura peut-être compris que, de mon
point de vue, ce qui relève de ce mode de programmation n'est pas <
furieusement très clair >. Cela étant je me doute bien que si c'est plus
compliqué c'est parce que cela permet sans doute de faire mieux dans
certains cas, même si ce sont des cas que je n'imagine peut-être pas, ou
que j'ai rencontrer sans en percevoir la véritable nature.
Si certains acceptent de me promettre qu'ils ne le répéteront pas, je
veux bien leur concéder que je n'y crois pas réellement, autrement dit
je pense que c'est de la blague. Mais ça je l'ai pas dit, je l'ai
seulement pensé. (Autrement dit si certains ont pu lire ce qui précède
cela signifie qu'ils se trompent : ils ont cru le lire.)
A vos claviers. Et que ça saute. Ça manque d'agitation ici (c'est pas
possible).
Suivi sur fr.comp.algorithmes
--
lionmarron
Le 22/11/2011 22:06, lionmarron a écrit :
En fait, je suis là des trolls lancés par des ignorants :
1. Les langages objets sont plus faciles à développer correctement que
les autres parce qu'ils obligent le programmeur à se poser la question
de la structure de donnée et de la portée des variables.
2. Python permet de faire du procédural même si c'est globalement
déconseillé (il permet aussi de faire du lambda calcul)
C'est pareil pour moi : vous avez cru lire une réponse utile mais comme
le but était juste de lancer un discussion je n'en ferai rien.
Il est aussi possible de faire autre chose que d'aller sur usenet : il
parait que movim et diaspora cherchent à concurrencer facebook. C'est du
PHP vous devriez aimer.
Suivi dans le trou noir de fr.
--
Encolpe DEGOUTE
http://encolpe.degoute.free.fr/
Logiciels libres, hockey sur glace et autres activités cérébrales
Je précise que je ne connais pas bien Python, donc ce seront surtout
des réponses générales.
Le Tue, 22 Nov 2011 22:06:48 +0100
lionmarron
Là je ne saisis pas bien... A vue de nez, 50-100 lignes ne suffisent pas
pour vérifier qu'un coup est valide ? Enfin ce n'est sans doute pas le
sujet important du message...
Quand tu parles de "partie externe d'un programme", veux-tu réellement
faire une bibliothèque réutilisable ? Ou parles-tu simplement d'écrire
une partie du code du programme dans un autre fichier source en
Python ? Dans ce deuxième cas il faut simplement utiliser le mécanisme
de Python pour importer d'autres fichiers sources. A vue de nez, le
mécanisme des modules devrait faire ce que tu veux, mais je laisse ceux
qui s'y connaissent te conseiller si quelque chose est plus adapté.
Autant que je sache, Python n'oblige pas à tout mettre dans des
classes. Il devrait y avoir moyen de faire autrement. Tous simplement
de la même manière que tu stockes de simples fonctions dans ton fichier
source principal, tu peux en stocker ailleurs et les importer.
Ou que tu as résolu autrement, avec des habitudes différentes.
Les deux points que je trouve caractéristiques de la programmation par
objets, là, comme ça (et sans en dire de bien ou de mal, évitons que
les trolls nous tombent dessus) :
- Le fait de concevoir un programme autour des données plutôt
qu'autour de traitements. L'idée est de se concentrer sur les
structures de données et de concevoir le programme autour,
notamment en ajoutant à chaque classe des fonctions (méthodes) pour
agir sur ses données, le but étant d'éviter que la représentation
interne des données n'apparaisse au reste du programme. Objectif :
réduire le code source concerné par la manipulation de ces données,
pour éviter qu'une modification dans cette représentation n'impacte
tout le programme.
La conception objet se construit donc plus en découpant le monde en
objets et moins en faisant du découpage en traitements, redécoupés
en sous-traitements.
- L'organisation des données en hiérarchies, ce qui constitue un
mécanisme d'extension des classes mais surtout permet le
polymorphisme. Le fait d'avoir une liste d'objets pas tous de la
même classe mais ayant un ancêtre commun garantit qu'ils
implémentent tous les méthodes de cet ancêtre, éventuellement de
manière différente, et permet de traiter tous ces objets
uniformément depuis l'extérieur tout en leur laissant adapter le
comportement qui leur est demandé (donc l'implémentation de la
méthode) à leur nature réelle. En plus simple : demander à
différentes objets de réaliser une opération, à chacun de la
réaliser selon sa classe réelle.
"De la blague" n'est pas une appréciation très utile pour comprendre et
peser les avantages et les inconvénients. Et tu peux bien en penser ce
que tu veux, mais donner un avis juste après avoir dit que ce n'est pas
très clair pour toi, c'est un peu étrange :) .
Là je ne comprends pas très bien... si ton but est juste de savoir
comment faire pour découper ton programme Python en morceaux, c'est une
question très spécifique à Python à mon avis.
Je ne positionne pas le suivi, que tu as simplement annoncé.
On peut, oui.
--
Nous vivons dans un monde étrange/
http://foo.bar.quux.over-blog.com/
[pffffft]
Python est un langage peu verbeux. Vous, en revanche...
En Python, on peut aussi bien ignorer l'OO que le systématiser, les
deux attitudes étant à mon avis excessives. Ici, le problème est de
toute évidence naturellement OO.
--
Pierre Maurette
Non, pas pour avoir une ou deux listes des coups autorisés tout au moins
(en partant soit de la case de départ, soit de la case d'arrivée).
Oui ça serait l'idée, mais je me contenterais de quelque chose
d'utilisable même seulement en Python.
Il me faudra peut-être chercher de ce côté alors.
Ben je sais pas trop.
Effectivement. Disons que ce qu'il s'agissait de critiquer est plutôt la
fait d'enseigner comment faire une classe (et encore dans un type de
contexte qui n'est peut-être le plus facile à comprendre) sans expliquer
comment procéder plus simplement lorsque la situation s'y prête. (Le
livre de Swinnen ne l'explique pas, et, sur ce plan là, je ne crois pas
qu'il soit différent de ce qu'on trouve en général aujourd'hui en
matière d'ouvrages d'initiation à un langage).
Ce sera peut-être dans un second temps alors.
Le fait est que j'ignore comment on positionne un suivit (je croyais
qu'on se contentait de dire où le suivi était sensé se faire).
Et merci pour ces réponses bien sûr.
--
lionmarron
Bonjour,
je ne suis pas sûr d'avoir compris l'interrogation (je réponds donc peut-
être à côté de la plaque), mais si tu lis l'anglais, essaye de lire ce
texte (sur l'OO en python), que je trouve particulièrement clair:
http://www.alan-g.me.uk/tutor/index.htm
ou celui-là pour python 3:
http://www.alan-g.me.uk/l2p/tutclass.htm
Cordialement,
--
Yves
Pardon, celui-là, plutôt:
http://www.alan-g.me.uk/tutor/tutclass.htm
--
Yves
Non hélas.
essaye de lire ce
De plus, pour des raisons que j'ignore, la fonction traduire en français
de Google Chromium ne marche pas avec ce site.
--
lionmarron
lionmarron
Par curiosité : que contient cette liste ? Là, naïvement, si je devais
le faire, je vois 6 types de pièces avec une pincée de mouvements
chacun, dans des boucles pour ceux qui peuvent les prolonger en
vérifiant qu'il n'y a pas d'obstacle.
Pour les modules en Python, sauf si j'ai manqué quelque chose, ça peut
être quelque chose d'aussi simple qu'écrire un fichier coups.py dans
le même répertoire (tant qu'il n'y a pas beaucoup de modules ça ira) et
l'importer dans un autre en écrivant "import coups" ou "import * from
coups" (ce qui permet d'éviter d'écrire coups.fonction1, coups.f2 et
juste le nom de la fonction apparemment, mais à vérifier).
Là où tu as choisi les différents groupes, tu ajoutes une troisième
ligne contenant le nom du groupe dans lequel tu positionnes le suivi.
Et devant le nom du groupe, tu sélectionnes l'en-tête que tu veux
choisir : je ne me souviens pas des noms dans Thunderbird, mais ça doit
être une liste déroulante dans laquelle tu choisis quelque chose comme
"Suivi sur" plutôt que "Groupe de discussion" (l'en-tête qui apparaît
devant les deux autres lignes).
L'annoncer dans le texte c'est en plus, parce que les humains ne font
pas toujours attention aux en-têtes.
Sans être le moins du monde expert aux échecs, à mon avis les échecs
sont plus complexes que ça. Par exemple il faut vérifier si le coup ne
provoque pas un échec au roi. De plus en cas de roque (ça fait deux
coups très spéciaux à traiter), il faut vérifier si le roi ne passe pas
sous l'échec.
Les pions ne peuvent avancer qu'en ligne droite, mais prendre une pièce
adverse qu'en biais, ...
Au premier mouvement, les pions peuvent faire deux cases (et il faut
vérifier encore qu'il n'y a pas échec ou roi dans la position
intermédiaire, je crois)
Puis y'a des règles spéciales concernant le fait de rejouer un coup qui
a déjà été joué.
J'en oublie surement. M'est avis que tout bien faire ne tient pas en 50
lignes ...
... surtout si on met des docstring très verbeux :d
Bonne journée
Laurent