• No results found

4. BAYESIAN CORRECTION of MISCLASSIFICATION of PERTUSSIS in

4.3. Methods 91

Los lenguajes nos permiten comunicarnos a partir de palabras, oraciones, símbolos y un conjunto de características más con otras personas. Los lenguajes están presentes en todas las culturas humanas y son un elemento fundamental de la cultura misma. De manera similar los lenguajes de programación nos permiten comunicar, de manera estructurada, a los computadores las tareas que deben realizar.

Un lenguaje de programación es un lenguaje formal basado en la lógica y definido por un conjunto de reglas sintácticas, semánticas y un conjunto de símbolos, que permiten especificar una serie de instrucciones para ser ejecutadas por un dispositivo electrónico que normalmente cuenta con un microprocesador, como son los computadores, teléfonos inteligentes, dispositivos de internet de las cosas, entre otros [33].

Existen diversas características que permiten clasificar los lenguajes de programación como lo son: su método de entrada, nivel de abstracción con el código máquina y paradigma de programación, entre otros. En este capítulo se realiza una descripción de estas características que han propuesto diversos autores y a partir de esta se clasifican algunos lenguajes de programación empleados en educación, especialmente los lenguajes empleados en robótica.

2.1 Caracterización y clasificación de lenguajes de

programación

2.1.1 Clasificación según su nivel de abstracción

Los lenguajes de programación se pueden clasificar según su nivel de abstracción de acuerdo a su correspondencia con las operaciones realizadas por el procesador a través

del código máquina. Dentro de esta categoría los lenguajes se catalogan como lenguajes de bajo nivel, lenguajes de medio nivel, lenguajes de alto nivel y lenguajes de muy alto nivel [34].

Los lenguajes de programación de bajo nivel se caracterizan por ser cercanos al lenguaje de máquina. Normalmente sus instrucciones son limitadas y son dependientes del tipo de microprocesador y a la arquitectura propia de la máquina. Sus instrucciones interactúan directamente sobre el hardware del equipo. Ejemplos de lenguaje de programación de bajo nivel es el lenguaje Ensamblador (Assebmly). Estos lenguajes tienen un alto grado de complejidad y se emplean cuando se requiere un alto nivel de manipulación sobre el hardware. Sin embargo, su uso es restringido a ciertos ámbitos debido a su poca practicidad comparada con un lenguaje de alto nivel.

Los lenguajes de alto nivel realizan una abstracción con respecto a los lenguajes de bajo nivel permitiendo una mayor interpretación cognitiva por parte de los programadores. Su principal característica es que se orientan a la solución de un problema a comparación de los lenguajes de bajo nivel que se centran en el ámbito computacional. Debido a esta abstracción los lenguajes de alto nivel cuentan con una mayor independencia a la arquitectura de la máquina y en muchas ocasiones puede hacer procesos de portabilidad de código entre diversas arquitecturas. Ejemplo de lenguajes de esta categoría son: Java, Python, PHP y Scala, entre otros.

Finalmente, existe unos lenguajes de medio nivel que cuentan con características de los lenguajes de alto nivel pero que pueden acceder a características de los lenguajes de bajo nivel. En esta categoría se encuentran lenguajes de programación como C++, Fortran y Cobol.

2.1.2 Clasificación según su método de entrada

Según el método de entrada del código fuente, los lenguajes de programación pueden ser clasificados en lenguaje de programación textual, lenguaje de programación visual o leguaje de programación gráfico [35].

Los lenguajes de programación textuales se caracterizan por poseer dos dimensiones en donde una de las dimensiones se limita a representar el espaciado entre el texto, sin embargo, en los lenguajes visuales esta segunda coordenada presenta un significado semántico al interior de la aplicación. Por su parte los lenguajes gráficos se basan en la teoría de grafo en la cual existe una interconexión de nodos a través aristas para formar grafos y realizar la representación simbólica y semántica de la aplicación a ejecutar.

2.1.3 Clasificación según paradigma en lenguajes de alto nivel

Los lenguajes de alto nivel pueden clasificarse siguiendo la siguientes taxonomía [34]:  Lenguajes de programación científica: Se orientan a la solución de problemas

científicos, especialmente procedimientos matemáticos y estadísticos a partir del uso de la computación. Ejemplo de estos lenguajes son Matlab, Fortran, Mathematica, Octave, R.

 Lenguajes de procesamiento de datos: Son los leguajes que permiten el procesamiento y manipulación de datos empresariales con el objetivo de obtener información de valor sobre el negocio. Uno de los primeros lenguajes usado en este ámbito fue Cobol, actualmente con la aparición de las tecnologías de Big Data. Actualmente para este uso se suele usar lenguajes de propósito general como Python, Java u otros lenguajes basados en Hadoop,

 Lenguajes de inteligencia artificial: Usados en los procesos de construcción de proyectos de inteligencia artificial, normalmente basados en la programación lógica. Algunos lenguajes que son usados en inteligencia artificial son Prolog, LISP.

 Lenguajes de programación orientado a objetos: Lenguaje que se fundamentan a partir del uso e interacción de objetos para representar los datos y el comportamiento entre ellos. Se aplican los conceptos de herencia, polimorfismo, encapsulamiento, abstracción, entre otros. Ejemplos de este paradigma son aplicados por Java, C++, SmallTalk.

 Lenguajes de programación visual: Hacen uso de elementos visuales en los procesos de programación en donde existen dos dimensiones donde hay una significación a partir de las coordenadas donde se encuentran los objetos. Toman

importancia a partir de la década de los 90s donde se popularizan las interfaces gráficas de usuario. Ejemplo de este lenguaje es Visual C++, Visual C#, etc.  Lenguajes de programación de sistemas: Permiten el acceso a las

características del sistema operativo facilitando la interacción con el hardware, los elementos básicos del sistema operativo y el kernel. Ejemplo de este lenguaje sería C en el ámbito de Windows (WINAPI), UNIX y GNU Linux.

2.2 clasificación de lenguajes visuales

M. Burnett y M. Baker proponen realizar la clasificación de los lenguajes de programación a partir de su paradigma o de acuerdo a su representación visual [36] proponiendo las siguientes categorías:

A. Paradigmas

1. Lenguajes concurrentes

2. Lenguajes basados en restricciones 3. Lenguaje de flujo de datos

4. Lenguajes basados en formularios y lenguajes basados en hoja de cálculo 5. Lenguajes funcionales

6. Lenguajes imperativos 7. Lenguajes lógicos

8. Lenguajes Multiparadigma 9. Lenguajes orientados a objetos

10. Lenguajes de programación por demostración 11. Lenguajes basados en reglas

B. Representación Visual

1. Lenguajes diagramáticos 2. Lenguajes icónicos

2.3 Lenguajes de programación empleados en robótica

educativa

Existe una alta variedad de lenguajes de programación aplicados a la robótica educativa con diversos paradigmas y diversas formas de entradas. Debido a que los programas corren directamente sobre el dispositivo robótico, el empleo de un lenguaje u otro tiene una alta dependencia del robot o la plataforma de desarrollo elegida. Por lo anterior, el conjunto de lenguajes de programación que pueden ser utilizado en un robot varían ampliamente de acuerdo a las decisiones del fabricante y la comunidad, ya que en muchas ocasiones la comunidad se encarga de portar diferentes lenguajes no oficialmente soportado a las plataformas.

Para el caso de los lenguajes de programación textuales pueden encontrarse comúnmente lenguajes como Java, C/C++ o Python y en lenguajes de programación visual que se ha adaptado a la robótica se encuentra Scratch, Labview, Logo, entre otros. A continuación, se presenta un conjunto de lenguaje de programación populares en ambientes educativos y robótica educativa.

- Lenguaje de programación Scratch

El lenguaje de programación Scratch está enfocado principalmente a niños y jóvenes de 8 a 16 años con el objetivo de realizar un aprendizaje auto dirigido de los conceptos básicos de la programación. Las instrucciones se declaran mediante bloques funcionales que se conectan para construir rutinas. Desde la perspectiva de la sintaxis, en Scratch no existen errores sintácticos debido a que los bloques son similares a un rompecabezas, determinando las posibles combinaciones que se pueden realizar. Las muescas de los parámetros indican el tipo de dato esperado. Algunos autores recomiendan como trabajo futuro la inclusión de procedimientos definidos por el usuario y la posibilidad de incluir nuevos tipos de datos [37].

Ilustración 4: Lenguaje de programación Scratch - Lego EV3

E

ntorno

de programación visual, ampliamente usado en robótica en el ámbito educativo es la plataforma Lego EV3, la cual se compone por una serie de bloques interconectables categorizadas por color que realizan tareas específicas. Dentro de las tareas se encuentran: acción (verde), control de flujo (naranja), sensor (amarillo), operación de datos (rojo), avanzado (azul) o bloques definidos por el usuario (cian). Cada tipo de bloque tiene una imagen única que identifica la interacción realizada, así como parámetros de configuración que determinan la acción a realizar. Sus características hacen que sea un lenguaje de rápido aprendizaje, pero por sus técnicas hacen que su uso se vea limitado solo a estudiantes de niveles más básicos de educación [38].

Ilustración 5: Entorno de programación de Lego Mindstorm EV.

- National Instruments Labview

LabView es un entorno de programación visual gráfico donde las acciones son realizadas por bloques interconectados y configurables que pueden poseer una interfaz gráfica de usuario para gestionar y monitorear los eventos que se realizan. Por sus características es apto para estudiantes de pregrado en ingeniería y posee módulos de adquisición de datos a través de hardware, multitarea y construcción de interfaces gráficas. Es una herramienta con amplia acogida en la rama de mecatrónica y automatización de procesos, ya que sus características permiten crear desarrollos de alta complejidad [39], Sin embargo, su costo limita su adopción fuera de ambientes industriales.

En otra aproximación en robótica educativa se han incorporados diversos lenguajes de programación como Python, Java y C/C++ sobre el Lego NXT. Estos lenguajes presentan un grado alto de madurez, flexibilidad, robustez y su uso no representa costos asociados ya que en su mayoría son implementaciones de software libre [40].

2.3.1 Clasificación de algunos lenguajes de programación

empleados en robótica educativa

Tabla 12 Resumen de algunos lenguajes de programación empleados en robótica educativa [39] [43].

Robóticos Compatible

C Textual Programación

Imperativa

Lego EV3 (ev3dev), Lego NXT (RobotC), Arduino, Microcontralodres PIC (PICC), BeagleBone Black (GCC), Raspberry Pi (GCC) C++ Textual Programación Orientada a Objetos

Lego EV3 (Lejos), Lego NXT (Lejos), BeagleBone Black (G++), Raspberry Pi (G++).

JAVA Textual Programación Orientada a Objetos

Lego EV3 (Lejos), Lego NXT (Lejos), BeagleBone Black (G++), Raspberry Pi Python Textual Programación

Multiparadigma

Lego EV3 (Ev3dev), LegoNXT (PyNXC) Scratch Visual Programación

Imperativa / Programación dirigida por eventos

Lego NXT (Enchanting), BeagleBone Black, Raspberry Pi LabView Gráfico Paradigma de flujo

de datos

Lego EV3,

BeagleBone Black, Raspberry Pi Lego Mindstorn Gráfico Paradigma de flujo

de datos

Lego EV3, Lego NXT

Imperativa / Programación dirigida por eventos

Los lenguajes de programación que se emplean en robótica dependen del nivel educativo en el cual se va a implementar la robótica y generalmente en los grados inferiores se usan lenguajes de un muy alto nivel que además sean gráficos para facilitar los procesos de construcción del robot. Posteriormente se pasan a lenguajes de programación textuales o de un nivel más bajo que permita entender de una manera más a profundidad el funcionamiento del robot.

A pesar de la variedad de lenguajes de programación existentes y las ventajas propias de la aplicación de distintos paradigmas como los son la facilidad de aprendizaje y flexibilidad, existen brechas a la hora de permitir a los estudiantes pasar de una programación gráfica a una programación textual en un único entorno de desarrollo. Por lo anterior continuación se presenta una iniciativa para subsanar esta brecha, además de aprovechar las tecnologías emergentes como lo es la computación en nube, para permitir la compatibilidad con distintos entornos y sistemas operativos para el fortalecimiento de la educación.

2.4 BPM (Business Process Managment)

BPM (Business Process Managment) puede ser definido como una serie de técnicas y

prácticas metodológicas que se apoyan en el uso del software para realizar la gestión integral de procesos, personas y tecnologías de la información, a la vez que se busca identificar, diseñar ejecutar, documentar, monitorear, controlar y medir procesos al interior de la organización [41].

Es de interés para este trabajo resaltar que existe al interior de BPM lo que es BPMN y

BPMS. Por un lado, BPMN (Business Process Managment and Notation) se refiere a la

notación estándar que se usa para documentar los procesos de la organización, notación que ha sido construida con el objetivo de ser entendible por todos los miembros involucrados en los procesos y por otra parte se encuentra BPMS (Business Process

Software) que se refiere al software que facilita la implementación de BPM al interior de

la organización.

Los elementos básicos de la notación BPMN son [42]:

 Objetos de flujo: eventos, actividades y compuertas de decisión.  Objetos de conexión: Flujos de secuencia, flujos de mensaje.  Carriles de nodo: piscinas, carriles.

 Artefactos: Objeto de datos, grupos, anotaciones.

2.4.1 Objetos de flujo

Los objetos de flujo son elementos gráficos que pueden ser conectados a la secuencia de un proceso, los objetos de flujo disponible en la notación BPM son [42]:

 Eventos: Representan una situación donde algo ocurre, se representan por círculos. Los eventos en el flujo pueden presentarse en tres momentos: en un evento inicial representado por un círculo de línea simple, un momento intermedio representado por un círculo con línea doble y un evento de finalización, que representa la finalización de una secuencia de flujo. Ejemplos de eventos podrían ser la radicación de un documento electrónico, la lectura de un sensor, una fecha en especial.

 Actividades: Gráficamente se representa por un cuadrado con los bordes redondeados y representa un trabajo que debe ser realizado. Existen actividades del tipo atómico donde solo una acción es llevada a cabo, reciben el nombre de

“Tarea” por otra parte existen tareas compuestas las cuales reciben el nombre de “Actividad”.

 Compuertas de decisión: Se representa gráficamente por un rombo y permite controlar la convergencia o divergencia de un flujo de trabajo, es decir, representan las diferentes rutas que puede tomar una secuencia de actividades a partir de unas condiciones. Existen del tipo paralelos en las cuales el flujo se bifurca tomando todos los caminos existentes en el Gateway y no existe decisión de por medio, en el caso de los gateways exclusivos el flujo toma un único camino

e inclusivos donde en base a las condiciones establecidos el flujo puede tomar uno o más caminos.

2.4.2 Objetos de conexión

Los objetos de conexión permiten interconectar los objetos de flujo y los artefactos en un modelo BPM los objetos de conexión disponibles en BPM son [42]:

 Flujo de secuencia: Flecha continua, direccionada y cuya cabeza se encuentra rellena. Representa una transición de actividades al interior del proceso, definiendo con esto la secuencia de las actividades a realizar.

 Flujo de mensaje: Flecha discontinua, direccionada y cuya cabeza se encuentra sin relleno y representa el intercambio de mensajes entre dos procesos separados.

 Asociación: Flecha punteada que representa la asociación artefactos, texto u otros elementos con los objetos de flujo.

2.4.3 Carriles de Nodo (Swimlanes)

Los carriles permiten separar gráficamente y agrupar los objetos que pertenecen al modelo, en BPM existen dos elementos [42]:

 Pool (Piscinas): Cajón que representa un proceso. Al interior de las piscinas se encuentra los carriles.

 Lane (Carril): Cajón que va al interior de una piscina, de orientación horizontal cuyo rótulo se posiciona en el lado izquierdo con dirección vertical y que representa que las actividades que se encuentran al interior son realizadas por un rol.

2.4.4 Artefactos

En BPM se permite adicionar elementos que se consideren necesarios con el objetivo de flexibilizar las tareas de modelado, en BPM se predefinen los siguientes tres artefactos [42] :

 Objetos de datos: Representan la generación, manipulación, destrucción o consulta de datos al interior de un flujo de procesos.

 Grupos: Son cajones de borde discontinuo que pueden ser usados con objetivos de documentación que sin embargo no afectan la secuencia del flujo.

 Anotaciones: Información textual adicional sobre algún elemento que el modelador considere pertinente.

2.4.5 Uso de la notación BPM adaptada a robótica

Si bien la intención de BPM es presentar una notación estándar para esquematizar procesos de negocio a través de una secuencia de actividades con unos roles y tiempos definidos. La notación BPM puede ser extrapolada y usada para representar procesos más allá de esta concepción inicial en un entorno de procesos industriales.

Es de considerar que usar BPM presenta ventajas en la aplicación de la robótica para mostrar de una manera ordenada la interacción entre componentes, las integraciones, la interoperabilidad y el flujo de secuencias de tareas a realizar por un robot o incluso las interacciones entre un conjunto de robots.

Como se describe en la sección 3.1.1, para esta tesis se adaptó algunos de los elementos de la notación BPM para ser usado como lenguaje de programación gráfico con el objetivo de permitir esquematizar el proceso de secuencia de acciones realizadas por un robot. Esta adaptación permite adaptar librerías ya existentes al entorno de desarrollo con una representación estandarizada tanto visualmente como una representación en formato XML que además de facilitar el posterior procesamiento del modelo, permite al estudiante conocer y familiarizase una notación estándar de modelado lo cual puede representar un valor agregado para el estudiante en el caso de optar por el estudio de un pregrado administrativo o industrial.

3. Ambiente híbrido visual y textual de