4D ( 4th Dimension , o Silver Surfer , como se lo conocía durante el desarrollo inicial) es un sistema de gestión de bases de datos relacionales y un entorno de desarrollo integrado desarrollado por Laurent Ribardière . [3] 4D fue creado en 1984 [4] y tuvo un lanzamiento público ligeramente retrasado para Macintosh en 1987 [5] [6] [7] con su propio lenguaje de programación . [1]
Desde entonces, la línea de productos 4D se ha ampliado a un back-end SQL , un compilador integrado , la integración de PHP y varios complementos e interfaces de productividad. Algunos de los complementos creados por 4D incluyen 4D Write (un procesador de textos), 4D View (algo así como una hoja de cálculo, pero con funcionalidad adicional) y 4D Internet Commands (que permitió agregar funcionalidad relacionada con Internet a una base de datos). También hay más de 100 complementos de terceros, gratuitos y comerciales.
4D también se puede utilizar como servidor web , para ejecutar aplicaciones de bases de datos compiladas.
En la actualidad, 4D es publicado por la empresa francesa 4D SAS y cuenta con presencia de ventas, distribución y soporte en la mayoría de los mercados principales, siendo los Estados Unidos, el Reino Unido y Francia los principales mercados. El producto está localizado en más de una docena de idiomas.
Silver Surfer, como se lo conocía durante su desarrollo inicial, fue desarrollado por Laurent Ribardière en 1984. Tras las negociaciones con Ribardière se planeó que Apple Inc. (anteriormente Apple Computer Inc) publicara el software, pero Apple canceló el plan, al parecer debido a la presión de otros posibles editores de bases de datos que afirmaban que si Apple tenía su propia base de datos de "marca", los productos de terceros estarían en desventaja en el mercado. [8] Apple intentó en ese momento asegurarse de que los editores de software conocidos apoyaran la plataforma Macintosh y, como resultado, el proyecto volvió a manos de Laurent Ribardière , quien con la empresaria francesa Marylene Delbourg-Delphis publicó 4th Dimension. Aunque se publicó de forma independiente, Apple apoyó la nueva empresa y utilizó 4D ampliamente en toda la organización para proyectos que incluían la gestión de gimnasios y CIM (Computer Integrated Manufacturing). Varios empleados de Apple se convirtieron en expertos en 4D, entre ellos Lance McAndrew en la sede de Apple en Cupertino y Andrew O'Donoghue en la sede de fabricación europea de Apple en Irlanda , donde una aplicación de 4th Dimension gestionaba la administración del Centro de Servicios Europeo.
En los años siguientes, la base instalada de 4th Dimension creció y la editorial ACI estableció una subsidiaria con sede en Estados Unidos llamada ACIUS, dirigida inicialmente por Guy Kawasaki . Después de 16 años de operar como ACIUS hasta el año 2000, el nombre se cambió oficialmente a 4D Inc. [ 9]
En 1993, se presentó 4D Server v1.1, la versión cliente/servidor de 4th Dimension, junto con el lanzamiento de 4th Dimension v3.1. [10]
En 1995, 4D v3.5 pasó a ser multiplataforma y desde entonces es compatible con los sistemas operativos Microsoft Windows y Apple Macintosh . [11]
En 1997, 4D v6 fue la primera versión de 4D que contenía un servidor web totalmente integrado, lo que permitía a los desarrolladores traducir formularios 4D a HTML sobre la marcha utilizando únicamente el lenguaje 4D. [12]
En 2004, 4D 2004 fue la primera versión de 4D que permitió a los desarrolladores crear aplicaciones independientes, cliente/servidor, web y orientadas a servicios (SOA) sin cambiar ningún código. [13]
En 2008, 4D v11 agregó una capa SQL al motor de base de datos 4D y extendió el SQL nativo al lenguaje de programación 4D, lo que permitió a los desarrolladores de 4D escribir código SQL nativo para conectarse a servidores locales o remotos. [14] [15]
En 2010, 4D v12 integró la capacidad de ejecutar funciones/scripts PHP desde el lenguaje de programación 4D. Esta versión también admitía nuevos comandos de replicación y sincronización e incluía una versión de 64 bits de 4D Server. [16]
[2]
Una aplicación 4D puede ejecutarse en modo independiente o en modo cliente-servidor.
En el modo independiente, se utiliza la aplicación 4D (4D.exe en Windows o 4D.app en Mac) para abrir el archivo de estructura (4DB/4DC) directamente junto con el archivo de datos asociado (4DD).
En el paradigma Cliente-Servidor, se utiliza la aplicación 4D Server (4DServer.exe en Windows o 4DServer.app en Mac) para abrir directamente el archivo de estructura (4DB/4DC) junto con el archivo de datos asociado (4DD). 4D puede utilizarse entonces en modo remoto para conectarse a 4D Server.
4D tiene dos aplicaciones: 4D y 4D Server. 4D Server funciona únicamente como servidor, pero 4D puede ejecutarse en modo independiente o remoto.
4D se puede ejecutar en dos modos. 4D en modo de usuario único permite que una persona ejecute la aplicación. 4D en modo remoto se utiliza para conectarse a un servidor 4D.
4D Server se utiliza para la conectividad Cliente-Servidor con la aplicación. En este modo, 4D Server carga el archivo de estructura (4DB o 4DC) y también el archivo de datos (4DD) y proporciona acceso de red a 4D (en remoto). Cada estación de trabajo tiene una caché actualizada dinámicamente de los recursos con los que está trabajando, mientras que 4D Server mantiene los datos y el código.
Esta sección incluirá ejemplos de sintaxis que demuestran diferentes construcciones de programación utilizadas en 4D, como bucles for y uso de variables.
Los campos, variables y expresiones 4D pueden ser de los siguientes tipos de datos: [18]
Puede encontrar más información sobre el tipo de datos 4D en la página de documentación [Tipos de datos 4D]
Las variables locales tienen como prefijo " $
me gusta" $myLocalVariable
y solo existen mientras dura el método.
Las variables de proceso no tienen prefijo myProcessVariable
y viven durante toda la duración del proceso.
Las variables entre procesos (o globales) tienen el prefijo " <>
me gusta" <>myGlobalVariable
y viven durante toda la aplicación.
Para (vCounter;1;100) // Haz algoFin para
$i :=1 // Inicializar el contador While($i<=100) // Repetir 100 veces // Haz algo $i :=$i +1 // Es necesario incrementar el contador Terminar mientras
$i :=1 // Inicializar el contador Repetir // Haz algo $i :=$i +1 // Es necesario incrementar el contador Hasta($i=100) // Repetir 100 veces
El siguiente ejemplo recorre todos los elementos de una matriz bidimensional:
Para ($vlElem;1;Tamaño de la matriz(anArray)) // ... // Hacer algo con la fila // ... Para ($vlSubElem; 1; Tamaño de la matriz (anArray{$vlElem})) // Hacer algo con el elemento una matriz{$vlElem}{$vlSubElem}:=... Fin para Fin para
El siguiente ejemplo crea una matriz de punteros a todos los campos de fecha presentes en la base de datos:
PUNTERO DE MATRIZ ($apDateFields;0) $vlElem:=0 Para ($vlTable;1;Obtener el último número de tabla) // recorrer cada número de tabla con $vTable como número Si (¿Es válido el número de tabla ($vlTable)) // verificar si el número de tabla $vTable es válido // solo bucle en la tabla válida Para ($vlField;1;Obtener el último número de campo ($vlTable)) // recorrer cada número de campo dentro de la tabla actual // con $vlField como el número de campo actual Si (¿Es válido el número de campo ($vlTable;$vlField)) // comprobar si el número de campo es válido $vpField:=Field($vlTable;$vlField) // obtener el puntero al campo Si(Tipo($vpField->)=Es fecha) // comprobar si el campo actual es una fecha // solo realiza estas acciones si el campo es una fecha $vlElem:=$vlElem+1 INSERTAR EN MATRIZ ($apDateFields;$vlElem) $apDateFields{$vlElem}:=$vpField Fin si Fin si Fin para Fin si Fin para