L'approche objet s'est divisé en divers courants plus ou moins
cloisonnés, parmi lesquels se distinguent les Langages de
Programmation par Objets [MNC 89], [Fer89] et la Représentation des
Connaissances par Objets.
Les premiers ont introduit des notions puissantes comme la réflexivité
[Gra88], [Coi87b]
et les divers ``Méta-Object-Protocol'' (MOP [KdRB91], [GC87] ,
[Pae93], [Gra89] , [KG89]), pendant que les seconds,
issus à la fois des langages dits de frames [Duc91],
[Dek94], [Rat93] et des logiques
de description (ou logiques terminologiques [Kar93], [WFA84]), ont privilégié l'expressivité plus ou moins
déclarative des langages, et/ou leur sémantique formelle.
Mon sujet de thèse consiste à étendre les fonctionnalités d'un
langage à objet existant pour y apporter des améliorations en matière
d'expressivité, d'efficacité, et notamment en y ajoutant un
``Méta-Object-Protocol'' (MOP), puis de concevoir et réaliser comme
extension de cette première extension, un système de représentation de
connaissances par objets muni de fonctionnalités de classification et
filtrage basées sur une sémantique propre.
Un ``Méta-Object-Protocol'' (MOP) dans un Langage de Programmation par Objets est un protocole de création d'objet (ou d'instance) facilement modifiable et extensible.
Un ``MOP'' permet aisément d'étendre le langage en y ajoutant de nouvelles fonctionnalités grâce à la gestion des différents Méta-objets.
Les Méta-objets sont des classes dont les instances sont des objets ``importants'' qui définissent le langage (une métaclasse est une classe dont les instances sont elles-mêmes des classes [Coi87a]). Ces classes (les Méta-objets) determinent quelles propriétés peuvent avoir leurs instances, et par conséquent définissent les différents comportements du langage [KdRB91].
Quelques exemples de Méta-objets : Les méta-classes, les méta-slots ou
méta-attributs
dont les instances sont des objets qui décrivent les slots ; un slot
est un attribut ou une variable d'instance qui a de nombreuses
caractéristiques (contraintes et/ou fonctionnalités) telles que le type,
l'accès, l'obtention de l'information qu'il représente dans
la classe et donc dans l'objet, les méta-fonctions qui peuvent définir les
mécanismes d'appel de fonctions, ...[GC87]
Mais il y a très peu de Langage à Objets possédant un MOP : Pour qu'un
langage fournisse le puissant outil d'évolution et d'extensibilité
qu'est un MOP, il faut qu'il soit très flexible (qualité qui ne se
retrouve que dans les langages dynamiques, tels que LISP
[Que94] [Ste90], [KG89] et Smalltalk), et qu'il
soit réflexif (pour que les modifications apportées au MOP puissent se
repercutées sur tout le langage et parce que le MOP nécessite une
réflexivité du langage pour être efficace).
L'intérêt d'un MOP dans le cadre de mes travaux est l'aisance qu'il nous autorise pour notamment étendre les fonctionnalités d'un langage à objets existant pour y apporter des améliorations en matière d'expressivité [KdRB91], et aussi parce que les outils d'extension qu'il apporte peuvent faciliter la conception et la réalisation, au dessus du langage à objets existants [DB93] d'un système de représentation des connaissances par objets muni de fonctionnalités de classification et filtrage basées sur une sémantique propre (une logique de description).