Logtalk : la programmation orientée objet sur Prolog

Alexis SAGET
Ecosystèmes des langages de programmation
2 min readMay 23, 2017

Logtalk est un langage de programmation logique orienté objet, open source et étendant Prolog. Il a été conçu par Paulo Moura en 1998 et reprend la syntaxe de Prolog en lui ajoutant de nouvelles fonctionnalités grâce à l’encapsulation et la réutilisation du code. Il permet de définir de nouveaux types, leurs sémantiques pour ensuite les réutiliser dans des objets, le tout sur un système facilement adaptable aux besoins de l’utilisateur et pouvant tourner sur les compilateurs les plus récents de Prolog.

La convergence de deux approches de programmation

D’une part nous avons Prolog (pour PROgrammation en LOGique) créé en 1972 et connu pour sa capacité à décrire dans un langage déclaratif ce qui est vrai à propos d’un domaine. Il s’agit d’un langage pour lequel le programmeur donne les relations logiques que doit suivre un domaine pour atteindre un objectif donné. Le compilateur se charge ensuite de transformer ces relations logiques en une suite d’instructions. Il est largement utilisé dans le domaine de l’intelligence artificielle et du traitement linguistique grâce à une syntaxe facile à s’approprier.

D’autre part nous avons les langages de programmation orientés objets, qui sont adaptés pour décrire les attributs et comportements des objet dans le domaine. Un point de rencontre devint donc indispensable pour fusionner ces deux approches afin de proposer un langage simple pour la programmation orientée objet dans Prolog.

Logtalk, meilleur compromis ?

De nombreuses extensions pour simplifier la programmation orientée objets dans Prolog ont vues le jour. Elles ont toutes en commun leurs principes de construction d’un objet : traduction de l’objet en des relations logique puis transmission au logiciel logique. Cependant la plupart de ces extensions ne disposait pas d’une architecture suffisamment ouverte pour permettre l’expérimentation d’approches différentes.

Logtalk essaie de résoudre cette problématique grâce à une architecture réfléchie et conçue pour cela. Voici comment est défini un objet Logtalk, ainsi que ses prédicats :

:- object(my_first_object).

:- initialization((write('Hello world'), nl)).

:- public(p1/0).
p1 :- write('This is a public predicate'), nl.

:- private(p2/0).
p2 :- write('This is a private predicate'), nl.

:- end_object.

Ce langage essaie également de répondre à la difficulté pour un langage de maintenir les relations entre les objets : informer un objet du changement d’un autre, etc. Cela passe par une architecture décomposée en slot, chacun étant très modulable et indépendant l’un de l’autre. Cette architecture permet un grande modularité et adaptabilité du langage, le tout étant open source. Le potentiel de Logtalk est grand et permet à de nombreux programmeurs de se l’approprier.

--

--