Bibliothèque [niveau débutant]

La question :

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

Poser votre question sur le forum Programmation

Les 50 réponses :

Le Tue, 22 Nov 2011 22:06:48 +0100,
lionmarron écrivait :

Bonsoir,

C'est toujours mieux de commencer comme ça...


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 ?


Je ne parlerai pas de Python que de déteste cordialement (et qui me
le rend bien) pour tout un tas de question objectives (et d'autres
subjectives). Je parle ici dans le cas général. Il est parfaitement
possible d'appeler depuis un langage procédural (ou impératif et
certainement aussi depuis un langage fonctionnel) des bibliothèques
partagées écrites dans un langage objet. Le contraire est vrai
aussi. Pour fixer les idées, on peut très bien appeler depuis le C
des bibliothèques écrites en C++ et depuis le C++, des bibliothèques
écrites en C. Il suffit de se mettre d'accord sur les interfaces.


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


Ce n'est pas le but. Le but est d'encapsuler des données dans des
objets pour éviter au maximum que le programmateur de base touche à
ce qui peut fâcher comme les allocations explicites de mémoire. La
contrepartie est que c'est lourd et assez souvent write-only lorsque
ce n'est pas documenté correctement. Passer sur un code C++ complexe
non documenté est une gageure, mais je m'égare.


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


Je crois que j'ai marché dedans...

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr

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

Le Tue, 22 Nov 2011 22:54:08 +0100,
Encolpe Degoute écrivait :


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.


Je ne vois pas en quoi le procédural irait à l'encontre de cela. Le
problème du procédural (et sa force) est que c'est au programmeur de
savoir à qui appartient les données qu'une procédure manipule. En
objet, c'est facile, elles appartiennent à l'objet. Et
personnellement, j'ai vu beaucoup plus de programmes C++ objet et
Java mal fichus que de Fortran infect.


2. Python permet de faire du procédural même si c'est globalement
déconseillé (il permet aussi de faire du lambda calcul)


J'ai toujours déconseillé l'utilisation de Python (ou alors
seulement avec des éditeurs qui changent automatiquement les groupes
d'espaces en tabulations).

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr

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 a écrit :


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

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

Poser votre question sur le forum Programmation

Questions similaires :

Site débutant sur l'algorithmique

Salut je souhaite débuter dans la programmation et je cherche un site pour débutant ou tuto avec les bases de l'algo. j'envisage de me diriger vers delphi et c sharp par la suite merci

debutant en algo cherche littérature ou site avecexo

bonjour à tous debutant en algo je cherche pour me perfectionner des livres ou des sites internet proposant des exerces de niveaux faciles et moyens avec si possible les corrigés. Merci pour toutes les réponses à venir --------------= Posted using GrabIt =---------------- ------= Binary Usenet...

Débutant en algorithmique

Bonjour, Je suis inscrit en 1ère année de BTS Informatique de Gestion au CNED et j'étudie par conséquent,l'algorithmique. J'ai des difficultés à assimiler réellement le raisonnement. Je dois effectuer plusieurs devoirs et je me sens un peu perdu. Je souhaiterais avoir des conseils afin de mieux...

Courbes de niveau

Bonjour On me pose le problème suivant : A partir d'un nuage de points en 3D (donc ayant X,Y,Z ), comment puis-je trouver, calculer et tracer les courbes de niveau correspondant à ce nuage pour des altitudes données ( avec une équidistance de 10 mètres dans mon cas par exemple ). Je ne vois pas par...