Travaux Pratiques Représentation des connaissances Intelligence Artificielle Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Préambule 2 : Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS
Programmation procédurale avec les fonctions Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation procédurale Programmation procédurale avec les fonctions 2 types de fonctions - fonctions systèmes - fonctions utilisateurs
Affichage du résultat des appels Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation procédurale Exemple d’appels de fonctions système Appels de fonction ou Expressions Affichage du résultat des appels
imbrication des parenthèses Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation procédurale Exemple d’appels de fonctions système imbrication des parenthèses
Programmation procédurale Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation procédurale Définition de fonctions utilisateurs Le constructeur deffunction Action Définit une fonction Syntaxe (deffunction <nom-fonction> |<commentaire>| |<liste-des-paramètres>| <expression-1> <expression-2> … <expression-n> ) Corps de la fonction <nom-fonction> : nom de la fonction |<liste-des-paramètres>| : liste facultative des paramètres <expression-1> … <expression-n> : corps de la fonction
Programmation procédurale Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation procédurale Définition de fonctions utilisateurs Le constructeur deffunction Exemple Constructeur Paramètres de la fonction Nom de la fonction Corps de la fonction
Exemple d’appel de fonctions utilisateur Chargement de la fonction Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation procédurale Exemple d’appel de fonctions utilisateur Résultats des appels Fonction définie Appels de la fonction Chargement de la fonction
Le langage objet COOL (CLIPS Oriented Object Language) Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage objet COOL (CLIPS Oriented Object Language) Approche de programmation Connaissances déclaratives + Connaissances procédurales = OBJET
Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Paradigmes Les connaissances déclaratives : propriétés de l’objet, son état, ses données, ses particularités (attributs) Les connaissances procédurales : capacités d’action de l’objet : savoir faire, réactions au monde extérieur (méthodes) Les données d’un objet ne sont accessibles et modifiables que par les méthodes de l’objet lui même : (encapsulation) Les objets communiquent entre eux par messages Les messages sont évalués par les méthodes de l’objet
Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Paradigmes Les messages sont envoyés en précisant l’objet destinataire, le nom de la méthode à déclencher et éventuellement les paramètres de cette méthode Un message peut être interprété différemment selon l’objet destinataire. (polymorphisme) Les attributs sont typés et nommés Les attributs sont décrits à travers un ensemble de facettes Il existe plusieurs types de facettes : type, valeur par défaut, intervalle de valeurs, droit d’accès, visibilité
Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Paradigmes Les objets ayant des propriétés et des capacités communes sont regroupés en classes Les classes sont génératrices d’objets Les objets sont crées à partir d’une classe Un objet est une instance unique de sa classe
Les objets héritent des attributs et des méthodes de leur classe Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Paradigmes Les objets héritent des attributs et des méthodes de leur classe Une classe est une spécialisation d’une autre classe existante Une classe 1. hérite des attributs et des méthodes de ses super-classes (ancêtres), 2. ajoute de nouveaux attributs et/ou nouvelles méthodes, 3. peut modifier ou redéfinir les méthodes héritées (surcharge) La partie privée d’une classe (attributs et méthodes) peut être partagée avec les membres de la familles : ancêtres (super-classes) ou descendants (sous-classes)
Travaux Pratiques Représentation des connaissances Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Travaux Pratiques Représentation des connaissances Programmation objets Le langage COOL Programmer en COOL revient à : 1. Définir des classes (defclass) en décrivant ses attributs (slot) avec leurs facettes ainsi que ses méthodes (defmessage-handler). Les méthodes doivent être déclarées au préalable (message-handler) 3. Créer des instances des classes définies (make-instance) 4. Envoyer des messages (send) aux instances créées Préambule 2 : Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass Action Définit une classe à travers les propriétés suivantes : Nom de la classe Nom de la super-classe Rôle Réactivité Les attributs avec leurs facettes Les méthodes
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass Syntaxe (defclass <nom-classe> |<commentaires>| (is-a <nom-super-classe>) (role <rôle-classe>) |(pattern-match <filtrage-classe>)| slot <nom-slot1> (<facette-1> <valeur-facette-1>) (<facette-2> <valeur-facette-2>) …. slot <nom slot2> (<facette-1> <valeur-facette-1>) … message-handler <nom-méthode-1> message-handler <nom-méthode-2> ) Attributs Méthodes Facettes
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : lien dhéritage is-a Action Spécifie le lien d’héritage d’une classe Syntaxe (is-a <nom-super-classe>) Exemple (is-a (USER)) <nom-super-classe> : nom de la super-classe directe : classe système ou classe utilisateur
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : rôle de classe role Action Spécifie le rôle d’une classe Syntaxe (role <quel-rôle>) Exemple (role (concrete)) <quel-rôle> : concrete : classe qui va être instanciée ou abstrait sinon
Le langage COOL : définition des classes (pattern-match (reactive)) Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : réactivité de classe patter-match Action Définit la réactivité d ’une classe Syntaxe (pattern-match <réactivité>) <réactivité> : reactive : instances de classe utilisables dans les règles ou unreactive sinon Exemple (pattern-match (reactive))
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : les facettes Elles servent à décrire un attribut Types de facettes Initialisation ou valeur par défaut (default) Typage (type) Accès (access) Visibilité (visibility) Définition des méthodes d’accès (create-accessor)
Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Le langage COOL : définition des classes Le constructeur defclass : les facettes Facette de valeur par défaut default Action Donne une valeur par défaut à l’attribut Syntaxe (slot <attribut> (default <valeur-par-défaut)) <valeur-par-défaut> : valeur par défaut de l’attribut Exemple (slot statut (default cadre))
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : les facettes Facette de typage type Action Associe à un attribut un type particulier de données Syntaxe (slot <attribut> (type <type-de-données>)) <type de données>: un type de données : string, symbol, instance, float, etc Exemples (slot salaire (type float)) (slot superieur-hierarchique (type instance)) (slot motivations (type symbol))
Les types de données et les classes prédéfinies dans Clips Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Les types de données et les classes prédéfinies dans Clips
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : les facettes Facette d’accès access Action Définit les droits d’accès (lecture et/ou écriture) liés à un attribut Syntaxe (slot <attribut> (access <droits-accès>)) <droits-accès> : droits d’accès : read-only, read-write ou initialize-only Exemple (slot date-embauche (access read-only))
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : les facettes Facette de visibilité visibility Action Précise si l’attribut est accessible aux ancêtres et aux descendants de la classe où il a été définit Syntaxe (slot <attribut> (visibilty <type-visibilité>)) <type-visibilité> : type de visibilité : private ou public Non Oui Attribut accessible aux super-classes et aux sur-classes de la classe où il a été définit
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : les facettes Facette de visibilité visibility Exemple (slot date-embauche (visibility private))
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : les facettes Classe A Méthode-A Facette de visibilité visibility Classe B Classe C Méthode-B Méthode-C Attribut-B-1 private Attribut-B-2 public Classe D Méthode-D
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : les facettes Facette de méthodes d’accès create-accessor Action Définit des méthodes particulières get-nom-de-l’attribut et put-nom-de-l’attribut permettant d’accéder à la valeur de l’attribut en lecture et en écriture Syntaxe (slot <attribut> (create-accessor <méthodes-à-définir>)) <méthodes-à-définir> : read, write ou read-write read : définit le get-nom-de-l’attribut write : définit le put-nom-de-l’attribut read-write : définit le get-nom-de-l’attribut et put-nom-de-l’attribut
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass : les facettes Facette de méthodes d’accès create-accessor Exemple (slot statut (create-accessor read-write)) Définition des deux méthodes get-statut et put-statut
Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Le langage COOL : définition des classes Le constructeur defclass Déclaration des méthodes message-handler Action Déclare une méthode dans une classe Syntaxe (message-handler <nom-méthode>) <nom-méthode>: méthode à déclarer Exemple (message-handler affichage-info)
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass Définition des méthodes defmessage-handler Action Définit une méthode dans une classe Syntaxe (defmessage-handler <nom-classe> <nom-méthode> |<liste-des-paramètres>| <commentaire>| <expression-1> <expression-2> … <expression-n> ) <nom-classe> : nom de la classe <nom-méthode> : nom de la méthode |<liste-des-paramètres>| : liste facultative des paramètres <expression-1> … <expression-n> : corps de la méthode
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass Définition des méthodes defmessage-handler Exemple (defmessage-handler INSCRIPTION affichage-info() (printout t crlf) (printout t crlf "*-*-*-*-*-*-*-*-*-*-*-*" crlf) (printout t "Le nom de l'inscrit est : " ?self:Nom crlf) (printout t "Le prénom de l'inscrit est : " ?self:Prenom crlf) (printout t "Le nom de la société de l'inscrit est : " ?self:Organisme crlf) (printout t "*-*-*-*-*-*-*-*-*-*-*-*" crlf) (printout t crlf crlf crlf) )
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass Un exemple complet Description des attributs et déclaration des méthodes de la classe (defclass INSCRIPTION (is-a USER) (role concrete) (slot Nom (type STRING) (create-accessor read-write)) (slot Prenom (type STRING) (create-accessor read-write)) (slot Organisme (type STRING) (create-accessor read-write)) (message-handler saisie-info) (message-handler affichage-info) )
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass Un exemple complet (defmessage-handler INSCRIPTION saisie-info() (printout t crlf crlf) (printout t "Tapez votre nom : ") (bind ?Nom (readline)) (send ?self put-Nom ?Nom) (printout t crlf) (printout t "Tapez votre prénom : ") (bind ?Prenom (readline)) (send ?self put-Prenom ?Prenom) (printout t "Tapez le nom de votre organisme : ") (bind ?Organisme (readline)) (send ?self put-Organisme ?Organisme) (return "fin de saisie") ) Définition des méthodes de la classe
Le langage COOL : définition des classes Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : définition des classes Le constructeur defclass Un exemple complet Définition des méthodes de la classe (defmessage-handler INSCRIPTION affichage-info() (printout t crlf) (printout t crlf "*-*-*-*-*-*-*-*-*-*-*-*" crlf) (printout t "Le nom de l'inscrit est : " ?self:Nom crlf) (printout t "Le prénom de l'inscrit est : " ?self:Prenom crlf) (printout t "Le nom de la société de l'inscrit est : " ?self:Organisme crlf) (printout t "*-*-*-*-*-*-*-*-*-*-*-*" crlf) (printout t crlf crlf crlf) )
Le langage COOL : création d’instances Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : création d’instances La fonction make-instance Action Crée une instance d’une classe déjà définie Syntaxe (make-instance [<nom-instance>] of <nom-classe> (<attribut-1> <valeur-attribut-1>) (<attribut-2> <valeur-attribut-2>) … (<attribut-n> <valeur-attribut-n>) ) <nom-instance>: nom de l’instance <nom-classe> : nom de la classe à instancier <attribut-i> <valeur-attribut-i> : paire attribut valeur
Le langage COOL : création d’instances Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : création d’instances Le construct definstances Action Définit une collection d’instances d’une classe Syntaxe (definstances <nom-definstances> (<nom-instance1> of <nom-classe> (<attribut-1> <valeur-attribut-1>)… (<attribut-n> <valeur-attribut-n>) ) (<nom-instance2> of <nom-classe> …) <nom-definstances>: nom de la collection d’instances <nom-classe> : nom de la classe à instancier <attribut-i> <valeur-attribut-i> : paire attribut valeur
Le langage COOL : création d’instances Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : création d’instances La commande reset Action Rajoute à la liste des instances toutes les instances définies par un definstances
Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Le langage COOL : création d’instances Exemple de définition d ’une collection d ’instances avec definstances
Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Le langage COOL : création d’instances Rajouter à la liste des instances une collection d ’instances définie par definstances
Le langage COOL : envoi des messages Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : envoi des messages La fonction send Action Envoie un message à un objet Syntaxe (send [<objet-destinataire>] <nom-méthode> |<liste-des-paramètres>|) <objet-destinataire>: objet destinataire du message <nom-méthode> : nom de la méthode associé au message et que l’objet destinataire doit déclencher |<liste-des-paramètres>| : liste facultative de paramètres de la méthode
Le langage COOL : envoi des messages Programmation procédurale et programmation objets avec l’environnement logiciel CLIPS Programmation objets Le langage COOL : envoi des messages La fonction send Exemples (send [Insc1] saisie-info) (send [Insc1] affichage-info)
Représentation des connaissances dans CLIPS Conclusion Clips est un outil souple et puissant pour la représentation des connaissances Il permet d’utiliser voir combiner différents formalismes (construct) Les Règles (defrule) Les Faits (deffacts) Les fonctions (deffunction) Classes d’objets (defclass) Objets ou instances (definstances) Messages (defmessage-handler) Formalisme règles de production Représentation déclarative Formalisme procédural Représentation procédurale Formalisme objet Représentation hybride