Lisp at 1.1. Langage et abstraction

Home
Up
Previous
Next

1.1.    Langage et abstraction

En plus d'être un moyen de communication avec un ordinateur, un langage de programmation possède deux autres fonctions essentielles.

Premièrement, c'est un moyen de communication entre programmeurs, les programmeurs passant une grande partie de leur temps à lire des programmes.

Deuxièmement, un langage de programmation sert de canevas dans lequel nous organisons nos idées au sujet des tâches à accomplir par un ordinateur. Dans ce sens, il doit nous permettre de maîtriser la complexité des applications en nous aidant à construire des idées élaborées à partir d'idées plus simples. Pour ce faire, tout langage de programmation recourt à trois mécanismes [ABEL85] :

  • des expressions primitives : par exemple des expressions représentant des nombres (12, 3.2, ...) , des expressions représentant des opérateurs (fonctions) manipulant ces nombres (+, *, ...), des expressions représentant des chaînes de caractères, etc.
  • des moyens de combinaison : ils permettent de bâtir des expressions composées à partir d'autres, plus simples. Par exemple :

(+ 12 1)

=> 13

(* 5 (+ 1 2 3))

=> 30

Remarque

"=> 13", signifie que l'interpréteur Lisp renvoie la valeur 13 quand il évalue l'expression "(+ 12 1)". Pour plus de détails, voir en annexe 1 la description du processus d'évaluation d'une expression Lisp.

  • des moyens d'abstraction par lesquels des objets composés peuvent être nommés et manipulés comme une unité. Ce mécanisme est tout à fait similaire à celui que nous (les humains) employons pour gérer la complexité du monde réel: comme le nombre de choses que nous pouvons traiter en même temps est limité, nous organisons l'information environnante en une succession d'abstractions dont le contenu sémantique est de plus en plus grand. Autrement dit, l'abstraction est la synthèse d'idées en de nouveaux concepts cohérents afin d'exprimer des idées plus complexes.

En ce qui concerne les langages de programmation, on distingue trois types d'abstractions : l'abstraction procédurale (ou algorithmique), l'abstraction des données et l'abstraction méta-linguistique.

L'abstraction procédurale

Pour les développeurs, historiquement, l'abstraction procédurale est le premier outil de maîtrise de la complexité des logiciels. Les procédures d'un programme seront organisées en plusieurs couches d'abstraction de plus en plus élevées; une couche supérieure est séparée de la couche immédiatement inférieure par une frontière d'abstraction, les détails d'implantation des procédures de la couche inférieure étant cachés aux procédures de la couche supérieure.

Voici, en Lisp, un exemple simple d'abstraction procédurale :

(DEFUN SQUARE (X) (* X X) )

=> SQUARE

et ensuite,

(SQUARE 2)

=> 4

où :

  • DEFUN est l'opérateur de définition d'une fonction (DEFUN est l'acronyme de DEfine FUNction). Voir l'exemple 1 (chapitre 3) pour plus de détails sur DEFUN.
  • SQUARE est le nom de la fonction,
  • X est le paramètre formel de la procédure.

Contrairement à la plupart des langages de programmation, le Lisp ne limite pas arbitrairement l'abstraction procédurale. Le plus souvent, ces langages imposent les restrictions suivantes :

  • les procédures ne peuvent être stockées dans des données structurées comme les tableaux ou les enregistrements (record en anglais).
  • la valeur que renvoie une procédure (une fonction) ne peut être une procédure;
  • une procédure doit être nommée et référencée par son nom.

L'abstraction des données

Concernant les données, un aspect important d'un langage réside dans les moyens dont il dispose pour construire des abstractions en combinant des données pour former des données composées. Comme pour l'abstraction procédurale, le but est d'élever le niveau conceptuel auquel les programmes sont créés et d'augmenter la modularité de la conception (design). En particulier, l'abstraction des données est une technique générale qui permet de séparer d'une part, la partie d'un programme traitant du détail de la représentation des données et d'autre part, la partie de ce programme utilisant ces données; l'interface entre ces deux parties étant clairement définie, il est alors possible de modifier l'une des parties sans modifier l'autre.

L'abstraction méta-linguistique

Ces techniques d'abstraction rendent les programmes plus faciles à concevoir et à modifier. Toutefois, vient un moment où tout langage atteint ses limites dans la capacité qu'il a d'exprimer effectivement des idées complexes. Il est alors nécessaire d'établir de nouveaux langages pour mieux contrôler la complexité du domaine, comme on l'a fait quand on est passé du langage machine au Fortran.

L'abstraction méta-linguistique, c'est-à-dire la construction de nouveaux langages descriptifs, joue un rôle important dans toutes les techniques de l'ingénieur en rapport avec la conception. En informatique, un nouveau langage peut être implanté en terme d'un langage existant via un interpréteur (on parle alors d'embedded language ou de SPPL, special purpose programming language, le langage de base étant appelé implementation language).

Le Lisp est particulièrement adapté à ce type de technique grâce à ses capacités de traitement symbolique et à l'équivalence entre les programmes et les données (voir le paragraphe suivant). Il y a des exemples fameux de ce type d'approche : ainsi les premiers langages de règle ont été implantés en Lisp; certains d'entre eux, comme KEE et ART, sont considérés comme les plus puissants à ce jour. Dans le domaine des outils de construction de systèmes-experts (outils écrits en Lisp), on peut encore citer G2: cet exemple est particulièrement intéressant, car c'est sans doute le seul outil générique (Lisp ou non) suffisamment élaboré et rapide pour faire des applications de contrôle de processus (temps réel); G2 représente aussi un succès commercial évident: environ 34 millions de US$ de vente en 1992 (voir [ISS92/2]).

Cette technique d'abstraction est utilisée dans OPA-2, une application Lisp du Service Informatique de TRACTEBEL (voir l'annexe 2): KAL (Knowledge Acquisition Language) fait partie du module d'acquisition de la connaissance d'OPA; ce langage spécifique permet à un ingénieur de représenter les étapes d'une procédure de conduite de centrale nucléaire.

Les exemples 1 à 3, chapitres 3 à 5, témoignent des possibilités d'abstraction du Lisp; de ce fait, on constate que l'essence conceptuelle d'un programme Lisp apparaît clairement à un lecteur attentif. On observe aussi que la complexité intrinsèque de ce langage est minimum.

Home    Previous    Up    Next
contact
site map
Last update : 04/12/2001