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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Encolpe Degoute
Le #23993821
Bonjour,


Le 22/11/2011 22:06, lionmarron a écrit :
[SNIP]
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.




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)

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.)



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.

A vos claviers. Et que ça saute. Ça manque d'agitation ici (c'est pas
possible).



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
Yliur
Le #23994221
Bonjour

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
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,



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...


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 ?



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é.


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.



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.


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.



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.



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.)



"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 :) .


A vos claviers. Et que ça saute. Ça manque d'agitation ici (c'est pas
possible).

Suivi sur fr.comp.algorithmes



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é.
Tonton Th
Le #23994291
On 11/22/2011 10:06 PM, lionmarron wrote:

Peut-on faire une bibliothèque normale (quelque chose de normalement
compréhensible pour un cerveau normal et pour un simple mortel)



On peut, oui.

--

Nous vivons dans un monde étrange/
http://foo.bar.quux.over-blog.com/
Pierre Maurette
Le #23994321
lionmarron :

[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
lionmarron
Le #23994731
Le 23/11/2011 05:10, Yliur a écrit :

Étant donné qu'il faut malgré tout une certaine longueur de listing
pour savoir si un coup est légal ou non,



Là je ne saisis pas bien... A vue de nez, 50-100 lignes ne suffisent pas
pour vérifier qu'un coup est valide ?


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).

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 ?



Quand tu parles de "partie externe d'un programme", veux-tu réellement
faire une bibliothèque réutilisable ?


Oui ça serait l'idée, mais je me contenterais de quelque chose
d'utilisable même seulement en Python.

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.


Il me faudra peut-être chercher de ce côté alors.

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é.


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.



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.


Ben je sais pas trop.

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.)



"De la blague" n'est pas une appréciation très utile pour comprendre et
peser les avantages et les inconvénients.


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).

Suivi sur fr.comp.algorithmes



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.


Ce sera peut-être dans un second temps alors.


Je ne positionne pas le suivi, que tu as simplement annoncé.


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
yves
Le #23995901
Le Tue, 22 Nov 2011 22:06:48 +0100, lionmarron a écrit:

Bonjour,

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.)



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
yves
Le #23995891
Le Wed, 23 Nov 2011 13:54:03 +0000, yves a écrit:

http://www.alan-g.me.uk/tutor/index.htm



Pardon, celui-là, plutôt:

http://www.alan-g.me.uk/tutor/tutclass.htm


--
Yves
lionmarron
Le #23996841
Le 23/11/2011 14:54, yves a écrit :
Le Tue, 22 Nov 2011 22:06:48 +0100, lionmarron a écrit:

Bonjour,

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.)



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,


Non hélas.

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


De plus, pour des raisons que j'ignore, la fonction traduire en français
de Google Chromium ne marche pas avec ce site.

--
lionmarron
Yliur
Le #23998031
Le Wed, 23 Nov 2011 10:13:26 +0100
lionmarron
Le 23/11/2011 05:10, Yliur a écrit :
>>
>> Étant donné qu'il faut malgré tout une certaine longueur de listing
>> pour savoir si un coup est légal ou non,
>
> Là je ne saisis pas bien... A vue de nez, 50-100 lignes ne
> suffisent pas pour vérifier qu'un coup est valide ?
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).



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).



> Je ne positionne pas le suivi, que tu as simplement annoncé.
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).



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.
Laurent Claessens
Le #23998081
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.



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
Publicité
Poster une réponse
Anonyme