Programacion Visual
Programacion Visual
Programacion Visual
Asesor
Silvia Takahashi, PH.D.
1
Tabla de contenido
1. Introducción .........................................................................................................................1
2. El lenguaje gráfico ...............................................................................................................4
2.1. Sintaxis gráfica .............................................................................................................5
2.1.1. El espacio gráfico .................................................................................................8
2.1.2. Los objetos gráficos ..............................................................................................9
2.1.3. Los atributos visuales ...........................................................................................9
2.2. Las estructuras sintácticas ..........................................................................................10
2.3. Relaciones Objeto-Objeto...........................................................................................11
2.3.1. Separación mediante un separador ......................................................................12
2.3.2. Alineación ..........................................................................................................12
2.3.3. Enlace mediante un conector ..............................................................................13
2.3.4. Contención mediante un contenedor ...................................................................14
3. La programación visual y sus avances en el tiempo ...........................................................15
3.1. Lenguajes más importantes en la programación visual ...............................................15
3.1.1. DDN ...................................................................................................................15
3.1.2. GPL ....................................................................................................................16
3.1.3. FGL ....................................................................................................................16
3.1.4. Grunch ................................................................................................................16
3.1.5. ARK ...................................................................................................................17
3.1.6. LabView .............................................................................................................18
3.1.7. Prograph .............................................................................................................25
3.1.8. Drakon ................................................................................................................29
3.2. Análisis realizado a los lenguajes de programación visuales ......................................40
4. PFC como propuesta de solución .......................................................................................43
4.1. Los componentes ........................................................................................................44
4.1.1. Componentes modulares .....................................................................................44
4.1.2. Componentes de métodos ...................................................................................45
4.1.3. Componentes de importación .............................................................................46
4.2. Drakon y los componentes .........................................................................................47
5. Descripción del prototipo de PFC.......................................................................................48
5.1. Edición de flujos.........................................................................................................50
5.2. Creación de componentes de métodos ........................................................................57
5.3. Creación de componentes de importación ..................................................................59
5.4. Agregar variables complejas.......................................................................................60
i
5.5. Conversión a Java2SE ................................................................................................60
6. Análisis de PFC ..................................................................................................................61
7. Conclusiones ......................................................................................................................63
8. Referencias Bibliográficas..................................................................................................65
ii
1. Introducción
Los proponentes de la programación visual la ven como una posible solución a todos
estos inconvenientes, basados en que la mayoría de las personas piensan y recuerdan
cosas en términos de imágenes. La programación visual permite expresar ideas usando
representaciones gráficas, teniendo un amplio éxito en temas específicos como la
robótica, el procesamiento de imágenes y la producción de audio. Sin embargo la
programación visual no ha sido contundente en la creación de aplicaciones de propósito
general.
David y Keller en 1982 [12], reconocían lo difícil de implementar lenguajes visuales por
los pocos avances en computación gráfica que existían en la época, ahora se cuenta con
avanzadas técnicas en hardware y software en la producción de gráficos. Esta es la
principal motivación de este proyecto, investigar los avances y dificultades que han
tenido los lenguajes visuales de propósito específico con el fin de entender sus
debilidades y proponer soluciones específicas.
1
Este proyecto tiene como objetivos:
Dar a conocer al lector los beneficios que trae la programación visual, con el fin
de incentivar la contribución en esta área.
1
Los objetivos de las propuesta pueden ser vistos de forma mas amplia en el capitulo “PFC como
propuesta de solución”
2
beneficios que se encontraron. Al final se dan las conclusiones, resaltando las lecciones
aprendidas y proponiendo trabajos futuros, a ser desarrollados para el mejoramiento de
la programación visual.
3
2. El lenguaje gráfico
Para el hombre las representaciones gráficas han jugado un papel importante a lo largo
de su existencia, desde simples trazos realizados en cuevas en épocas primitivas hasta
representaciones mucho más elaboradas en la era contemporánea, donde el acceso a la
información cobra gran importancia, y estas representaciones hacen parte de esta. Cada
vez más libros, periódicos y otros medios de comunicación recurren a representar la
información a través de diagramas, mapas y todo aquello que de forma gráfica sea capaz
de expresar ideas. Por lo cual, es necesario comprender los conceptos elementales de las
representaciones graficas, y como estos son capaces de conformar un lenguaje.
En este capítulo se muestran las estructuras básicas que permiten a una representación
gráfica cumplir el papel de expresar información.
Una representación gráfica es un instrumento sobre una superficie más o menos plana,
creado con el fin de expresar información. Por ejemplo una huella en la tierra que fue
hecha por un determinado animal, no puede considerarse como una representación
gráfica ya que no fue hecha con este propósito, pero un mapa trazado con un palo sobre
la misma tierra si puede ser considerada como una representación gráfica [1].
Una representación puede verse como una expresión de un lenguaje visual, y puede ser
analizada con respecto a su sintaxis gráfica y a su interpretación.
Los lenguajes visuales existen por todas partes: las señales de tránsito, un mapa del
mundo, un mapa de carreteras principales, gráficas de barras, de torta, etc. Cada uno de
ellos posee su propio conjunto de reglas de composición y su propio conjunto de
categorías de gráficas basadas en funciones sintácticas especificas. Las reglas de
composición y las funciones sintácticas son la base de la sintaxis gráfica.
4
2.1. Sintaxis gráfica
Así como el significado de una oración depende del significado de las palabras que
contiene y a su vez depende del orden en que se encuentren, del mismo modo, el
significado de una representación gráfica depende de los objetos gráficos que esta
contenga y de cómo están organizados. En el caso de los gráficos, no solo se depende de
un ordenamiento espacial para obtener un significado, los gráficos pueden contener
atributos como color, tamaño o brillo, los cuales pueden proporcionar un significado.
Minsky agrupa la relación espacial, así como las relaciones de atributos dentro del
concepto de relaciones gráficas: “Lo que una representación gráfica significa, depende
en parte de los objetos gráficos que este contenga y en parte de las relaciones gráficas
en los cuales estos objetos se encuentren involucrados”[2]
Con el fin de definir una sintaxis gráfica, se usará el principio de composición, también
conocido como el principio de Frege:
2
Dana Scott and Christopher Strachey. Toward a mathematical semantics for computer languages
Oxford Programming Research Group Technical Monograph. PRG-6. 1971.
5
La definición de la sintaxis también parece apropiada para las representaciones gráficas,
con el fin de explicar el hecho de que una colección de objetos gráficos dispuestos en
una estructura espacial, a menudo puede ser considerado como un solo objeto gráfico.
6
Un objeto gráfico compuesto
Un conjunto de relaciones
Un conjunto de objetos gráficas en las que están
Un espacio gráfico que es gráficos que están contenidos involucrados los objetos gráficos
ocupado por este. en su espacio gráfico. contenidos.
7
Un objeto gráfico compuesto
Objeto A Objeto B
8
2.1.2. Los objetos gráficos
Una representación gráfica se puede considerar un objeto gráfico, y a su vez este puede
ser simple o compuesto; este último presenta una noción en la cual un objeto gráfico
compuesto contiene dentro de su espacio objetos que a su vez pueden contener dentro
de sus correspondientes espacios otros objetos o ser objetos simples.
“La naturaleza de los pigmentos provee las bases para las sensaciones de luz y color; las
cuales son brillo, matiz y saturación. La demarcación geométrica de estos aspectos
provee las bases físicas para la percepción de áreas y sus formas. Todas juntas
constituyen el vocabulario del lenguaje de visión… Las posiciones, direcciones y
diferencias en tamaño, forma, brillo, color y textura son medidos y asimilados por el
ojo.” [4]
De acuerdo con lo anterior, un atributo visual son la serie de características que posee
un objeto gráfico que son perceptibles visualmente, como su orientación, color y forma.
Atributos visuales innatos (brillo ~> valor) y culturales (rojo ~> peligro).
9
Ilustración 3: Los atributos visuales. Basado en la imagen original de
http://www.lip.uns.edu.ar/vcuba/percep.htm
Las relaciones gráficas son las distintas maneras en que el espacio, los objetos gráficos
contenidos en este espacio y los atributos visuales son combinados dentro de estructuras
sintácticas.
10
Anteriormente se advirtió que el espacio gráfico no es el espacio físico que en el
ejemplo sería la servilleta, sino una construcción mental que nos hace imaginar esa
servilleta como un lugar. Los trazos que hagamos en la servilleta, cobran significado
con este espacio gráfico simulando las calles del lugar; las relaciones objeto-objeto son
otro tipo de relación que se explicaran a continuación.
11
2.3.1. Separación mediante un separador
2.3.2. Alineación
Es una relación de objeto – objeto en el cual los objetos están colocados en cadena, una
alineación puede ser ordenada o no ordenada, en el caso de no estar ordenada, un
cambio de posición entre los objetos no cambiaría el significado de la representación.
12
Ilustración 6: Ejemplo de alineación
13
2.3.4. Contención mediante un contenedor
14
3. La programación visual y sus avances en el tiempo
En este capítulo se presentan varios lenguajes que han sido de suma importancia en la
historia de la programación visual, identificando sus ventajas y desventajas, finalmente
se muestran estudios realizados sobre estos lenguajes donde se reflejan los beneficios y
los impedimentos que han impedido que sean usados ampliamente.
3.1.1. DDN
15
3.1.2. GPL
Hacia los comienzos de los 80, Davis propuso un lenguaje más práctico de mayor nivel
conocido como Lenguaje de programación gráfico GPL. Davis y Lowder afirmaron que
la programación textual carecía de claridad intuitiva y propusieron ir más allá que crear
grafos como ayuda para el diseño, creando un ambiente en el cual el programa fuese un
grafo.
En GPL cada nodo se mostraba de forma atómica con la posibilidad de ser expandido
revelando un subgrafo dentro de él, obteniendo una programación estructurada. Estos
subgrafos podían ser definidos recursivamente, los arcos en el grafo tenían un tipo
definido y todo el ambiente prestaba facilidades para la depuración (debugging), usando
visualización o programación basada en texto si se deseaba [6]. Todo esto resultaba muy
prometedor, pero el gran problema fue la carencia de adecuados dispositivos gráficos; la
principal razón para el rápido desarrollo de todos estos conceptos.
3.1.3. FGL
3.1.4. Grunch
En 1982 se desarrollo el sistema Grunch, el cual fue creado por de Jong, quien también
creo el lenguaje textual basado en flujos de datos Cajole, Grunch permitía de forma
gráfica desarrollar estos flujos de datos y mediante una herramienta llamada Crunch se
podía convertir el grafo a Cajole [12].
16
3.1.5. ARK
A pesar de ser un lenguaje de propósito especifico, los usuarios no solo podían crear
simulaciones usando objetos e interactores pre construidos, sino también nuevos
interactores a partir de sus diálogos y botones [5].
17
Ilustración 10: Área de trabajo de ARK
3.1.6. LabView
Es uno de los lenguajes más conocidos desarrollado en la mitad de los años ochenta que
permitía la construcción de instrumentos virtuales para el análisis de datos en
laboratorios. Se pensó con el fin de ser usado por personas que no son programadores
profesionales [6]. Un programa en LabView es construido conectando funciones
predefinidas, representadas en forma de cajas con iconos, usando arcos como flujo de
datos. Cada componente también tiene una interfaz visual para permitir el diseño del
instrumento virtual. Con Labview los programadores inexpertos han podido desarrollar
programas de mediana complejidad e incluso LabView está diseñado para programar
en él aplicaciones equivalentes a millones de líneas de código en lenguajes textuales [5].
Con LabView se pude crear toda clase de programas aunque su mayor enfoque está
dado para ingenieros y científicos en tareas como:
Adquisición de datos
Control de instrumentos
Automatización Industrial
Diseño de control
18
Diseño embebido
Domótica
3
A continuación se hace una breve descripción de la aplicación y un ejemplo.
Panel Frontal
Se trata de la interfaz gráfica del VI con el usuario. Esta interfaz recoge las entradas
procedentes del usuario y representa las salidas proporcionadas por el programa. Un
panel frontal está formado por una serie de botones, pulsadores, potenciómetros,
gráficos, etc [7]. Cada uno de ellos puede estar definido como un control (a) o un
indicador (b). Los primeros sirven para introducir parámetros al VI, mientras que los
indicadores se emplean para mostrar los resultados producidos, ya sean datos adquiridos
o resultados de alguna operación.
3
Si el lector se encuentra interesado en LabView puede ingresar a su página oficial:
http://www.ni.com/labview/
19
Diagrama de bloques
20
Paleta de herramientas
Algunas de las opciones que presenta esta paleta son las siguientes:
Probe tool – Crea puntos de prueba en los cables, en los que se puede
visualizar el valor del dato que fluya por dicho cable en cada instante.
Paleta de controles
Se utiliza únicamente en el panel frontal. Contiene todos los controles e indicadores que
se emplean para crear la interfaz del VI con el usuario.
21
Ilustración 13: Paleta de controles de LabView
Paleta de funciones
22
En primer lugar, se debe construir el panel frontal deseado:
Ilustración 15: Creación de un panel frontal. Mediante de la paleta de de controles se puede diseñar el panel
frontal.
23
1. Abrir el diagrama de bloques (menú Window, opción Show Diagram).
6. Colocar los cables tal y como se muestra en la figura anterior, empleando para
ello la Wiring Tool.
Varios críticos ponen en duda que LabView se considere un lenguaje ya que carece del
concepto de recursión (Aunque es posible efectuar recursión de una forma no
convencional en otros lenguajes visuales) y no use características de la programación
orientada a objetos [5] además, posee estructuras gráficas enfocadas a solucionar
problemas particulares.
24
Jeff Kodosky cofundador de National Instruments, afirma que las herramientas
adicionales de LabView dan mayor fortaleza al lenguaje, sin que pierda el hecho de ser
un lenguaje de propósito general [9].
Entre otras críticas se encuentra el hecho tener que instalar un programa en cada
computador que quiera ejecutar una aplicación de LabView, ya que la aplicación por sí
sola no se puede ejecutar, reduciendo la portabilidad y acrecentando los costos de las
4
compañías debido a que su precio puede oscilar entre $1199 y $4299 dólares .
3.1.7. Prograph
Prograph era un lenguaje visual más general que LabView, el cual combinaba los
principios de flujo de datos con programación orientada a objetos. Considerado como el
más exitoso de los lenguajes visuales [5]. Se originó en 1982 en la Universidad técnica
de Nueva Escocia, luego fue propiedad de Pictorius Inc. Su último lanzamiento fue
Prograph CPX (Cross-Platform Extensions) tras la desaparición de Pictorius Inc en el
2002.
4
Precio de 2007
25
Ilustración 17: Ventanas de Prograph, donde se pude apreciar la ventana de métodos y los dos casos del
método CALL
En la figura anterior, se puede ver que en la ventada Methods contiene los nombres de
todas las funciones siendo CALL la rutina principal.
Los métodos consisten en uno o más casos. Cada caso de un método es un diagrama de
flujos de datos que describe como el caso es ejecutado. Cada elemento básico del flujo
de datos asigna una operación que será usada con los datos que entran a este a través de
uno o más terminales. Las salidas de los datos de estos elementos también pueden ser
más de uno y como suele ocurrir, las líneas en el diagrama de flujo indican como los
datos se propagan desde una salida a las terminales [6].
El método CALL consta de dos casos. El número del caso, como también el total
número de casos es indicado en el titulo de la ventana que contiene el diagrama de
flujos del método. Este contiene llamados a dos métodos del sistema “ask” y “show” y
un llamado de un método definido por el usuario “sort”.
26
En el caso uno de “CALL” “sort” es un múltiple lo que indica que será ejecutado varias
veces. Se reconoce por representarse como un icono con múltiples llamados con flechas
que salen y entran del mismo sitio; este tipo de múltiple es llamado múltiple iterativo
donde las salidas son las entradas de la próxima iteración. La ejecución del ciclo
continuará hasta que no sea ejecutado un control llamado terminate-on-success dentro
del método “sort”.
El método “sort” expuesto en la figura anterior, contiene dos controles que terminan la
ejecución del método. El primer control (comparando la entrada de “sort” con “()”),
llamado terminate-on-success, indicando que el ciclo se termina con un estado de
“éxito”. El segundo control (comparando la salida de la partición con “()”), llamado
terminate-fail-on-success, indicando que el ciclo se termina con un estado de “falla”.
Como se discutió anteriormente este efecto de falla obliga a que el caso 2 de CALL se
ejecute [5].
La gran mayoría de lenguajes usan estructuras como condicionales (if y switch) y ciclos
(while y for). Prograph usa estructuras con resultados similares llamados controles.
27
Existen dos tipos de controles, el primero permite continuar por el flujo si el dato a
evaluar es verdadero y el segundo control permite continuar el flujo si la evaluación del
dato es falsa. Se diferencian el primero por estar identificado con “chulo” y el segundo
con una “X”. Cada control tiene variantes indicado con líneas arriba y abajo.
Los controles con líneas encima son llamados controles de terminación, los cuales
terminan el ciclo si el valor que evalúan es cierto para el caso del control con “símbolo
de chequeo” y falso con el control “X”. Los controles con líneas por debajo se llaman
controles de finalización los cuales permiten al programa finalizar la ejecución de la
aplicación en caso de que la evaluación del dato se cumpla.
Si el control tiene tanto la línea superior como la línea inferior es llamado control de
continuación que finaliza la iteración del ciclo sin importar lo que arrojó la evaluación
del dato; es similar a la expresión continue, presente en varios lenguajes textuales [11].
Aunque la descripción anterior es bastante básica, muestra las características esenciales
de este lenguaje. Cabe destacar que el mayor logro de este lenguaje es su habilidad de
liberar al programador de implementar a innecesarios niveles de detalle que poseen la
mayoría de los lenguajes textuales, de ahí su éxito comercial.
A Protograph se le critica sus controles, ya que se pueden confundir por sus distintas
variantes, sobre todo los programadores novatos. Con respecto a los ciclos, se le critica
por poseer una sintaxis gráfica compleja, a su vez, para poder visualizar un ciclo se debe
abrir en una nueva ventana, dándose la posibilidad de que la pantalla del programador
se llene de ventanas dificultando la comprensión del algoritmo. Pero no solo se puede
28
llenar la pantalla de ventanas de ciclo; los controles también generan ventanas para ver
su estructura interna que son indistinguibles entre las ventanas de ciclo.
3.1.8. Drakon
Se describirán los aspectos básicos del lenguaje que son necesarios para la creación del
lenguaje propuesto.
Drakon está compuesto por los iconos que se encuentran en la siguiente figura:
5
Su lectura es recomendable:
http://babelfish.altavista.com/babelfish/trurl_pagecontent?lp=ru_en&trurl=http%3a%2f%2fdrakon.pbw
iki.com%2f
29
Ilustración 20: Iconos de Drakon
30
Los macroiconos son composiciones de los iconos básicos que describen una operación:
31
Para estos iconos y macroiconos Drakon aplica una serie de reglas o estructuras para
ubicarlos a través del espacio.
Para darle mayor claridad a la representación, Drakon establece una regla llamada:
«entre más esté a la derecha más tarde se ejecuta» donde cada caso de la bifurcación
debe correrse más hacia la derecha, permitiendo al programador diferenciar casos base
de casos particulares.
32
Ilustración 23: Diferencias entre aplicarse la regla "entre más en la derecha más tarde se ejecuta" y sin ella
34
Drakon tiene dos formas de distribuir grupos de iconos a través del espacio: Silueta y
Primitivo.
Silueta es la representación del flujo usando ramas. Las ramas contienen una entrada y
varias salidas, la entrada usa el icono «operador» con el nombre de la entrada como
marcador y las salidas usan el icono «nombre de ramas» que hace referencia a ramas
existentes. Se puede comparar estas salidas con el comando goto de los lenguajes
textuales, así pues el flujo en la representación silueta es fragmentado en ramas.
Ilustración 25: Diferencia entre la representación usando el diagrama primitivo y el diagrama silueta
35
La representación silueta al igual que los iconos de pregunta debe seguir la regla «entre
más esté a la derecha más tarde se ejecuta». Esto permite que el programador no se
pierda buscando la rama que sigue.
36
Como se ve en la anterior figura las dos imágenes se encuentran incorrectas, ya que
dificulta al programador seguir la secuencia del algoritmo.
La estructura compuesta de ramas presenta una ventaja para los programadores que no
conozcan el algoritmo o que lo hayan olvidado, ya que puede leer los marcadores de
cada rama, que le permitiría recordar lo que realizó o tener una idea de que se trata el
algoritmo.
37
Ilustración 26: Representación de un algoritmo usando diagramación primitiva de Drakon
38
Ilustración 27: Representación del mismo algoritmo de la ilustración 29 usando diagramación silueta
39
Las figuras anteriores representan el mismo algoritmo pero con la diferencia que en la
primera figura se encuentra representado por el modo primitivo, y en la segunda con el
modo silueta.
Varios autores han realizado estudios con Prograph y LabView concluyendo que tienen
las siguientes ventajas y desventajas:
40
Otros aspectos favorables y desfavorables que arrojaron los estudios realizados y que
deben ser tenidos en cuenta dentro del desarrollo e implementación de un lenguaje de
programación visual son los siguientes:
Los lenguajes de programación visual permiten que las fases de diseño y codificación
sean mezcladas, esto presenta un inconveniente ya que no existen metodologías de
desarrollo de software que permitan esta unión, reduciendo los beneficios que este
provee [6]. Aún así esta situación permite al cliente apersonarse de la situación,
reduciendo costosos errores por problemas de comunicación entre el cliente y el
desarrollador, reduciendo tiempo y dinero.
41
Refinar especificaciones a implementaciones.
Aunque los objetivos de este proyecto no involucran el estudio del desarrollo a gran
escala en la programación visual, cabe resaltar que esta es una problemática importante
la cual debe ser investigada con mayor profundidad, sin embargo, se espera con la
puesta a prueba del lenguaje aquí propuesto, se pueda llegar a la solución de algunos de
estos problemas.
42
4. PFC como propuesta de solución
En esta sección se propone PFC, un lenguaje basado en flujos de datos; mediante sus
estructuras se espera solucionar algunos de los problemas de la programación visual
mostrados anteriormente, así como conocer las dificultades que se pueden presentar en
el diseño de un lenguaje visual.
43
Objetivos de PFC
Son los elementos fundamentales de PFC, cumplen con la mayoría de los objetivos del
lenguaje; dependiendo de su tipo, proporcionan al programador diferentes funciones.
Se usan con el fin de proporcionar una mayor claridad al flujo, su propósito es contener
flujo dentro de él. Los módulos permiten al programador definir los elementos
principales de la arquitectura del programa o partes de este.
44
4.1.2. Componentes de métodos
Uno de los objetivos es hacer de PFC un lenguaje visual que sea fácilmente traducible a
un lenguaje textual sin importar si se usa el paradigma de la programación orientada a
objetos. El paradigma de la programación orientada a objetos, busca mediante los
objetos representar objetos reales del mundo. Pero en lenguajes como java, con
preocupación se ha visto que constantemente se acude al “casting” en los objetos,
perdiéndose el real sentido del objeto y dificultando la comprensión del programador.
Los componentes de métodos al igual que las clases que definen los objetos contienen
métodos, pero a diferencia de estos, las clases agrupan métodos que modifican una serie
de atributos en común. Los componentes de métodos agrupan métodos en torno a una
serie de operaciones con características en común. Estos componentes no contienen
atributos, únicamente transforman los “atributos” los cuales dentro de PCF es llamado
flujo de transformación. De este modo el flujo de transformación puede ser usado por
componentes que transformen este tipo de flujo. De este modo el “casting” no existe,
siendo más fácil para el programador entender el flujo.
<m>Método A <i>implementación 1
<i>implementación 2
<m> Método B <i>implementación 3
<i>implementación 4
<m> Método C
45
método, que además podrá requerir parámetros dependiendo de cómo efectúe la
transformación. El componente también puede retornar un valor dependiendo del
método que se eligió.
Los métodos son similares a los métodos de los lenguajes orientados a objetos; aceptan
parámetros con el fin de transformar el flujo de transformación del componente de
métodos al que pertenece.
Los lenguajes textuales han permitido a los programadores acudir a librerías, las cuales
permiten reducir el tiempo de desarrollo. PFC permite mediante los componentes de
importación hacer uso de ellas.
46
Lenguaje
C++
<i> Implementación 1
Componente de
importación
Ilustración 30: Jerarquía de los elementos de importación
Drakon presenta una estructura de flujo idóneo para ser vinculado con los componentes,
sus reglas permiten entender el código más fácilmente, el cual hace parte de los
objetivos de PFC. Estas reglas pueden ser implementadas en una aplicación, aunque
reglas como la prohibición de las aliteraciones necesitan de la colaboración del
programador, así como la regla «entre más esté a la derecha más tarde se ejecuta» en el
caso de las bifurcaciones, donde el programador se ve en la obligación de
intercambiarlos de sitio para poder cumplir la regla.
Los componentes junto con los iconos de Drakon conforman los iconos de PFC.
47
5. Descripción del prototipo de PFC
Pestañas de navegación
Barra de herramientas Barra de variables y parámetros
48
En el programa los componentes se identifican con los siguientes iconos:
Componente modular
49
Los iconos de los componentes de métodos e importación son iguales debido a que al
ser usados por el programador, a este no le interesa si fue importado o no, solo podrá
saber si es importado o no si lo edita.
50
Ilustración 33: Barra de iconos, mostrando iconos cuando se edita un flujo
Variables usadas: Lista las variables complejas que se han creado en el proyecto.
51
implementación de un método esta barra muestra las variables, los parámetros del
método al que pertenece y la variable de transformación.
En el caso del flujo modular pueden presentarse dos casos, si el módulo pertenece al
flujo principal esta barra mostrará las variables del flujo principal, pero si el módulo
pertenece a una implementación contendrá las variables, parámetros y flujos de
transformación de la implementación.
Para agregar iconos a un flujo, si se está editando un flujo principal, se debe colocar
titulo al proyecto; para ello se hace doble click al título del proyecto y aparecerá un
icono con unas herramientas, se hace click a este icono que desplegará un diálogo donde
se coloca el titulo.
52
Los iconos se interconectan con otros por medio de puertos, en caso del titulo, este
contiene un puerto en su parte inferior.
Para agregar un icono se debe primero hacer click a un puerto y luego a uno de los
iconos o componentes disponibles.
Como en el caso de la edición del título de icono titulo, los demás iconos cuentan con el
mismo botón que al hacerle click desplegará un dialogo que solicita información
dependiendo del icono.
53
Ilustración 37: Dialogo de configuración del icono de pregunta
Para agregar componentes al flujo de igual forma se hace click en el puerto de un icono,
luego se va a la pestaña «componentes usados», donde se elige el componente haciendo
click.
Para retornar una bifurcación a su origen, se hace click en el puerto del último icono de
la bifurcación y se hace click en la línea donde se desea retornar. Se le preguntará si
desea hacer conexión con la línea seleccionada. Si se responde afirmativamente se
pregunta si el tipo de conexión es de retorno o ciclo, donde se debe elegir retorno.
54
Ilustración 38: Situación previa al uso del retorno de la línea
En este prototipo existen dos formas de hacer un ciclo, la primera es usar los iconos de
ciclo provenientes del lenguaje Drakon, o usar el procedimiento anterior colocando una
línea en un paso anterior, para hacer esto último, se tiene que realizar con un icono de
pregunta y se tiene que usar el puerto lateral.
55
Ilustración 40: Situación previa al ciclo
56
5.2. Creación de componentes de métodos
Para crear un componente de métodos se debe elegir el botón con las siglas CM en la
barra de herramientas.
Al hacer click se le pregunta por el nombre que se le quiere colocar al componente. Una
vez colocado se crea una nueva pestaña para adicionar los métodos del componente.
57
Como se puede ver en la imagen anterior la barra de iconos cambia, mostrando un solo
botón, que hace referencia al icono método.
Como se comento anteriormente, los métodos son ordenados en una columna. Para
poder editar un método se debe hacer doble click sobre ellos.
58
Si se hace click en el icono de rueda, se creará otra pestaña donde se podrán agregar
implementaciones, del mismo modo como se agregan estos métodos. También aparecen
dos pestañas dentro de las pestañas de configuración, en la primera se puede colocar la
descripción del método y su variable de transformación y en la segunda se puede
agregar parámetros.
Para los componentes de importación, su edición es similar, la barra de iconos solo tiene
el icono de método de importación, al editar el método de importación se pueden
agregar implementaciones, parámetros, variable de transformación, etc. Del mismo
modo que se hace con la edición del método común, la diferencia radica en la edición de
las implementaciones, mientras que las implementaciones del componente de métodos
son un flujo, las implementaciones de los métodos de importación son un diálogo en
donde se agregan funciones y se indica a que lenguaje pertenecen.
59
También en ese diálogo se puede indicar en qué orden están los parámetros en esa
función.
Como se observa en la anterior imagen se coloca el nombre del tipo, y se van agregando
las variables del que está compuesta.
60
6. Análisis de PFC
En esta sección se presenta un análisis de la herramienta construida, también se hace un
resumen de sus alcances y de que tan bien se cumplieron los objetivos.
Lo comentado por Marat Boshernitsan y Michael Downes [5], donde concluían que
existía una línea muy delgada que separaba un lenguaje visual de su entorno, fue
confirmado en PFC. Los componentes y los flujos juegan un papel importante en la
comprensión de los algoritmos, sin embargo la forma como se construye y se explora es
igualmente importante. El principal error fue pensar en el lenguaje y dejar de lado el
diseño del ambiente gráfico. Normalmente en los lenguajes textuales, el desarrollador
puede valerse únicamente de un editor de texto para desarrollar una aplicación. En
cambio, en los lenguajes visuales por más ventajas que este provea si no se trabaja bajo
un ambiente de desarrollo idóneo, se perderá la mayor parte de sus ventajas. En la
actualidad los programadores acuden a ambientes de desarrollo como es el caso de
Eclipse porque les facilita el desarrollo gracias a sus herramientas. Para un lenguaje
visual es mucho más importante trabajar en un ambiente de desarrollo adecuado.
Es posible que los componentes gráficos para la creación de interfaces con el que
normalmente se programan no sean los más adecuados a la hora de crear ambientes para
lenguajes visuales. Si al diseñador se le ocurren nuevas formas de inserción de datos
dentro de una estructura gráfica, debería tomarse la molestia en crearlos sin depender de
componentes estándar.
El lenguaje y el prototipo sirvieron de gran ayuda para comprender mucho más los
inconvenientes que se pueden presentar a la hora de diseñar un lenguaje de
programación visual, a su vez los grandes beneficios que la programación visual puede
proporcionar.
La conversión desde PFC a Java no presento dificultades, PFC fue capaz de realizar
conversiones básicas de Java2 SE, involucrando definiciones de clases; cumpliendo el
objetivo de facilidad en la traducción.
62
7. Conclusiones
Los proyectos computacionales se hacen cada vez más grandes y los programadores se
pueden ver fácilmente perdidos en mares de líneas de código; más gente de distintas
disciplinas acuden a los computadores, y la programación visual se muestra como una
solución a la computación cada vez más compleja. Por lo tanto, es necesario que se
hagan esfuerzos por el desarrollo de lenguajes de programación visuales estandarizados,
permitiendo la participación de personas interesadas: no solo de conocedores de
ciencias de la computación sino también personas de distintas áreas que permitan una
convergencia de ideas con el fin de crear un lenguaje que sea fácilmente comprensible.
Los avances que se han logrado a través del tiempo en el campo de la programación
visual sirven como base para afrontar el reto de la creación de un lenguaje de
programación visual fácil de construir y de entender, esto constituye un reto difícil, pero
no imposible.
63
se presenta un gran avance en el hardware computacional. Es el tiempo adecuado para
volver a retomar un tema que podría beneficiar las ciencias de la computación y a la
sociedad en general.
64
8. Referencias Bibliográficas
[2] Minsky M. (1985). The society of mind. New York: Simon and Schuster.
[3] Gamut,, L.T.F. (1991). Logic, language and meaning, Volume 2: Intensional logic
and logical grammar. University of Chicago Press.
[11] R. Mark Meyer, Tim Masterson .(2000) Towards a better visual programming
language: critiquing prograph's control structures. Canisius College: JCSC
65