4GL

4GL es un lenguaje de programación .

Historia: Informix

En la década de 1980, se estandarizaron pocos componentes de los sistemas informáticos. Cada fabricante tenía su propio sistema operativo , su propio lenguaje de programación, su propio sistema de gestión de bases de datos (DBMS) , etc. De hecho, para tener programas capaces de ejecutarse en la mayoría de las máquinas, era necesario reconstruir cada programa para cada versión. El lenguaje asociado con Informix DBMS (competidor de Oracle ) fue 4GL .

Versiones actuales

En 2001, IBM compró la empresa Informix y decidió dar una prioridad muy baja al desarrollo de 4GL. Las versiones de mantenimiento están limitadas al mínimo estricto, es decir, error corregido (7.31 en 2002, 7.32 en 2004 con finalmente arreglos dinámicos), luego 7.50 en 2008, incluido un generador de WebServices de la fuente 4GL. El producto sigue estando disponible en Unix (Linux de 32 o 64 bits, Aix, hp-ux, solaris) porque todavía lo utilizan millones de clientes en todo el mundo. Su discapacidad:

- Solo gestiona una interfaz de 'caracteres' (antiguos terminales de pantalla ASCII tipo VT220, etc.) - Es 'dependiente de la base de datos', solo funciona con la base de datos Informix

Varias empresas ofrecen ahora productos alternativos, compatibles con el 4GL original, pero sin sus inconvenientes: interfaz gráfica, multibase. Estos productos ofrecen así a la base instalada la posibilidad de evolucionar y modernizar las aplicaciones, conservando el lenguaje y las habilidades adquiridas.
Estas empresas son principalmente:

Lycia release II, programado paraseptiembre 2012, trae un nuevo generador de informes basado en Jasper y BIRT , la integración del lenguaje java en aplicaciones 4GL, así como los nuevos clientes .NET y Web / móvil , de tecnología HTML5 y Ajax

Características especiales de este idioma

4GL es un lenguaje diseñado para el desarrollo de aplicaciones. Es un lenguaje de cuarta generación (de ahí su nombre, 4GL: Lenguaje de 4a generación), lo que significa que a diferencia de C , Pascal y otros lenguajes de tercera generación que no son especializados, está diseñado para comunicarse con varios tipos de bases de datos con el mismas fuentes (ODI). Está basado en RDSQL, una extensión de SQL . Por ejemplo, es posible definir el tipo de variable de acuerdo con un campo en una tabla (ver ejemplo a continuación).

Es insensible al caso .

Utiliza instrucciones puramente procedimentales (IF, FOR, WHILE, etc.) pero también instrucciones no procedimentales. Por ejemplo, MENU se usa para crear menús (vea el ejemplo a continuación). En el caso de MENU, el programa permanece entre las instrucciones MENU y END MENU. Tan pronto como el usuario realiza una acción, el programa comprueba si debe reaccionar. Si no, no hace nada, si es así, hace lo que tiene que hacer, luego vuelve al menú y permanece allí de nuevo. Esto durará hasta que el usuario solicite salir del programa o cerrar el menú.

Este tipo de instrucción acelera el desarrollo en comparación con los lenguajes procedimentales habituales (según el material del curso publicado por Iscariot a finales de la década de 1980, la proporción es de aproximadamente 1 a 10).

4GL permite que los programas se dividan en varios archivos fuente (llamados módulos), cada uno de los cuales contiene parte de las funciones. Esto permite hacer comunes los módulos que contienen funciones utilizadas por varios programas y, por tanto, evitar reescribirlos. Un archivo especial le dice al compilador qué módulos compilar para crear un programa funcional.

La visualización de la pantalla se gestiona mediante un archivo especial. Tanto los módulos están en formato * .4gl, como los archivos de visualización (formas con nombre) son archivos en * .per. Los formularios contienen el diseño del texto y los campos de entrada (y formularios compatibles con las últimas versiones del compilador: las casillas de verificación , los cuadros combinados , etc.) y las variables asociadas.

Los programas 4gl se comunican con formas a través de instrucciones especiales que asocian grupos de variables en el programa con un grupo de variables en la forma. Finalmente, la salida (a una impresora, a un archivo de computadora, etc.) es administrada por un tipo especial de función, las funciones de informe.

IIUG (International Informix Users Group) tiene muchos foros y herramientas complementarias a 4GL.

Ejemplos de

El primero muestra cómo establecer un valor contra una tabla en una base de datos a la que está vinculado el programa. Por tanto, estas variables tendrán el mismo tipo que el campo al que se han asociado.

El segundo muestra un ejemplo del comando MENÚ

El último ejemplo muestra la especialización de 4GL en aplicaciones de gestión. En unas pocas líneas de código, es posible mostrar un formulario, consultarlo y agregar los valores ingresados ​​en la base de datos.

Ejemplo 1

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

Ejemplo 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

Ejemplo 3

DEFINE client_record 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

Ejemplo 4

Función que muestra el interés de PREPARAR EJECUTAR

FUNCTION ma_fonction(numero_id) #STEVE 05/09/2008 [email protected] DEFINE numero_id LIKE ma_table.numero_id, query_tmp CHAR(256), date_tmp,date_max DATE LET query_tmp = " SELECT date_naissance ", " FROM ma_table ", " WHERE numero_id = ",numero_id USING "<<<<<&", " " PREPARE q_tmp FROM query_tmp EXECUTE q_tmp INTO date_tmp SELECT MAX(date_tmp) INTO date_max FROM ma_table IF date_max<date_tmp THEN DISPLAY "C'est le plus jeune !!" ELSE DISPLAY "C'est PAS le plus jeune" END IF END FUNCTION

Ejemplo 5

Pequeño ejemplo en el FOREACH

FUNCTION ma_fonction2(ma_date) DEFINE ma_date,date_tmp DATE #STEVE 05/09/2008 [email protected] DECLARE c_date CURSOR FOR SELECT date_naissance FROM ma_table FOREACH c_date INTO date_tmp IF date_tmp>ma_date THEN DISPLAY "Ce n'est pas le plus jeune" RETURN "N" END IF END FOREACH DISPLAY "C'est le plus jeune!!!!" RETURN "O" END FUNCTION

Ejemplo 6

Pequeño ejemplo sobre el manejo y exhibición de tablas

FUNCTION ma_fonction3(ma_date) DEFINE ma_date DATE DEFINE mon_tableau ARRAY[20] OF RECORD date_naiss DATE, nom CHAR(20), prenom CHAR(20), ville CHAR(20) END RECORD DEFINE idx smallint DECLARE c_date CURSOR FOR SELECT date_naissance, nom, prenom, ville FROM ma_table LET idx=1 FOREACH c_date INTO mon_tableau[idx].* # valoriser l'élément du tableau avec la rangée courante LET idx = idx + 1 # incrémenter l'indice du tableau END FOREACH LET idx=idx-1 # le nombre exact d'éléments ( -1 car le foreach termine avec la valeur correcte + 1 ) IF idx > 0 THEN open window ma_window at 3,55 with form "ma_forme" attribute (border) # créer une window en ligne 3, colonne 55, à partir de la forme ma_forme.per/frm CALL set_count(idx) DISPLAY ARRAY mon_tableau TO sa_tableau # afficher le contenu du tableau dans le screen record défini dans ma_forme.per ELSE ERROR "Pas de données à afficher" END IF END FUNCTION

enlaces externos