4GL

Un article de Wikipédia, l'encyclopédie libre.

4GL est un langage de programmation.

Sommaire

[modifier] Historique : Informix

Dans les années 1980, la standardisation dans le monde de l'informatique n'existait pas. Chaque constructeur avait son propre système d'exploitation, son propre langage de programmation, son propre système de gestion de base de données (SGBD)... De fait, pour pouvoir avoir des programmes capables de tourner sur la plupart des machines, il fallait reconstruire chaque programme pour chaque version. Le langage associé au SGBD Informix (concurrent d'Oracle), était le 4GL.

[modifier] Les versions actuelles

En 2001, IBM racheta la société Informix, mais stoppa le développement du 4GL. Ce langage reste au catalogue de produits IBM, disponible sous Unix (Linux et Aix) car il est toujours utilisé par des millions de clients dans le monde. Son handicap : - Il ne gére qu'une interface 'caractères' (anciens terminaux écrans ASCII type VT220 etc.) - Il est 'base de donnée dépendant' , ne fonctionnant qu'avec la base de données Informix

Plusieurs sociétes proposent maintenant des produits alternatifs, compatibles avec le 4gl original , mais sans ses inconvénients : interface graphique, multibase. Ces produits offrent ainsi à la base installée une possibilité d'évolution et de modernisation des applications,tout en conservant l'acquis du langage, et les compétences. Ces sociétés sont principalement :

  • Aubit4GL. Projet Open Source de 4GL.
  • Four J's Development Tools (4js). La syntaxe et les instructions ont été conservées, mais le compilateur a été renommé BDS. Le précédent compilateur était en mode caractères (avec des rectangles dessinés en guise de fenêtre), en revanche le compilateur 4JS, émulait le graphisme Windows. Désormais, la dernière version de 4JS, nommée Genero, est réellement graphique avec tous les composants de type Windows. Aux clients graphiques Windows, Linux et Mac OSX, Four J's ajoute également une version web sous forme de cgi ou filtre ISAPI, permettant de générer dynamiquement de l'HTML, à partir du 4GL original. La plupart des bases de données du marchés sont à présent supportées. Des extensions Web-services permettent d'ouvrir le 4GL au monde extérieur. Four J's propose en outre un Atelier de Génie Logiciel dédié au 4GL (Genero Studio), et une base de données compatible Informix (Genero DB).
  • Querix Hydra4GL. Querix propose un environnement de développement complet autour du 4GL avec des solutions graphiques basées sur Windows et Java. De plus les produits Querix permettent d'attaquer plusieurs bases de données et non plus uniquement Informix.

Le 4GL traditionnel (propriété IBM) est distribué en France par 2 distributeurs grossistes : Vmark, et Clarten. Il existe un réseau de SSII spécialisé dans l'offre et le développement en 4GL et outils nouveaux, telle la société ILTA.(ilta)

[modifier] Particularités de ce langage

Le 4GL est un langage conçu pour le développement d'applications. C'est un langage de quatrième génération (d'où son nom, 4GL : 4th Generation Langage), ce qui signifie que, contrairement au C, au Pascal et les autres langages de troisième génération qui ne sont pas spécialisés, il est conçu pour communiquer avec plusieurs types de bases de données avec les mêmes sources (O.D.I). Il est basé sur le RDSQL, une extension du SQL. Par exemple, il est possible de définir le type d'une variable en fonction d'un champ d'une table (voir exemple en bas).

Il est insensible à la casse.

Il utilise des instructions purement procédurales (IF, FOR, WHILE, etc.) mais également des instructions non procédurales. Par exemple MENU permet de créer des menus (voir exemple en bas). Dans le cas de MENU, le programme reste entre les instructions MENU et END MENU. Dès que l'utilisateur effectue une action, le programme vérifie s'il doit réagir. Si non il ne fait rien, si oui il fait ce qu'il a à faire puis revient dans le menu et y reste à nouveau. Cela durera jusqu'à ce que l'utilisateur demande à quitter le programme ou à fermer le menu.

Ce genre d'instructions rend le développement plus rapide par rapport aux langages procéduraux habituels (d'après le support de cours édité par Iscariote à la fin des années 80, le rapport est d'environ 1 à 10). Le 4GL permet aux programmes d'être divisés sur plusieurs fichiers source (nommés modules), chacun contenant une partie des fonctions. Ceci permet de rendre communs les modules contenant des fonctions utilisées par plusieurs programmes et donc d'éviter de les réécrire. Un fichier spécial indique au compilateur quels modules compiler pour constituer un programme fonctionnel. L'affichage à l'écran est géré par un fichier spécial. Autant les modules sont au format *.4gl, autant les fichiers d'affichage (nommés formes) sont des fichiers en *.per. Les formes contiennent la disposition des textes et des champs de saisie (et pour les formes compatibles avec les versions récentes du compilateur : des checkbox, des combobox, etc.) ainsi que des variables associées. Les programmes 4gl communiquent avec les formes via des instructions spéciales qui associent des groupes de variables du programme à un groupe de variables de la forme. Enfin la sortie (vers une imprimante, vers un fichier informatique, etc.) est gérée par un type spécial de fonctions, les fonctions reports.

4GL

L'image à gauche montre l'architecture type d'un programme 4GL, avec les instructions utilisées pour la communication entre les différents éléments.

IIUG (International Informix Users Group) dispose de nombreux forums et outils complémentaires au 4GL.

[modifier] Exemples

Le premier montre comment définir une valeur par rapport à une table d'une base de données à laquelle le programme est lié. Ainsi ces variables auront le même type que le champ auquel elles ont été associées.
Le second montre un exemple de la commande MENU
Le dernier exemple montre la spécialisation du 4GL dans les applications de gestion. En quelques lignes de code, il est possible d'afficher un formulaire, de l'interroger, et d'ajouter les valeurs saisies dans la base de données.

[modifier] Exemple 1

DEFINE ma_variable     LIKE ma_table.ma_valeur
DEFINE mon_record      LIKE ma_table.*

[modifier] Exemple 2

MENU Choix
  COMMAND "Interro."
     code, le plus souvent un appel de fonction
  COMMAND "Fin"
     code, le plus souvent un appel de fonction
END MENU

[modifier] Exemple 3

DEFINE client_record LIKE client.*
OPEN FORM client FROM "client" DISPLAY FORM client
INPUT BY NAME client_record.*
 AFTER INPUT
 IF NOT INT_FLAG THEN
   INSERT INTO client VALUES client_record.*
 END IF
END INPUT

[modifier] Références externes