Bonjour Alain,
merci pour ta réponse,
Alain Ketterlin wrote:
> Michael Grünewald<
mich...@yahoo.de> writes:
>
>> j'ai implémenté quelques classes représentant des figures dans le plan
>> (des points, des lignes brisées, …) et j'ai besoin de calculer des
>> distances entre deux objets ou des intersections. […]
>
> En fait, le calcul de la distance va dans chaque cas dépendre du type
> des deux figures impliquées. Les langages objets comme Python ne font de
> liaison dynamique que sur un paramètre. Un langage comme... Common Lisp
> (oui, Lisp, ou plutôt CLOS, son extension objet) te permet de choisir
> une version en fonction de tous les types de paramètres.
je ne comprends pas très bien ce que tu veux dire: «Python ne [fait] de
liaison dynamique que sur un paramètre.» La liaison dynamique, c'est
bien ce qu'on appelle aussi la résolution des méthodes? C'est-à dire
l'opération qui étant donné un objet et une méthode trouve la bonne
fonction a appeler?
La paramètre dont tu parles dans le cas de Python, c'est la classe de
l'objet, c'est ça (la valeur de retour de type)? Dans le cas de Lisp ,
je ne vois pas du tout ce que cela peut vouloir dire…
>> Je pensais créer une classe singleton «PlanStrategy» en charge de
>> calculer les distances (et les intersections) qui apprend des cas
>> particuliers et qui sait les généraliser. Par exemple, chaque classe
>> de figure est capable de se présenter comme une réunion de figures
>> simples dont on sait calculer les distances mutuelles et les
>> intersections, et cette présentation est utilisée par «PlanStrategy»
>> pour traiter les cas qu'il ne connaît pas.
>
> C'est une très bonne idée. Vraiment.
Merci! :) Manifestement je ne suis pas sur un trop mauvaise voie…
> Il reste encore à définir ce qu'est
> la distance (sûrement le min des distances des composants).
La distance de A à B (A, B parties du plan) est l'inf des distances
entre a et b, pour a dans A et b dans B. Donc effectivement, dans le
cas des unions finies, la distance est le min des distances des
composantes. Pour des objets à p et q composantes, cela fait p*q
distances à calculer, si on utilise cette approche générale.
>> J'ai cependant quelques problèmes avec la mise au point des
>> programmes, je fais partie des gens qui font beaucoup de petites
>> fautes d'inattention et j'ai l'habitude que le compilateur les détecte
>> toutes pour moi. Quelles sont les techniques de débogages plus
>> avancées que le saupoudrage de «print» du code?
>
> Il y a pdb (je n'ai jamais essayé, en général je m'en sors avec des
> print...)
>
> Si tu en arrives à des programmes assez compliqués, tu vas amèrement
> regretter le typage statique.
C'est déjà fait! :) J'ai implémenté un algorithme de triangulation de
Delaunay, cela m'a pris un temps complètement intolérable,
essentiellement à cause de fautes de frappe… j'ai regretté OCaml avec
lequel j'aurais réglé ça en une demi-journée au lieu de deux jours.
> Mais c'est un autre débat. La réponse
> habituelle pour python est : écrire des tests unitaires, des tas de
> tests unitaires, etc.
Très bien, je me plierai à ce nouveau mantra. Est-ce qu'il a des outils
ou des méthodologies spéciaux pour écrire les tests unitaires en Python?
--
Michael