Sommaire

PolymorphismePolymorphisme sur inférence de type

Nous avons vu au chapitre Raisonnement automatique, section Raisonnement en monde ouvert que, lors du raisonnement, les classes des individus et les superclasses des classes pouvaient être modifiées. Dans ce cas, les méthodes disponibles peuvent changer. De plus, en cas de polymorphisme, c’est-à-dire lorsque plusieurs classes exploitent la même méthode de manière différente, l’implémentation de la méthode pour un individu ou une classe peut changer. C’est le « polymorphisme sur inférence de type ».

Voici un exemple simple :

>>> ma_bacterie = onto.Bactérie(gram_positif = True,  
...     a_pour_forme = onto.Ronde(),  
...     a_pour_regroupement = [onto.EnAmas()] )  
>>> ma_bacterie.méthode()  
C’est une bactérie !

Nous avons créé une bactérie. Lorsque nous exécutons la méthode, c’est l’implémentation de la classe Bactérie qui est donc appelée. Nous allons maintenant appeler le Raisonneurraisonneur.

>>> sync_reasoner()

Le raisonneur a déduit que la bactérie est en fait un Staphylocoque (à partir de ses relations). À présent, si nous appelons la méthode, c’est l’implémentation du Staphylocoque qui est appelée :

>>> ma_bacterie.méthode()  
C’est un staphylocoque ...