Il serait pas awesome ce produit ? Genre revolutionary ?
Je crois qu'il y a méprise : ce n'est pas revolutionary mais It’s gonna be legen… wait for it… dary ! Legendary! L'awesomeness c'est totalement Stinson-proof. Par contre cela risque de ne pas être très inclusive, ce qui est à la mode en ce moment. :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Après, je ne comprends pas ce mépris sous-jacent pour les techniciens.
Je ne crois pas qu'il y ait un quelconque mépris envers les techniciens. Il me semble que l'idée générale serait plutôt que la difficulté technique d'exécution d'une œuvre ne détermine nullement sa qualité musicale. Cela se rapproche de ce qu'exprimer Duke Ellington avec son It don't mean a thing (if it ain't got that swing).
Pour rester dans l'instrument de Van Halen, Bibi (aka Biréli Lagrène), un des virtuoses de la guitare, aurait pu mal tourner à la fin des années 80, début 90, s'il avait suivit ce courant. Heureusement, par la suite, il est revenu à la raison (petit clin d'œil à Beethoven sur la fin ;-). Ceci étant il lui arrive encore de composer des pièces qui me laisse de marbre, comme son mouvements : la partie du sax soprano se prête très bien à la tessiture et au timbre de cet instrument, en revanche je trouve qu'il gâche la pièce avec sa guitare.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Le type 'null' est toujours là. Les types de base ne sont pas des objets.
Tout ça, OK (et à mon sens le null est peut-être le plus gros problème de Java). Il y avait un projet pour se débarasser des types de base, mais ça fait longtemps que je n’en ai plus entendu parler.
C'est étrange comme projet, j'aurais plutôt eu l'idée contraire : virer les objets et n'avoir que des types comme ceux de base. :-)
Les définitions mathématiques ne peuvent jamais être fausses. En effet, comme le concept est d’abord donné par la définition, il ne contient exactement que ce que la définition veut que l’on pense par ce concept. Mais, s’il ne peut rien s’y trouver de faux quant au contenu, il peut y avoir parfois, mais rarement, quelque défaut dans la forme (dans l’expression), je veux dire du côté de la précision. Ainsi cette définition ordinaire de la ligne circulaire, qu’elle est une ligne courbe dont tous les points sont également éloignés d’un point unique (du centre), a le défaut d’introduire sans nécessité la détermination courbe. En effet il doit y avoir un théorème particulier qui est dérivé de la définition, et qui peut être aisément démontré, à savoir que toute ligne dont tous les points sont également éloignés d’un point unique est courbe (qu’aucune partie n’en est droite).
Kant, Critique de la raison pure.
Un type c'est un concept et l'interface d'une classe la définition d'un concept (celui mal fait d'algèbre sur un concept). Celui qui définit ses concepts comme des classes s'y prend aussi mal que ce qui est reproché dans le texte ci-dessus. Si au lieu de ce théorème, on prend le fait qu'un cercle a une circonférence dont la valeur est le diamètre multiplié par une constante (Pi) et que l'on met cela dans une méthode d'une classe, alors on définit le cercle comme une quiche sur patte. ;-)
Le problème étant que, si l'on a que des classes, ce défaut qui touche à la forme des définitions, au lieu d'être rare, se retrouve être permanent.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
La commutativité et l'associativité sont des points super importants en calcul sur des gros volumes. Que ce soit en C++ ou en n'importe quoi.
Associativité: tu peux séparer en morceaux indépendants
Commutativité: l'ordre n'est pas important, ainsi tu peux traiter les morceaux quand ils arrivent et ne pas dépendre de la latence réseau par exemple.
Ce n'est pas moi qui dirait le contraire : ces propriétés permettent d'effectuer les calculs dans n'importe quel ordre, i.e. quelque soit la permutation effectuée sur la séquence d'opérations on aboutit toujours au même résultat. Ainsi, on est moins tributaire du temps d'accès aux données (peu importe l'ordre dans lesquelles elles arrivent) que ce soit du à de la latence réseau, ou à des échanges répétés entre le cache et la ram. ;-)
;)
Il y a une série d'articles de blogs (compilé en un livre) sur le thème théorie des catégories pour les programmeurs. L'auteur y donne des illustrations de code en Haskell et C++ : c'est dingue à quel point la syntaxe du C++ est tordue et peu « parlante ». Si l'on prend la notion élémentaire de monoïde (cf chapitre 3), en Haskell cela se définit ainsi :
classMonoidmwheremempty::mmappend::m->m->m
autrement dit un monoïde sur un type m est la donnée d'un élément neutre et d'une opération associative (important l'associativité, même si le contrat est implicite entre les programmeurs ;-). Là où en C++, avec les concepts, on se retrouve à le définir ainsi :
c'est-à-dire la donnée conjointe d'un type (ou concept, ou ensemble…), d'une loi de composition interne associative et d'un élément neutre pour cette loi. La différence avec Haskell étant que le type fait partie du dictionnaire, là où en Haskell le type support du monoïde paramétrise le dictionnaire qui n'a que deux éléménts. C'est similaire à ce type produit :
type'mmonoid={mempty:'m;mappend:'m->'m->'m}
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Oui c'est cela, mais plus proche des packages génériques : c'est tout une section de code qui peut être paramétrée, pas seulement une fonction. Mais les concepts n'ajoutent rien de nouveau là-dessus, c'est ce qu'on toujours fait les template. Les concepts c'est juste un système de types pour les template. Le langage des template est interprété par le compilateur et, avant, lorsqu'il y avait une problème lors de l'instantiation d'une template, il y a avait l'équivalent d'une stack trace en guise de message d'erreur, qui pouvait faire 3km de long si le code utilisé était très générique. Là, ils auront des messages plus clairs du au système de type.
Peut-on faire des trucs encore plus forts avec les concepts que juste spécifier les opérations nécessaires ?
Je ne crois pas, mais on peut les utiliser en dehors des templates. Par exemple, pour contraindre le mécanisme d'inférence de type :
Sortableautox2=f(y);
ne compilera que si la fonction f retourne une valeur que l'on peut trier.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Mais je pense amicalement que tu me provoques un peu sachant que tu sais cela très bien.
Ce n'était pas de la provocation, j'étais bien sérieux avec ma question. Je me doutais bien que cela devait être affirmé sans preuve, mais j'ai préféré avoir confirmation. Là où j'étais un peu railleur, c'est en te demandant la syntaxe choisie pour exprimer cela (de manière générale je me demandes quels genres de psychotropes prennent les responsables du standard C++, mais ils devraient réduire la dose, j'ai rarement vu une syntaxe aussi laide).
C'est juste un problème d'interface ou de contrat que tu passes avec ton développeur et la libraire. Si on reprend l'exemple de la commutativité, si en tant que développeur je sais que le type générique (e.g. template) que j'utilise est commutatif pour mon opération, alors je peux me permettre certaines choses. On peut me mentir, mais au moins j'aurais prévenu. Inversement, en demandant que le type en entrée soit commutatif, je préviens l'utilisateur et il ne peut pas rater la contrainte que je lui demande.
Ça se tient. C++ étant orienté performance, avoir la commutativité permet de choisir un parcours de données plus efficace pour optimiser l'usage du cache du CPU, par exemple.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Avec un concept tu pourra aussi demander à ce que + soit commutatif.
C'est fascinant ça. Mais comment on prouve au type checker que l'opérateur + que l'on définit est bien commutatif ? On se contente de l'affirmer sans preuve ? Dans les faits, elle ressemble à quoi la syntaxe pour ce genre de propriété ?
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
T'as le message d'erreur d'un type checker au lieu d'avoir une stack trace à la python. En gros, le système de template c'était du lamba-calcul non typé, ils y ont rajouté un système de types. Le langage est interprété par le compilateur : en l'absence de typage statique, tu as une stack trace lors de l'appel, avec un système de types tu as tous les avantages du typage statique.
Par contre le choix du nom pour la fonctionnalité n'est pas très judicieux : un concept c'est un type (les deux mots sont synonymes), donc des concepts il y en avait déjà depuis le début en C++. Là, cela revient à paramétrer du code par un type muni de certaines opérations : ça s'appelle une algèbre. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Personnellement, l'apprentissage de la théorie de la relativité m'a surtout fait comprendre a quel point j'étais ignorant, et je ne suis d'ailleurs toujours pas très sur de savoir ce que ce que c'est que la gravité.
Il me semble que tu es un ancien marin, alors pour approfondir cette question, sans avoir besoin d'un lourd formalisme géométrique, je peux te proposer de retourner à la source et de lire le Dialogue sur les deux grands systèmes du monde de Galilée. Si tu as lu le livre d'Einstein sur la rélativité, son personnage enfermé dans sa cabine est un lointain cousin d'un personnage de Galilée : un marin enfermé dans sa cabine et qui se demande si avec les expériences qu'il y fait, il peut déterminer si le bateau est en mouvement ou non. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Pour ma part, j'utilise un masque maison en coton à chaque sortie depuis le début du confinement.
Au niveau de l'entretien, je ne le passe pas à la machine, mais je le fait tremper dans l'eau chauffée à la bouilloire électrique (entre 80°C et 90°C) avec de la javel [1] pendant 30 minutes, puis je finis par un coup de fer à repasser. Avec une telle température de lavage, il finit par rétrécir et j'en refais un autre : c'est assez rapide à faire si on a du stock de tissu ou de vieux draps, et pour le patron je suis maintenant celui fournit par l'AFNOR.
[1]: je mets aussi de la lessive, puis un rinçage rapide avec un adoucissant pour que le tissu ne deviennent pas trop rêche.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
je serais d'ailleurs curieux de ce que Kant aurait à dire sur le sujet
Littéralement parlant, il n'a plus grand chose à dire sur le sujet, étant mort depuis plus de 200 ans. Mais, plus sérieusement, tu es curieux de savoir ce qu'il a dit sur quel sujet ? La tyrannie de groupe ? La première chose qui me vient à l'esprit est qu'il considérait la démocratie comme une forme de gouvernement despotique, mais ce qu'il entendait sous ce terme correspond plus à ce que nous entendons par démocratie directe et non les systèmes représentatifs (dont il était partisan) :
Pour que l’on ne confonde pas (comme on le fait communément) la constitution républicaine avec la démocratique, je dois faire les remarques suivantes. Les formes d’un État (civitas) peuvent être divisées, soit d’après la différence des personnes qui jouissent du souverain pouvoir, soit d’après la manière dont le peuple est gouverné par son souverain, quel qu’il soit. La première est proprement la forme de la souveraineté (forma imperii), et il ne peut y en avoir que trois : en effet, ou bien un seul, ou bien quelques-uns unis entre eux, ou bien tous ceux ensemble qui constituent la société civile possèdent le souverain pouvoir (autocratie, aristocratie et démocratie, pouvoir du prince, pouvoir de la noblesse et pouvoir du peuple). La seconde est la forme du gouvernement (forma regiminis) ; elle concerne le mode, fondé sur la constitution (sur l’acte de la volonté générale, qui fait d’une multitude un peuple), suivant lequel l’État fait usage de sa souveraine puissance, et elle est sous ce rapport ou républicaine ou despotique. Le républicanisme est le principe politique de la séparation du pouvoir exécutif (du gouvernement) et du pouvoir législatif ; le despotisme est le gouvernement où le chef de l’État exécute arbitrairement les lois qu’il s’est données à lui-même, et où par conséquent il substitue sa volonté particulière à la volonté publique. — Parmi les trois formes politiques, indiquées plus haut, celle de la démocratie, dans le sens propre de ce mot, est nécessairement un despotisme, puisqu’elle établit un pouvoir exécutif, où tous décident sur et même contre un seul (qui ne donne pas son assentiment), et où par conséquent la volonté de tous n'est pas celle de tous, ce qui est une contradiction de la volonté générale avec elle-même et avec la liberté.
Je ne suis pas certain que de faire l'éloge de la Corée du Sud soit le meilleur moyen d'arriver à tes fins ;-)
Le système de santé sud-coréen est en passe d’être totalement privatisé. La crise de 2008 a, pour l’instant, obligé le gouvernement coréen à revoir ses plans. Il n’existe pas à proprement parler d’offre publique de santé en Corée, tant l’offre de soins repose essentiellement sur le secteur privé qui représentait en 1996, 91% des lits et 89% du personnel hospitalier.
L'article date de 2010 et la situation n'a pas évolué vers plus d'étatisation, bien au contraire : la Corée du Sud a l'un des systèmes de santé le plus privatisé du monde, bien davantage qu'aux États-Unis.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Peut-être que chez des zététiciens chevronnés il y a quelque chose de précis ?
Se rendre chez les logiciens et philosophes devraient suffire. D'autant que, pour des questions aussi fondamentales, les dernières personnes que j'irai voir sont bien des statisticiens.
Je n'ai pas compris la partie après les deux points.
À considérer les choses objectivement nous n'avons que deux sources de savoir à la base de nos jugements : notre raison et l'expérience via l'observation du monde. Comme il est impossible de tout observer et expérimenter par soi-même, il est inéluctable, dans ce type de connaissance, de substituer l'expérience d'autrui à notre propre expérience au fondement de nos jugements. Procéder ainsi c'est se reposer sur l'autorité d'autrui, ce qui n'a rien de fallacieux.
Si quelqu'un que tu croises te dis qu'en ce moment il y a une pandémie, que tu lui demandes comment il le sait, puis qu'il te répond que c'est ce que dit l'OMS, alors il fait usage d'un argument d'autorité. Rejeter, par principe, tout argument d'autorité au prétexte qu'ils sont nécessairement fallacieux, c'est au pire la porte ouverte à toutes les formes de complotisme, au mieux l'avènement d'un scepticisme radical.
En revanche, dans le champ de la connaissance rationnelle, il n'est pas acceptable de substituer le jugement d'autrui au sien propre : je reconnais le théorème de Pythagore comme vrai, non parce que des géomètres le considèrent comme tel, mais parce je suis en mesure d'en fournir la preuve. La totalité du fondement de telles propositions se trouve en moi-même, dans ma propre raison, et il en est de même pour chacun.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
"Argument d'autorité" est le terme utilisé pour ce qui n'est pas un argument, c'est une astuce de rhétorique, une ruse. C'est la définition du truc :-)
Il me semble que ta définition de l'argument d'autorité est trop stricte : on ne peut s'en passer dans les connaissances expérimentales.
Le préjugé qui tient à la considération des personnes. — Lorsque, dans les choses qui reposent sur l’expérience et le témoignage, nous faisons porter notre connaissance sur la considération que nous avons pour d’autres personnes, nous ne tombons pas dans un préjugé ; car, en fait de choses de cette nature, comme nous ne pouvons pas tout connaître par nous-mêmes, ni tout embrasser avec notre entendement propre, nous basons nos jugements sur la considération due aux personnes. — Mais, si nous fondons nos jugements, en fait de connaissances rationnelles, sur la considération que nous accordons aux autres, ces connaissances ne sont pour nous que de véritables préjugés, car les vérités rationnelles valent anonymement ; il n’est pas question de savoir qui est-ce qui a dit cette chose, mais qu’est-ce qu’on a dit. Qu’importe qu’une connaissance soit ou ne soit pas de noble origine ! Et cependant, le penchant à la considération des grands hommes en matière scientifique est très-commun, tant à cause des limites de la pénétration ordinaire, que par le désir d’imiter ce que nous croyons grand. Notre vanité se trouve encore indirectement satisfaite par le respect que nous portons à quelque homme de génie. De même que les sujets d’un despote puissant sont fiers d’être tous traités par lui de la même manière, puisque le plus petit peut, se croire égal au plus grand, tous deux n’étant également rien en présence du pouvoir illimité de leur maître, de même les adorateurs d’un grand homme se jugent égaux, en ce sens que la supériorité qu’ils peuvent avoir les uns sur les autres, considérée quant au mérite de cet homme, est réputée insignifiante.
Lorsque Liorel nous présente le modèle statistique pour évaluer les risques, on est dans le champ de la connaissance pure et rationnelle : nulle personne ne peut faire autorité ; chacun étant aussi proche des sources du savoir que l'auteur (il se trouve dans la commune raison humaine, c'est-à-dire en nous même). En revanche lorsqu'il fournit les données d'entrée du modèle, elles sont le résultat d'observation et de mesures statistiques : c'est l'autorité des auteurs qui fait foi pour qui n'y a pas un accès direct.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Mathématiquement c'est peut être une horreur, mais en cuisine cela se pratique couramment … :)
Ça n'a rien d'une horreur mathématique, et ne dit on pas couramment « ajouter un ingrédient à la liste ». Comme te l'a dit JeanClaude : tu définis juste une algèbre sur les recettes de cuisine. Il est où le problème ? D'autant que ton exemple est mal choisi pour « détourner » l'arithmétique : c'est de l'arithmétique ton opérateur. Comme je l'ai dit plus haut : d'un certain point de vue les listes c'est des entiers unaires, et là tu as défini l'opération successeur (ou « ajouter 1 »).
Voilà : un entier unaire c'est juste une liste de bâtons, zéro c'est la liste vide et la fonction qui calcule le successeur consiste à ajouter un élément dans la liste (c'est à dire ta surcharge de la fonction add).
Et ici ce que fais ma fonction add sur ma liste d'ingrédients, c'est la même chose que fait ma fonction succ sur les entiers unaires.
Pour répondre à ton autre commentaire :
Les mathématiques s'arrêteraient elles donc ou l'informatique commence :)
ou l'informatique aurait elle une plus grande portée que les mathématiques ?
:)
Non, comme je le dis depuis le début : c'est la même chose. C'est juste une extension et une généralisation des travaux de Descartes quand il a algébrisé la géométrie mais, entre Descartes et nous, il s'est passé près de 400 ans. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Je ne vois pas le rapport qu'il y a entre la question traitée et la polysémie des langages1. De même qu'elle n'a rien à voir avec le fait que toute modélisation est une vision partielle et simplifiée de la réalité. Il s'agit de sémantique des langages et du fait que la relation « est une sorte de » n'a rien à voir avec la notion de classe et d'héritage, contrairement à ce qui est couramment présenté. Un canard, même simplifié, modélisé, tout ce que tu veux, n'a jamais été et ne sera jamais une instance d'une classe canard qui hériterait d'une classe animal. C'est ce que j'avais expliqué en détail dans ce commentaire d'une dépêche.
le polymorphisme ad-hoc constitue une forme de polysémie dans les langages de programmation, mais c'est une autre question. ↩
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
tu as des bug d'intégration, tu a des bug qui apparaissent dans des couches autres du service que tu rend,…
Ça ne change pas le problème : il faut voir la preuve comme la totalité des couches et composants qui composent le service. Peu importe dans quel composant se trouve le bug, ou que celui résulte d'une mauvaise interaction des composants : c'est une erreur dans l'ensemble que constitue la « preuve ». C'est ainsi qu'il faut analyser un système à travers le prisme de la correspondance de Curry-Howard. Quand je parle de preuve ici, ce n'est pas d'une preuve que le système fait ce qu'on attend de lui. C'est le système lui-même que j'identifie à une preuve, et c'est celle-ci qui est erronée s'il y a un bug.
Tu présente une gestion de la portée que tu considère comme une erreur, ce n'est pourtant pas un bug.Ça fait parti de la définition de python et une preuve de l'interpréteur python devra garantir que cette erreur existe.
Non ce n'est pas un bug, ça fait parti de la définition de python, c'est juste un choix quelque peu saugrenu pour un langage qui a commencé au début des années 90.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
il est donc bien plus intéressant d'avoir un langage et un programme qui manipulent des sémantiques triviales plutôt que de perdre beaucoup de monde sur l'autel de la pureté sémantique.
Le problème n'est pas de savoir si la sémantique est triviale ou pure, ou je ne sais quoi; mais que la sémantique affichée en langue naturelle (confusion entre sous-classe et sous-type) ne correspond pas du tout à la sémantique réelle des langages en question. Lorsque l'on dit à quelqu'un qu'une pomme est un fruit, il comprend sans difficulté et cela à un sens très clair pour lui. Par contre quand on lui dit que pour cela il faut faire une classe pomme qui hérite d'une classe fruit : on lui ment ! car alors on traduit sa pensée dans une autre langue sans aucun respect pour la sémantique de sa proposition (la phrase traduite n'a plus le même sens) : traduttore, traditore.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
C'est peut être mathématiquement n'importe quoi, mais cela a une existence informatique.
Je ne dis pas le contraire, mais il y a plein de choses qui existent en informatique mais qui ne devrait pas. Je rêve, par exemple, d'un monde où les bugs dans les logiciels ne serait pas la norme mais l'exception; même d'un monde où les bugs n'existent plus (et je ne suis pas le seul). Un bug ça veut dire un programme qui correspond à une preuve fausse : c'est mal d'écrire des preuves erronées. ;-)
les règles sont aussi faites pour être transgresser, c'est un peu comme cela que l'on avance :)
Certes, mais encore faut-il ne pas faire cela n'importe comment. ;-)
>>>x=1>>>deff(y):returnx+y...>>>f(0)1>>>x="foo">>>f(0)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>File"<stdin>",line1,infTypeError:Can't convert 'int' object to str implicitly>>>
et là, j'ai ri. :-D
C'est juste une adaptation en python de l'exemple donné dans ce cours en LISP de la fin des années 50. Ça a vite était corrigé, et cette gestion de la portée des variables est considérée comme une erreur depuis les années 60. ;-)
Ceci étant j'ai essayé de redéfinir l'addition sur les entiers, mais ce n'est pas permis.
>>>int.__add__=lambdax:xTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:can't set attributes of built-in/extension type 'int'
Donc au final, je ne vois pas de quoi tu voulais parler. Si c'est du polymorphisme ad-hoc, c'est-à-dire, surchargé un opérateur pour qu'il soit définit aussi sur les int, les string, les float… comme dans :
>>>1+23>>>1.5+3.44.9>>>"foo"+"bar"'foobar'
alors oui cela correspond à des principes de base des mathématiques, c'est même le degré zéro de l'algèbre moderne. J'en ai parlé ici.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Je crois qu'il y a un malentendu : je n'ai pas de problème particulier avec les mixins, ni avec wikipédia (pas au point d'aller corriger ce qui s'y trouve). Mon problème vient de la manière dont sont présentés les principes de la POO tant dans les livres que dans l'enseignement : on y soutient des choses logiquement fausse (que l'on retrouve ensuite sur wikipédia).
Au lieu de prendre un exemple sur wikipédia, j'aurais pu prendre cette discussion sur linuxfr avec le commentaire final de Tonton Th :
C'est quoi le sous-entendu sur les devs Ada ?
C'est que si tu ne fais pas gaffe dès la première minute, tu vas au marché, tu achètes cinq pommes et deux poires, ben quand tu es rentrée chez toi, tu ne sais pas combien de fruits tu as :)
D'autant qu'Ada gère très bien le sous-typage et les problèmes de covariance-contravariance qui y sont associés (en logique, ces notions se ramènent à la distinction entre une raison suffisante et une raison nécessaire).
Ce que je reproche à la POO, c'est de prétendre que pour modéliser ce genre de situation, on va avoir une classe fruit qui aura deux sous-classes pomme et poire : sauf que ce n'est pas du tout cela la relation sémantique entre ces concepts. La relation qu'il y a entre eux est une relation de sous-typage et non de sous-classe. C'est cette relation d'héritage entre classe à laquelle faisait allusion mon extrait de wikipédia : les pommes sont une sorte de fruits. Or quand on dit que les pommes sont une sorte de fruits, on affirme que le type pomme est un sous-type (et non une sous-classe) du type fruit. De la même manière que les femmes sont une sorte d'être humains, ou que les femmes entre 18 et 28 ans sont une sorte de femmes. Et c'est là que l'on revient sur l'intérêt d'étudier les patatoïdes, ou les principes de bases de la logique formelle. ;-)
En gros, la POO mélange allègrement la notion de concepts et de théories sur un concept donné : elle met tout cela dans un gros sac fourre-tout qu'elle appelle classe. Ainsi, comme exemple d'aberration, si l'on ajoute un résultat à une théorie (mais sans changer le moins du monde le concept dont elle parle), c'est-à-dire si l'on rajoute une méthode à une classe donnée, on obtient une autres famille d'objets (une autre classe). Ce qui revient tout bonnement à dire que Archimède ne parlait pas des même cercles qu'Euclide, sous ce très pernicieux prétexte qu'il avait consigné d'autres résultats sur eux que lui. Tout personne normalement constituée trouverait cela inepte, et c'est pourtant ce que l'on dit en permanence quand on fait de la POO.
En POO, notamment avec Python, je peu surcharger les operateurs et dénaturer complétement les fondements de l'arithmétique en ré définissant l'addition la soustraction et tout les opérateurs si je le souhaite.
Existe t il un principe mathématique derrière cela ?
Je ne suis pas sûr de comprendre la question, mais je dirais que cela s'appelle l'art de refuser de se soumettre à de fortes contraintes (principalement en Python) afin de pouvoir écrire à peu près tout et n'importe quoi, mais surtout n'importe quoi. :-P
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
J'allais te le dire, mais tu m'enlèves les mots de mon clavier … :)
C'est bien d'être lucide :)
La lucidité est essentielle dans la vie, surtout dans ce cas.
En tout cas je te remercie pour tes citations qui m'ont bien plus, apparemment il n'y a pas que les mathématiques qui t'intéresse.
Mes centres d'intérêt, en science, se concentrent essentiellement autour de la mathématique, de la logique formelle et de la philosophie (de tradition kantienne). D'ailleurs pour rester sur le thème du journal et de la fomation NSI, j'ai pu voir que le programme de terminal traite du paradigme de la POO. Le logicien en moi espère une seule chose : que ce sera l'occasion de faire disparaître, une bonne fois pour toute, de la tête de la future génération de programmeurs une des plus grosses inepties logiques qu'il m'ait été donné de voir. Je veux dire celle qu'illustre, par exemple, cet article de wikipédia sur les mixins :
Contrairement à une classe, un mixin n'est pas destiné à être utilisé seul.
Sémantiquement, il n'y a pas de relation « est une sorte de » entre une instance et un mixin.
Non, non et non!!!! les classes sont la pire chose au monde pour représenter cette relation sémantique. C'est la notion de type qui fait cela ! Et cela devient pire lorsque l'on dit que les canards sont des animaux, donc la classe canard doit hériter de la classe animale. Ce que l'on a, en réalité, ce sont deux concepts (ou types) « canard » et « animal » dont l'un est le sous-type de l'autre (l'un se nomme le genre, ici animal, et l'autre l'espèce, ici canard). Le verbe est, que les logiciens nomment dans ce cas copule, correspond au : dans le code que j'ai écrit plus haut :
L'expression l : femme list se lit « l est une liste de femmes », et les sous classes ne sont pas toujours des sous-types : Subtyping, Subclassing, and Trouble with OOP. Le problème qui arrive dans le cas de l'article est un non respect du principe de substitution de Liskov. Bien que ce principe tire son nom d'un article datant du début des années 1990, il est en réalité connu depuis bien plus longtemps que cela. Ce principe n'est rien d'autre que le dictum de omni et nullo des logiciens qui a reçu cette dénomination latine au moyen âge, et il était déjà connu d'Aristote.
Cela fait donc des années que les adeptes de la POO professent et propagent une ineptie logique qui est connue, comme telle, depuis l'antiquité : il serait peut être temps d'y mettre un terme. ;-)
Pour finir une citation qui revient sur le lien programmation-mathématique :
On est accoutumé à nommer beauté les propriétés évoquées des figures géométriques aussi bien que des nombres […] C'est bien plutôt une démonstration de telles propriétés que l'on serait en droit de nommer belle, parce que, par son intermédiaire, l'entendement comme pouvoir des concepts et l'imagination comme pouvoir de leur présentation a priori se sentent renforcés (ce qui, combiné avec la précision que donne la raison, se nomme l'élégance de la démonstration); car, en tout ceci, du moins la satisfaction, bien que le fondement s'en trouve dans des concepts, est-elle subjective, tandis que la perfection implique une satisfaction objective.
Kant, Critique de la faculté de juger.
Les programmes étant des démonstrations, tout programmeur verra dans ce texte une référence aux sentiments qu'il a pu resentir devant un beau code. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
Evoquer des listes chainées en parlant de célibataires hommes et femmes de 18 à 28 ans … faut oser … :)
c'est, à peu de chose près, la représentation unaire des entiers naturels.
Et c'est la que je m'aperçois que l'on ne doit pas imaginer les mêmes choses … :)
J'ai écrit cela pour pointer du doigt la relation entre programmation et mathématique. Il ne faut pas oublier que l'objectif de l'option NSI est d'initier les élèves à la programmation, et que l'étude des structure de données (dont les listes chaînées) est au programme de terminale.
Ceci étant, j'ai déjà croisé des personnes pour qui une liste de femmes était un entier unaire : on appelait cela des queutards. ;-)
Autrement dit, un queutard fait totalement abstraction des femmes sur la liste, mais ne voit en chacune d'elle qu'une croix de plus sur son tableau de chasse : il transforme la liste de femmes en une liste de croix, c'est-à-dire un entier unaire. ;-)
Si j'ai compris : kant dit intelligement ce que Rabelais disait plus simplement :
"Science sans conscience n'est ruine de l'âme"
Non, pas vraiment, il dit juste ici que la philosophie et la mathématique sont deux matières fondamentalement distinctes et que quiconque utilisera la méthode mathématique (définition, axiome et démonstration) en philosophie ne construira que des châteaux de cartes. Ce qui n'est pas le cas en programmation : une API est une axiomatique, programmer contre une interface générique cela revient à faire usage d'axiomes — comme en mathématique.
Après, je ne dis pas qu'il ne faut aborder la programmation que sous l'angle des mathématiques, ni ne pas montrer la plante et le fruit, mais qu'éluder la partie mathématique de la programmation n'est pas une chose à faire.
Il ne faut pas perdre de vue que l'objectif de l'option NSI au lycée est, avant tout, non de former un futur Steve Jobs, mais d'initier à l'informatique et à la programmation celles et ceux qui seront peut être un jour ses ingénieurs.
Ceci étant, je trouve les mathématiques bien plus lumineuse et flamboyante que tout ce qui a jamais pu sortir de la tête d'un Steve Jobs; mais j'ai bien conscience d'avoir une vision ultra-minoritaire au sein de la population. :-P
Les mathématiques ont un triple but. Elles doivent fournir un instrument pour l’étude de la nature.
Mais ce n’est pas tout : elles ont un but philosophique et, j’ose le dire, un but esthétique. Elles doivent aider le philosophe à approfondir les notions de nombre, d’espace, de temps.
Et surtout leurs adeptes y trouvent des jouissances analogues à celles que donnent la peinture et la musique. Ils admirent la délicate harmonie des nombres et des formes ; ils s’émerveillent quand une découverte nouvelle leur ouvre une perspective inattendue ; et la joie qu’ils éprouvent ainsi n’a-t-elle pas le caractère esthétique, bien que les sens n’y prennent aucune part ? Peu de privilégiés sont appelés à la goûter pleinement, cela est vrai, mais n’est-ce pas ce qui arrive pour les arts les plus nobles ?
[^] # Re: CMS headless et baseless ?
Posté par kantien . En réponse au journal Docker vs Podman sur fedora 32 et headless CMS. Évalué à 1.
Je crois qu'il y a méprise : ce n'est pas revolutionary mais It’s gonna be legen… wait for it… dary ! Legendary! L'awesomeness c'est totalement Stinson-proof. Par contre cela risque de ne pas être très inclusive, ce qui est à la mode en ce moment. :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Ses solos ont mal vieillis (ou j'ai mal vielli)
Posté par kantien . En réponse au journal [Bonsonnisation] La Cathedral est morte ! Vive le bazar !. Évalué à 4. Dernière modification le 08 octobre 2020 à 22:21.
Je ne crois pas qu'il y ait un quelconque mépris envers les techniciens. Il me semble que l'idée générale serait plutôt que la difficulté technique d'exécution d'une œuvre ne détermine nullement sa qualité musicale. Cela se rapproche de ce qu'exprimer Duke Ellington avec son It don't mean a thing (if it ain't got that swing).
Pour rester dans l'instrument de Van Halen, Bibi (aka Biréli Lagrène), un des virtuoses de la guitare, aurait pu mal tourner à la fin des années 80, début 90, s'il avait suivit ce courant. Heureusement, par la suite, il est revenu à la raison (petit clin d'œil à Beethoven sur la fin ;-). Ceci étant il lui arrive encore de composer des pièces qui me laisse de marbre, comme son mouvements : la partie du sax soprano se prête très bien à la tessiture et au timbre de cet instrument, en revanche je trouve qu'il gâche la pièce avec sa guitare.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: C'est pas pour casser l'ambiance
Posté par kantien . En réponse à la dépêche Java 15 est sorti. Évalué à 1.
C'est étrange comme projet, j'aurais plutôt eu l'idée contraire : virer les objets et n'avoir que des types comme ceux de base. :-)
Un type c'est un concept et l'interface d'une classe la définition d'un concept (celui mal fait d'algèbre sur un concept). Celui qui définit ses concepts comme des classes s'y prend aussi mal que ce qui est reproché dans le texte ci-dessus. Si au lieu de ce théorème, on prend le fait qu'un cercle a une circonférence dont la valeur est le diamètre multiplié par une constante (Pi) et que l'on met cela dans une méthode d'une classe, alors on définit le cercle comme une quiche sur patte. ;-)
Le problème étant que, si l'on a que des classes, ce défaut qui touche à la forme des définitions, au lieu d'être rare, se retrouve être permanent.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Typage structurel
Posté par kantien . En réponse au journal C++ Hell/Heaven et les concepts. Évalué à 3.
Ce n'est pas moi qui dirait le contraire : ces propriétés permettent d'effectuer les calculs dans n'importe quel ordre, i.e. quelque soit la permutation effectuée sur la séquence d'opérations on aboutit toujours au même résultat. Ainsi, on est moins tributaire du temps d'accès aux données (peu importe l'ordre dans lesquelles elles arrivent) que ce soit du à de la latence réseau, ou à des échanges répétés entre le cache et la ram. ;-)
Il y a une série d'articles de blogs (compilé en un livre) sur le thème théorie des catégories pour les programmeurs. L'auteur y donne des illustrations de code en Haskell et C++ : c'est dingue à quel point la syntaxe du C++ est tordue et peu « parlante ». Si l'on prend la notion élémentaire de monoïde (cf chapitre 3), en Haskell cela se définit ainsi :
autrement dit un monoïde sur un type
mest la donnée d'un élément neutre et d'une opération associative (important l'associativité, même si le contrat est implicite entre les programmeurs ;-). Là où en C++, avec les concepts, on se retrouve à le définir ainsi :Non, mais what the fuck !? :-o
Par comparaison, en ML, c'est proche du Haskell mais plus conforme à la définition formelle des mathématiciens :
c'est-à-dire la donnée conjointe d'un type (ou concept, ou ensemble…), d'une loi de composition interne associative et d'un élément neutre pour cette loi. La différence avec Haskell étant que le type fait partie du dictionnaire, là où en Haskell le type support du monoïde paramétrise le dictionnaire qui n'a que deux éléménts. C'est similaire à ce type produit :
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Typage structurel
Posté par kantien . En réponse au journal C++ Hell/Heaven et les concepts. Évalué à 3.
Oui c'est cela, mais plus proche des packages génériques : c'est tout une section de code qui peut être paramétrée, pas seulement une fonction. Mais les concepts n'ajoutent rien de nouveau là-dessus, c'est ce qu'on toujours fait les template. Les concepts c'est juste un système de types pour les template. Le langage des template est interprété par le compilateur et, avant, lorsqu'il y avait une problème lors de l'instantiation d'une template, il y a avait l'équivalent d'une stack trace en guise de message d'erreur, qui pouvait faire 3km de long si le code utilisé était très générique. Là, ils auront des messages plus clairs du au système de type.
Je ne crois pas, mais on peut les utiliser en dehors des templates. Par exemple, pour contraindre le mécanisme d'inférence de type :
ne compilera que si la fonction
fretourne une valeur que l'on peut trier.Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Typage structurel
Posté par kantien . En réponse au journal C++ Hell/Heaven et les concepts. Évalué à 3.
Ce n'était pas de la provocation, j'étais bien sérieux avec ma question. Je me doutais bien que cela devait être affirmé sans preuve, mais j'ai préféré avoir confirmation. Là où j'étais un peu railleur, c'est en te demandant la syntaxe choisie pour exprimer cela (de manière générale je me demandes quels genres de psychotropes prennent les responsables du standard C++, mais ils devraient réduire la dose, j'ai rarement vu une syntaxe aussi laide).
Ça se tient. C++ étant orienté performance, avoir la commutativité permet de choisir un parcours de données plus efficace pour optimiser l'usage du cache du CPU, par exemple.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Typage structurel
Posté par kantien . En réponse au journal C++ Hell/Heaven et les concepts. Évalué à 3.
C'est fascinant ça. Mais comment on prouve au type checker que l'opérateur
+que l'on définit est bien commutatif ? On se contente de l'affirmer sans preuve ? Dans les faits, elle ressemble à quoi la syntaxe pour ce genre de propriété ?Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Typage structurel
Posté par kantien . En réponse au journal C++ Hell/Heaven et les concepts. Évalué à 5. Dernière modification le 18 septembre 2020 à 01:19.
T'as le message d'erreur d'un type checker au lieu d'avoir une stack trace à la python. En gros, le système de template c'était du lamba-calcul non typé, ils y ont rajouté un système de types. Le langage est interprété par le compilateur : en l'absence de typage statique, tu as une stack trace lors de l'appel, avec un système de types tu as tous les avantages du typage statique.
Par contre le choix du nom pour la fonctionnalité n'est pas très judicieux : un concept c'est un type (les deux mots sont synonymes), donc des concepts il y en avait déjà depuis le début en C++. Là, cela revient à paramétrer du code par un type muni de certaines opérations : ça s'appelle une algèbre. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Comment j'ai appris à ne plus m'en faire et à aimer les bombes
Posté par kantien . En réponse au journal Où vivre dans 100 ans ?. Évalué à 6. Dernière modification le 08 septembre 2020 à 23:28.
Demande à eingousef ! :D
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Mauvaise idée…
Posté par kantien . En réponse au journal vers un sciencefr.org ?. Évalué à 4.
Il me semble que tu es un ancien marin, alors pour approfondir cette question, sans avoir besoin d'un lourd formalisme géométrique, je peux te proposer de retourner à la source et de lire le Dialogue sur les deux grands systèmes du monde de Galilée. Si tu as lu le livre d'Einstein sur la rélativité, son personnage enfermé dans sa cabine est un lointain cousin d'un personnage de Galilée : un marin enfermé dans sa cabine et qui se demande si avec les expériences qu'il y fait, il peut déterminer si le bateau est en mouvement ou non. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Lavage et entretien
Posté par kantien . En réponse au journal De l'usage et de l'entretien des masques de protection. Évalué à 3.
Au début (avant la norme AFNOR), je suivais ton patron (merci, au passage pour ton journal de l'époque) ou celui du CHU de grenoble. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Lavage et entretien
Posté par kantien . En réponse au journal De l'usage et de l'entretien des masques de protection. Évalué à 4.
J'en sais rien, mais pas besoin de le faire si tu ne veux pas. C'est un carré de 20cm sur 20cm que tu dois replier d'une certaine façon : tu as un tuto ici, avec les dimensions en bas de page.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
# Lavage et entretien
Posté par kantien . En réponse au journal De l'usage et de l'entretien des masques de protection. Évalué à 5. Dernière modification le 09 avril 2020 à 17:35.
Pour ma part, j'utilise un masque maison en coton à chaque sortie depuis le début du confinement.
Au niveau de l'entretien, je ne le passe pas à la machine, mais je le fait tremper dans l'eau chauffée à la bouilloire électrique (entre 80°C et 90°C) avec de la javel [1] pendant 30 minutes, puis je finis par un coup de fer à repasser. Avec une telle température de lavage, il finit par rétrécir et j'en refais un autre : c'est assez rapide à faire si on a du stock de tissu ou de vieux draps, et pour le patron je suis maintenant celui fournit par l'AFNOR.
[1]: je mets aussi de la lessive, puis un rinçage rapide avec un adoucissant pour que le tissu ne deviennent pas trop rêche.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Bah si
Posté par kantien . En réponse au journal Covid 19 - un traçage organisé par le monde du libre ?. Évalué à 3.
Littéralement parlant, il n'a plus grand chose à dire sur le sujet, étant mort depuis plus de 200 ans. Mais, plus sérieusement, tu es curieux de savoir ce qu'il a dit sur quel sujet ? La tyrannie de groupe ? La première chose qui me vient à l'esprit est qu'il considérait la démocratie comme une forme de gouvernement despotique, mais ce qu'il entendait sous ce terme correspond plus à ce que nous entendons par démocratie directe et non les systèmes représentatifs (dont il était partisan) :
Le texte complet est sur wikisource (mis en forme par zeroheure et moi-même ;-).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: 1 seul pays gère la crise
Posté par kantien . En réponse au lien Pour ceux/celles qui vantaient l’efficacité de la gestion de la crise par les dictatures (Chine).... Évalué à 3.
Je ne suis pas certain que de faire l'éloge de la Corée du Sud soit le meilleur moyen d'arriver à tes fins ;-)
L'article date de 2010 et la situation n'a pas évolué vers plus d'étatisation, bien au contraire : la Corée du Sud a l'un des systèmes de santé le plus privatisé du monde, bien davantage qu'aux États-Unis.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Bien vu
Posté par kantien . En réponse au journal Des virus et des hommes. Évalué à 2.
Se rendre chez les logiciens et philosophes devraient suffire. D'autant que, pour des questions aussi fondamentales, les dernières personnes que j'irai voir sont bien des statisticiens.
À considérer les choses objectivement nous n'avons que deux sources de savoir à la base de nos jugements : notre raison et l'expérience via l'observation du monde. Comme il est impossible de tout observer et expérimenter par soi-même, il est inéluctable, dans ce type de connaissance, de substituer l'expérience d'autrui à notre propre expérience au fondement de nos jugements. Procéder ainsi c'est se reposer sur l'autorité d'autrui, ce qui n'a rien de fallacieux.
Si quelqu'un que tu croises te dis qu'en ce moment il y a une pandémie, que tu lui demandes comment il le sait, puis qu'il te répond que c'est ce que dit l'OMS, alors il fait usage d'un argument d'autorité. Rejeter, par principe, tout argument d'autorité au prétexte qu'ils sont nécessairement fallacieux, c'est au pire la porte ouverte à toutes les formes de complotisme, au mieux l'avènement d'un scepticisme radical.
En revanche, dans le champ de la connaissance rationnelle, il n'est pas acceptable de substituer le jugement d'autrui au sien propre : je reconnais le théorème de Pythagore comme vrai, non parce que des géomètres le considèrent comme tel, mais parce je suis en mesure d'en fournir la preuve. La totalité du fondement de telles propositions se trouve en moi-même, dans ma propre raison, et il en est de même pour chacun.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Bien vu
Posté par kantien . En réponse au journal Des virus et des hommes. Évalué à 3.
Il me semble que ta définition de l'argument d'autorité est trop stricte : on ne peut s'en passer dans les connaissances expérimentales.
Lorsque Liorel nous présente le modèle statistique pour évaluer les risques, on est dans le champ de la connaissance pure et rationnelle : nulle personne ne peut faire autorité ; chacun étant aussi proche des sources du savoir que l'auteur (il se trouve dans la commune raison humaine, c'est-à-dire en nous même). En revanche lorsqu'il fournit les données d'entrée du modèle, elles sont le résultat d'observation et de mesures statistiques : c'est l'autorité des auteurs qui fait foi pour qui n'y a pas un accès direct.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Même remarque que précédemment
Posté par kantien . En réponse au journal Présentation des librairies pydiderotlibs dédiées à l'enseignement de python. Évalué à 2.
Ça n'a rien d'une horreur mathématique, et ne dit on pas couramment « ajouter un ingrédient à la liste ». Comme te l'a dit JeanClaude : tu définis juste une algèbre sur les recettes de cuisine. Il est où le problème ? D'autant que ton exemple est mal choisi pour « détourner » l'arithmétique : c'est de l'arithmétique ton opérateur. Comme je l'ai dit plus haut : d'un certain point de vue les listes c'est des entiers unaires, et là tu as défini l'opération
successeur(ou « ajouter 1 »).Voilà : un entier unaire c'est juste une liste de bâtons, zéro c'est la liste vide et la fonction qui calcule le successeur consiste à ajouter un élément dans la liste (c'est à dire ta surcharge de la fonction
add).Toi ce que tu as écris c'est cela :
Et ici ce que fais ma fonction
addsur ma liste d'ingrédients, c'est la même chose que fait ma fonctionsuccsur les entiers unaires.Pour répondre à ton autre commentaire :
Non, comme je le dis depuis le début : c'est la même chose. C'est juste une extension et une généralisation des travaux de Descartes quand il a algébrisé la géométrie mais, entre Descartes et nous, il s'est passé près de 400 ans. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Même remarque que précédemment
Posté par kantien . En réponse au journal Présentation des librairies pydiderotlibs dédiées à l'enseignement de python. Évalué à 2.
Je ne vois pas le rapport qu'il y a entre la question traitée et la polysémie des langages1. De même qu'elle n'a rien à voir avec le fait que toute modélisation est une vision partielle et simplifiée de la réalité. Il s'agit de sémantique des langages et du fait que la relation « est une sorte de » n'a rien à voir avec la notion de classe et d'héritage, contrairement à ce qui est couramment présenté. Un canard, même simplifié, modélisé, tout ce que tu veux, n'a jamais été et ne sera jamais une instance d'une classe canard qui hériterait d'une classe animal. C'est ce que j'avais expliqué en détail dans ce commentaire d'une dépêche.
le polymorphisme ad-hoc constitue une forme de polysémie dans les langages de programmation, mais c'est une autre question. ↩
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Même remarque que précédemment
Posté par kantien . En réponse au journal Présentation des librairies pydiderotlibs dédiées à l'enseignement de python. Évalué à 2. Dernière modification le 13 décembre 2019 à 00:08.
Ça ne change pas le problème : il faut voir la preuve comme la totalité des couches et composants qui composent le service. Peu importe dans quel composant se trouve le bug, ou que celui résulte d'une mauvaise interaction des composants : c'est une erreur dans l'ensemble que constitue la « preuve ». C'est ainsi qu'il faut analyser un système à travers le prisme de la correspondance de Curry-Howard. Quand je parle de preuve ici, ce n'est pas d'une preuve que le système fait ce qu'on attend de lui. C'est le système lui-même que j'identifie à une preuve, et c'est celle-ci qui est erronée s'il y a un bug.
Non ce n'est pas un bug, ça fait parti de la définition de python, c'est juste un choix quelque peu saugrenu pour un langage qui a commencé au début des années 90.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Même remarque que précédemment
Posté par kantien . En réponse au journal Présentation des librairies pydiderotlibs dédiées à l'enseignement de python. Évalué à 3.
Le problème n'est pas de savoir si la sémantique est triviale ou pure, ou je ne sais quoi; mais que la sémantique affichée en langue naturelle (confusion entre sous-classe et sous-type) ne correspond pas du tout à la sémantique réelle des langages en question. Lorsque l'on dit à quelqu'un qu'une pomme est un fruit, il comprend sans difficulté et cela à un sens très clair pour lui. Par contre quand on lui dit que pour cela il faut faire une classe pomme qui hérite d'une classe fruit : on lui ment ! car alors on traduit sa pensée dans une autre langue sans aucun respect pour la sémantique de sa proposition (la phrase traduite n'a plus le même sens) : traduttore, traditore.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Même remarque que précédemment
Posté par kantien . En réponse au journal Présentation des librairies pydiderotlibs dédiées à l'enseignement de python. Évalué à 3.
Je ne dis pas le contraire, mais il y a plein de choses qui existent en informatique mais qui ne devrait pas. Je rêve, par exemple, d'un monde où les bugs dans les logiciels ne serait pas la norme mais l'exception; même d'un monde où les bugs n'existent plus (et je ne suis pas le seul). Un bug ça veut dire un programme qui correspond à une preuve fausse : c'est mal d'écrire des preuves erronées. ;-)
Certes, mais encore faut-il ne pas faire cela n'importe comment. ;-)
et là, j'ai ri. :-D
C'est juste une adaptation en python de l'exemple donné dans ce cours en LISP de la fin des années 50. Ça a vite était corrigé, et cette gestion de la portée des variables est considérée comme une erreur depuis les années 60. ;-)
Ceci étant j'ai essayé de redéfinir l'addition sur les entiers, mais ce n'est pas permis.
Donc au final, je ne vois pas de quoi tu voulais parler. Si c'est du polymorphisme ad-hoc, c'est-à-dire, surchargé un opérateur pour qu'il soit définit aussi sur les
int, lesstring, lesfloat… comme dans :alors oui cela correspond à des principes de base des mathématiques, c'est même le degré zéro de l'algèbre moderne. J'en ai parlé ici.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Même remarque que précédemment
Posté par kantien . En réponse au journal Présentation des librairies pydiderotlibs dédiées à l'enseignement de python. Évalué à 4.
Je crois qu'il y a un malentendu : je n'ai pas de problème particulier avec les mixins, ni avec wikipédia (pas au point d'aller corriger ce qui s'y trouve). Mon problème vient de la manière dont sont présentés les principes de la POO tant dans les livres que dans l'enseignement : on y soutient des choses logiquement fausse (que l'on retrouve ensuite sur wikipédia).
Au lieu de prendre un exemple sur wikipédia, j'aurais pu prendre cette discussion sur linuxfr avec le commentaire final de Tonton Th :
D'autant qu'Ada gère très bien le sous-typage et les problèmes de covariance-contravariance qui y sont associés (en logique, ces notions se ramènent à la distinction entre une raison suffisante et une raison nécessaire).
Ce que je reproche à la POO, c'est de prétendre que pour modéliser ce genre de situation, on va avoir une classe
fruitqui aura deux sous-classespommeetpoire: sauf que ce n'est pas du tout cela la relation sémantique entre ces concepts. La relation qu'il y a entre eux est une relation de sous-typage et non de sous-classe. C'est cette relation d'héritage entre classe à laquelle faisait allusion mon extrait de wikipédia : les pommes sont une sorte de fruits. Or quand on dit que les pommes sont une sorte de fruits, on affirme que le type pomme est un sous-type (et non une sous-classe) du type fruit. De la même manière que les femmes sont une sorte d'être humains, ou que les femmes entre 18 et 28 ans sont une sorte de femmes. Et c'est là que l'on revient sur l'intérêt d'étudier les patatoïdes, ou les principes de bases de la logique formelle. ;-)En gros, la POO mélange allègrement la notion de concepts et de théories sur un concept donné : elle met tout cela dans un gros sac fourre-tout qu'elle appelle classe. Ainsi, comme exemple d'aberration, si l'on ajoute un résultat à une théorie (mais sans changer le moins du monde le concept dont elle parle), c'est-à-dire si l'on rajoute une méthode à une classe donnée, on obtient une autres famille d'objets (une autre classe). Ce qui revient tout bonnement à dire que Archimède ne parlait pas des même cercles qu'Euclide, sous ce très pernicieux prétexte qu'il avait consigné d'autres résultats sur eux que lui. Tout personne normalement constituée trouverait cela inepte, et c'est pourtant ce que l'on dit en permanence quand on fait de la POO.
Je ne suis pas sûr de comprendre la question, mais je dirais que cela s'appelle l'art de refuser de se soumettre à de fortes contraintes (principalement en Python) afin de pouvoir écrire à peu près tout et n'importe quoi, mais surtout n'importe quoi. :-P
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Même remarque que précédemment
Posté par kantien . En réponse au journal Présentation des librairies pydiderotlibs dédiées à l'enseignement de python. Évalué à 3.
La lucidité est essentielle dans la vie, surtout dans ce cas.
Mes centres d'intérêt, en science, se concentrent essentiellement autour de la mathématique, de la logique formelle et de la philosophie (de tradition kantienne). D'ailleurs pour rester sur le thème du journal et de la fomation NSI, j'ai pu voir que le programme de terminal traite du paradigme de la POO. Le logicien en moi espère une seule chose : que ce sera l'occasion de faire disparaître, une bonne fois pour toute, de la tête de la future génération de programmeurs une des plus grosses inepties logiques qu'il m'ait été donné de voir. Je veux dire celle qu'illustre, par exemple, cet article de wikipédia sur les mixins :
Non, non et non!!!! les classes sont la pire chose au monde pour représenter cette relation sémantique. C'est la notion de type qui fait cela ! Et cela devient pire lorsque l'on dit que les canards sont des animaux, donc la classe canard doit hériter de la classe animale. Ce que l'on a, en réalité, ce sont deux concepts (ou types) « canard » et « animal » dont l'un est le sous-type de l'autre (l'un se nomme le genre, ici animal, et l'autre l'espèce, ici canard). Le verbe est, que les logiciens nomment dans ce cas copule, correspond au
:dans le code que j'ai écrit plus haut :L'expression
l : femme listse lit « l est une liste de femmes », et les sous classes ne sont pas toujours des sous-types : Subtyping, Subclassing, and Trouble with OOP. Le problème qui arrive dans le cas de l'article est un non respect du principe de substitution de Liskov. Bien que ce principe tire son nom d'un article datant du début des années 1990, il est en réalité connu depuis bien plus longtemps que cela. Ce principe n'est rien d'autre que le dictum de omni et nullo des logiciens qui a reçu cette dénomination latine au moyen âge, et il était déjà connu d'Aristote.Cela fait donc des années que les adeptes de la POO professent et propagent une ineptie logique qui est connue, comme telle, depuis l'antiquité : il serait peut être temps d'y mettre un terme. ;-)
Pour finir une citation qui revient sur le lien programmation-mathématique :
Les programmes étant des démonstrations, tout programmeur verra dans ce texte une référence aux sentiments qu'il a pu resentir devant un beau code. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Même remarque que précédemment
Posté par kantien . En réponse au journal Présentation des librairies pydiderotlibs dédiées à l'enseignement de python. Évalué à 2.
J'ai écrit cela pour pointer du doigt la relation entre programmation et mathématique. Il ne faut pas oublier que l'objectif de l'option NSI est d'initier les élèves à la programmation, et que l'étude des structure de données (dont les listes chaînées) est au programme de terminale.
Ceci étant, j'ai déjà croisé des personnes pour qui une liste de femmes était un entier unaire : on appelait cela des queutards. ;-)
Autrement dit, un queutard fait totalement abstraction des femmes sur la liste, mais ne voit en chacune d'elle qu'une croix de plus sur son tableau de chasse : il transforme la liste de femmes en une liste de croix, c'est-à-dire un entier unaire. ;-)
Non, pas vraiment, il dit juste ici que la philosophie et la mathématique sont deux matières fondamentalement distinctes et que quiconque utilisera la méthode mathématique (définition, axiome et démonstration) en philosophie ne construira que des châteaux de cartes. Ce qui n'est pas le cas en programmation : une API est une axiomatique, programmer contre une interface générique cela revient à faire usage d'axiomes — comme en mathématique.
Après, je ne dis pas qu'il ne faut aborder la programmation que sous l'angle des mathématiques, ni ne pas montrer la plante et le fruit, mais qu'éluder la partie mathématique de la programmation n'est pas une chose à faire.
Il ne faut pas perdre de vue que l'objectif de l'option NSI au lycée est, avant tout, non de former un futur Steve Jobs, mais d'initier à l'informatique et à la programmation celles et ceux qui seront peut être un jour ses ingénieurs.
Ceci étant, je trouve les mathématiques bien plus lumineuse et flamboyante que tout ce qui a jamais pu sortir de la tête d'un Steve Jobs; mais j'ai bien conscience d'avoir une vision ultra-minoritaire au sein de la population. :-P
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.