Está en la página 1de 128

SEP

SEIT
CENTRO NACIONAL DE INVESTIGACION Y DESARROLLO TECNOLOGICO

DGIT

cenidet
GENERADOR DE CODIGO PARA LENGUAJE C UTILIZANDO UNA NOTACION DE DISEO DETALLADO

T
QUE PARA

E
E S

S
E

I
N T

S
A

OBTENER EL GRADO DE:

MAESTRO EN CIENCIAS EN CIENCIAS

C O M P UT A C I O N A L E S
P R

ALICIA

MARTINEZ

REBOLLAR

CUERNAVACA, MORELOS

AGOSTO DE 1997

GENERADOR DE CDIGO PARA LENGUAJE C UTILIZANDO UNA NOTACIN DE DISEO DETALLADO


Tesista: Alicia Martnez Rebollar Asesor: Mximo Lpez Snchez

RESUMEN
Este tema de tesis trata de resolver uno de los problemas que se presenta en el ciclo de vida del software: la falta de inters por parte de los desarrolladores en la fase de diseo detallado en el ciclo de vida del software[YOU92]. Este problema se intent resolver con un sistema de software que automatiza la etapa de diseo detallado, generando el cdigo acorde al diseo en el lenguaje de programacin C. Pretendiendo con esto, ahorrar tiempo en la etapa de diseo, ya que las revisiones y correcciones de un sistema de software sern mucho ms rpidas. La automatizacin de la fase de diseo detallado se realiz de una manera visual (se emple el paradigma de la programacin visual), formulando una gramtica posicional con los elementos de la notacin de diseo (se utiliz la metodologa Warnier), as como su implantacin en el lenguaje de programacin C para Windows. Los resultados que se obtuvieron fueron: 1. formulacin e implantacin de una gramtica posicional de la notacin de diseo detallado de Warnier. 2. construccin de un analizador sintctico y semntico de la gramtica, 3. el sistema permitir realizar diseos (que slo utilicen las construcciones bsicas de la notacin) sin conocer el lenguaje de programacin C. Adems de almacenar los diseos del usuario en disco. 5. el sistema permite generar cdigo en lenguaje C acorde al diseo detallado elaborado por el usuario. 4. el sistema cuenta con ayudas de hipertexto. [YOU92] Edward Yourdon Decline & Fall of American Programmer. 1992 by PTR Prentice Hall, inc.

A DIOS, por darme la vida... A mi MADRE a quien debo todo lo que soy... A mis hermanos por todo su apoyo... A mis cuados, por ser como son ... A mi sobrinos por sus risas y alegras... A mi esposo Hugo, porque eres todo lo que necesito para ser feliz, Gracias mi amor, TE AMO...

AGRADECIMIENTOS
A mi esposo Hugo Estrada Esquivel porque gracias a su apoyo y ayuda incondicional he logrado alcanzar esta meta. Agradezco a mi Asesor M.C. Mximo Lpez Snchez por su apoyo, orientacin y tiempo dedicado para lograr mucho ms de lo que nos propusimos, y sobre todo, por su amistad. Expreso mi ms sincero agradecimiento al Centro Nacional de Investigacin y Desarrollo Tecnolgico por darme la oportunidad de cursar mi maestra en computacin. Reconozco y agradezco el apoyo econmico brindado por (CONACYT) para lograr la terminacin de mis estudios de maestra. Agradezco al Dr. Javier Ortiz Hernndez por toda la ayuda y palabras de aliento que siempre me ha brindado, adems gracias por tu amistad. Agradezco al M.C. Ren Santaolaya Salgado y M.C. Olivia Fragoso Por la ayuda y orientacin brindada, y sobre todo por su amistad. Agradezco al grupo de Ingeniera de Software (Hugo Estrada, Carpio Tovilla, Leticia Santa Olalla, Eur Salgado, Teresa Cham (por tu gran ayuda en esta tesis), Carlos de la Cruz, Susana, Mirna, Liliana y Marco Aurelio) por los buenos y malos momentos, y sobre todas las cosas, gracias por que juntos hemos salido adelante. Agradezco a todos mis profesores del cenidet por sus conocimientos brindados. Agradezco a los profesores el Dr. Guillermo Rodrguez, al M.C. Felipe Alaniz y al Dr. Rodolfo Pazos Rangel y M.C. Mximo Lpez Snchez porque con sus comentarios y correcciones hicieron un mejor trabajo. Agradezco al M.C Manuel Jurez y al M.C. J. Luis Ramrez y Vernica Sotelo por su poyo, amistad y sobre todo, por ser como son. Agradezco a mis compaeros de generacin Hugo Estrada, Mario Flores, Vctor Garca, Eur Salgado, Zulma Snchez y William Zapata; a todos ellos, gracias por su amistad. Agradezco al grupo de bases de datos distribuidas (Anastacio, Jos Antonio, Miguel Mastache y Claudia Ibarra)

DEDICATORIAS

A DIOS Por darme la vida, permanecer siempre a mi lado y quererme tanto. Dedico este trabajo con todo mi amor y respeto a una gran mujer que toda la vida ha permanecido a mi lado, dndome todo lo mejor de ella: MI MADRE. Al recuerdo de mi padre, que est presente en todo momento. A MI ESPOSO Hugo Estrada Esquivel por ser todo mi mundo. Y con quien deseo compartir todos los momentos de mi vida. TE AMO. A MIS HERMANOS Mara del Rosario, Miguel Angel, Lucio y Ervin por su apoyo moral y econmico que me han brindado a lo largo de toda mi carrera. A MIS CUADOS Octavio y Celia por hacer tan felices a mis hermanos adems por ser como son. A MIS SOBRINOS Mayra, Daniela y Erick porque con su cario y alegra me han hecho muy feliz.

TABLA DE CONTENIDO
Lista de Figuras................................................................................................................ v

Capitulo 1 INTRODUCCION A LA INGENIERIA DE SOFTWARE.......................................................................................


1.1 Introduccion a la Ingenieria de Software................................................................... 1.2 Ciclo de vida clsico.................................................................................................. 1.3 Diseo de software..................................................................................................... 1.3.1 Diseo de datos................................................................................................. 1.3.2 Diseo arquitectnico........................................................................................ 1.3.3 Diseo procedimental........................................................................................ 1.4 Importancia del diseo...............................................................................................

1 2 2 4 5 5 5 6 8 9 10 10 11 12 12 13 14 15 16 16 16 17 18 18 19 19 20 21 21 22 23 25

Capitulo 2 PLANTEAMIENTO DEL PROBLEMA..................................


2.1 Descripcin del problema.......................................................................................... 2.2 Alternativas de solucin............................................................................................. 2.2.1 Objetivo de la tesis............................................................................................ 2.2.2 Beneficios de la tesis........................................................................................ 2.3 Investigacin sobre la utilizacin de las notaciones de diseo.................................. 2.3.1 Grfica de tendencias de las notaciones de diseo ms conocidas................... 2.3.2 Grfica de tendencias de las notaciones de diseo ms utilizadas.................... 2.3.3 Representacin grfica (porcentajes) de las notaciones de diseo ms utilizadas........................................................................................................... 2.4 Resultados obtenidos de la investigacin................................................................... 2.5 Notaciones de diseo.................................................................................................. 2.5.1 Pseudocdigo.................................................................................................... 2.5.2. Diagramas de flujo........................................................................................... 2.5.2.1. Construcciones bsicas........................................................................ 2.5.3 Jackson............................................................................................................. 2.5.3.1 Construcciones bsicas......................................................................... 2.5.4 Nassi/Shneiderman (N-S)................................................................................. 2.5.4.1 Construcciones bsicas........................................................................ 2.5.5 HIPO (Hierachy/Input/Process/Output).......................................................... 2.5.6 Diagramas de Warnier....................................................................................... 2.5.6.1 Simbologa........................................................................................... 2.5.6.2 Construcciones bsicas......................................................................... 2.6 Comparaciones entre las notaciones de diseo.......................................................... 2.7 Notacin de diseo detallado elegida.........................................................................

Capitulo 3 CONCEPTOS DE PROGRAMACION VISUAL.................. 26


3.1 Introduccin............................................................................................................... 3.2 Conceptos de programacin visual............................................................................ 3.3 Una taxonoma de iconos........................................................................................... 3.4 Programacin visual................................................................................................... 3.5 Lenguaje visual Vs. textual........................................................................................ 3.6 Estado del arte............................................................................................................ 3.6.1 Visual Magic..................................................................................................... 3.6.2 Generador de ambientes visuales (VLCC)........................................................ 3.6.3 Microstep .......................................................................................................... 27 27 28 30 31 31 31 32 32

Capitulo 4. DESCRIPCION DE LA GRAMATICA DEL GENCOD.. 33


4.1 Antecedentes.............................................................................................................. 4.2 Esquema Conceptual del GenCod.............................................................................. 4.3 Un lenguaje grfico para la representacin de una notacin de diseo...................... 4.3.1 Notacin de diseo detallado modificada........................................................ 4.4 Algunas Ventajas que ofrecen las gramticas............................................................ 4.4.1 Convencin de la notacin de la gramtica....................................................... 4.5 Descripcin de una gramtica ................................................................................... 4.5.1 Smbolos no terminales..................................................................................... 4.5.2 Smbolos terminales.......................................................................................... 4.5.3 Smbolo inicial.................................................................................................. 4.5.4 Reglas de produccin........................................................................................ 4.5.4.1 Relaciones Cudruples de identificadores (POS)................................. 4.5.4.1.1 Relaciones Cudruples de los smbolos terminales de la grmtica ...................................................................... 4.5.4.2 Atributos de los objetos......................................................................... 4.5.5 Evaluador pictogrfico...................................................................................... 4.6 Estructura de Datos que maneja el GenCod............................................................... 4.6.1 Estructura de datos de la lista de objetos.......................................................... 4.6.2 Estructura de datos de la lista de Argumentos.................................................. 4.6.3 Estructura de datos del arreglo de listas............................................................ 4.7 Interfaz grfica implantada en el sistema GenCod.................................................... 4.7.1 Interfaz con mltiples documentos (MDI)........................................................ 4.7.2 Interfaz del GenCod.......................................................................................... 34 36 37 39 41 42 43 43 43 45 45 46 47 49 50 50 51 53 54 56 56 57

ii

Capitulo 5. DESARROLLO DEL SISTEMA................................................ 60


5.1 Desarrollo interno del diseo detallado...................................................................... 5.1.1 Definicin dirigida por la sintaxis..................................................................... 5.1.2 Anlisis en el desarrollo de un diseo y ubicacin de los objetos en la pantalla.............................................................................................................. 5.1.2.1 Ubicacin del primer objeto en la pantalla........................................... 5.1.2.2 Ubicacin de un objeto en la pantalla de un objeto activo.................... 5.1.2.3 Ubicacin de un objeto en la pantalla despus de un objeto pasivo..... 5.1.2.4 Ubicacin de un objeto en la pantalla despus del objeto FIN............. 5.1.2.5 Ubicacin del objeto activo hacer-mientras <condicin> y hacer <condicin > mientras........................................................................... 5.1.3 Insercin de objetos........................................................................................... 5.1.3.1 Insercin entre niveles (de mayor a menor abstraccin)....................... 5.1.3.2 Insercin entre niveles (de menor a mayor abstraccin)...................... 5.1.3.3 Insercin entre objetos (en el mismo nivel).......................................... 5.1.3.4 Insercin entre niveles (de mayor a menor abstraccin) cuando se desea hacer la insercin antes del objeto Mientras condicin o hacer-Mientras condicin...................................................................... 5.1.3.5 Ubicacin de los objetos despus de la insercin................................. 5.1.4 Ajuste de los objetos en el diseo..................................................................... 5.1.4.1 Estructura de datos de la lista temporal (que realiza el ajuste de las coordenadas de los objetos activos)...................................................... 5.1.5 Eliminacin de objetos...................................................................................... 5.1.6 Generador automtico de cdigo...................................................................... 5.1.6.1 Manejo de la estructura de datos para la generacin de cdigo........... 5.1.7 Arquitectura del archivo de diseo................................................................... 5.1.8 Herramientas del GenCod................................................................................. 5.1.8.1 Navegacin entre funciones.................................................................. 5.1.8.2 Ayudas por hipertexto........................................................................... 61 63 64 66 67 69 69 71 73 75 77 78 79 80 81 83 83 86 86 89 90 90 91

Capitulo 6 DISEO DE UN PLAN EXPERIMENTAL............................. 92


6.1 Muestreo..................................................................................................................... 6.2 Variables dependientes............................................................................................... 6.3 Variables independientes........................................................................................... 6.4 Hiptesis a comprobar................................................................................................ 6.5 Plan de evaluacin...................................................................................................... 6.6 Anlisis de resultados................................................................................................. 93 94 94 94 94 96

iii

Capitulo 7 COMENTARIOS FINALES........................................................ 100


7.1 Alcances logrados...................................................................................................... 101 7.2 Mejoras y ampliaciones a este trabajo....................................................................... 102 7.3 Trabajos futuros......................................................................................................... 103

Referencias.................................................................................................................. Anexo 1. Cuestionario............................................................................................. Anexo 2. Reglas de produccin de la gramtica visual............................. Anexo 3. Diagrama de transicin de estados para la declaracin de una variable o un arreglo.................................................................... Anexo 4. Formato del archivo de diseo........................................................... Anexo 5. Demostracin de la ejecucin del GenCod....................................

104 106 107 109 110 112

iv

LISTA DE FIGURAS
No. Fig.
1.1 1.2 2.1 2.2 2.4 2.4 2.5 2.6 2.7 2.8 2.9 2.10 3.1 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16

Descripcin
Modelo de cascada del ciclo de vida del software Importancia del diseo Metodologas de diseo detallado ms conocidas Cuadro de frecuencia de las notaciones de diseo Metodologas de diseo ms utilizadas Uso de las metodologas de diseo entre los desarrolladores Construcciones en diagramas de flujo Estructuras bsicas del mtodo de Jackson Los tres smbolos grficos utilizados para dijar los diagramas de Nassi-Schneiderman Tabla visual de contenido para un paquete HIPO Simbologa utilizada para los diagramas de Warnier Construcciones bsicas de los diagramas de Warnier Una taxonoma de iconos Esquema conceptual por capas del AMASS-I Esquema conceptual del GenCod Principio de la organizacin jerrquica Tabla que muestra las modificaciones hechas a la notacin de diseode Warnier en la secuenciacin Tabla que muestra las modificaciones hechas a la notacin de diseo de Warnier en la bifurcacin. Tabla que muestra las modificaciones hechas a la notacin de diseo de Warnier en la repeticin Conjunto de smbolos no terminales Conjunto de smbolos terminales Tabla de smbolos grficos con su subndice asociado dependiendo del significado Ejemplo de una regla de produccin Estructura de datos del GenCod Modelo conceptual de los nodos de la lista de objetos Tabla de identificadores para el nmero de instrucciones Modelo conceptual de los nodos de la lista de variables Modelo conceptual de los nodos del arreglo de listas Autmata empleado en el GenCod

Pg.
3 6 13 13 14 15 17 18 19 20 21 22 28 35 36 38 39 40 41 43 44 44 46 51 51 52 54 55 56

4.17 4.18 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 5.23 5.24

Editor de un programa MDI Interfaz del GenCod Caja de dialogo que pide la informacin de una funcin del sistema GenCod Caja de dialogo que impide dar nombres inapropiados a las funciones Caja de dialogo que forza definir el tipo de una funcin Caja de dialogo de la declaracin de los parmetros de una funcin Cajas de dialogo para controlar el nombre y tipo de cada variable Ejemplo del anlisis en la insercin de un objeto en el diseo Ejemplo de un error en el anlisis con la insercin del objeto else Ejemplo de una funcin con tres funciones anidadas Coordenadas del primer objeto del diseo (a) Muestra la obtencin de las coordenadas de la izquierda de un objeto insertado despus de un objeto activo, (b) Muestra la obtencin de las coordenadas de arriba del mismo objeto Muestra la obtencin de las coordenadas abajo y derecha de un objeto insertado Muestra la insercin de un objeto en el mismo nivel de abstraccin Muestra la obtencin de las coordenadas de arriba de un objeto insertado en un nivel de abstraccin mayor Muestra la obtencin de las coordenadas de la izquierda de un objeto insertado en un nivel de abstraccin mayor Muestra la obtencin de las coordenadas de arriba del objeto while Muestra la obtencin de las coordenadas de arriba e izquierda del objeto scanf (a) Muestra la obtencin de las coordenadas de la izquierda del objeto scanf (b) Muestra la obtencin de las coordenadas de arriba del objeto Comparacin de las coordenadas obtenidas por el mouse contra los objetos que integran el diseo Insercin de un objeto despus de una funcin. Pantalla de comparacin de las coordenadas, para la insercin de un objeto Pantalla de comparacin de las coordenadas, para la insercin de un objeto Insercin de un objeto, despus de el objeto de terminacin de una sentencia Pantalla de comparacin de las coordenadas, para la insercin de un objeto Pantalla de la posicin elegida por el mouse para realizar la insercin de un objeto.

57 58 61 61 62 62 63 65 66 67 68 68 68 69 70 70 71 72 73 74 75 76 76 77 77 78

vi

5.25 5.26 5.27 5.28 5.29 5.30 5.31 5.32 5.33 5.34 5.35 5.36 5.37 5.38 5.39 5.40 5.41 6.1 6.2 6.3 6.4 6.5

Pantalla de comparacin de las coordenadas entre dos objetos 78 que se encuentran en el mismo nivel Pantalla de la insercin entre niveles (de mayor a menor abstracin) 79 Pantalla de comparacin de las coordenadas de la insercin entre niveles 80 Insercin de un objeto activo dentro de un diseo 80 Ubicacin del objeto activo ya insertado en el diseo 81 Ejemplo del ajuste de los objetos en el diseo detallado (externamente) 81 Ajuste de los objetos en el diseo detallado (internamente) 82 Modelo conceptual de los nodos de la lista temporal que sirve para realizar el ajuste de las coordenadas de objetos activos del diseo 83 Pantalla que muestra la eliminacin de objetos en el sistema GenCod 84 Pantalla que muestra la eliminacin del objeto if y la ubicacin de los objetos despus de la eliminacin 85 Pantalla que muestra la eliminacin del objeto fin de una sentencia y la ubicacin de los objetos despus de la eliminacin 85 El GenCod como un puente entre la etapa de diseo detallado y pruebas 86 Orden secuencial en el cual se recorren las estructuras de datos en el GenCod para la generacin de cdigo 87 Interfaz del GenCod que muestra la generacin de cdigo de dos funciones 88 Almacenamiento del archivo de diseo detallado del GenCod 89 Arquitectura del archivo de diseo 90 Navegacin entre las funciones de diseo 90 Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema sin utilizar la herramienta Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema utilizando la herramienta Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema sin utilizar la herramienta Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema utilizando la herramienta Resumen comparativo del tiempo utilizado en las cuatro pruebas 96 96 97 98 98

vii

CAPITULO 1

INTRODUCCION A LA INGENIERIA DE SOFTWARE


Este captulo describe un breve panorama del ciclo de vida de un sistema, as como de la importancia que tiene el diseo dentro de l.

Captulo 1

Introduccin a la ingeniera de software

1.1 Introduccin a la ingeniera de software


Los dirigentes de las organizaciones demandan Sistemas de software cada vez ms confiables, es decir, que su realizacin se elabore en forma correcta conforme a los estndares de calidad, y por otra parte que su desarrollo se realice en los tiempos y costos establecidos. La situacin real en los Centros de desarrollo de software, dista mucho de los deseos de los ejecutivos, en cuanto a la calidad de los sistemas que producen, as como a los tiempos y costos realmente implicados. Todo ello es debido fundamentalmente a la falta de empleo de metodologas y herramientas adecuadas, adems de los posibles casos particulares de relaciones laborales[CUE93]. Para dar solucin a esta problemtica surge la Ingeniera de Software, que tiene como meta principal, aportar herramientas y tcnicas que mejoren la productividad de los actuales ingenieros de programacin[FAI90]. Una definicin que acerca el concepto de la ingeniera de software es: La ingeniera de software es la disciplina tecnolgica y administrativa dedicada a la produccin sistemtica de productos de programacin, que son desarrollados y modificados a tiempo y dentro de un presupuesto definido [FAI90]. Las metas de primordiales de esta nueva disciplina tecnolgica son mejorar la calidad de estos productos y aumentar la productividad y satisfaccin profesional de los ingenieros de esta disciplina . Este trabajo de tesis da como resultado una herramienta cuyo objetivo es ayudar a los programadores en una de las etapas del ciclo de vida del software, de la cual hablar ms ampliamente en el punto 1.3.

1.2 Ciclo de vida clsico


En este tema de tesis se trabaj en la fase de diseo detallado y como una consecuencia tambin en la fase de codificacin. Para entender ms a detalle, como se relacionan las fases de diseo y codificacin, a continuacin se muestra un modelo del ciclo de vida del software. La figura 1.1 ilustra el paradigma del ciclo de vida clsico para la ingeniera del software. Algunas veces llamado modelo en cascada, el paradigma del ciclo de vida exige un enfoque sistemtico y secuencial del desarrollo software que comienza en el nivel del sistema y progresa a travs del anlisis, diseo, codificacin, prueba y mantenimiento.
2

Captulo 1

Introduccin a la ingeniera de software

Ingeniera del sistema Anlisis Diseo Codificacin Prueba Mantenimiento

Figura 1.1 Modelo de cascada del ciclo de vida del software.

Modelizado a partir del ciclo convencional de una ingeniera, el paradigma del ciclo de vida abarca las siguientes actividades[PRE90]: Ingeniera del sistema. Debido a que el software es siempre parte de un sistema mayor, el trabajo comienza estableciendo los requisitos de todos los elementos del sistema y luego asignando algn subconjunto de estos requisitos al software. Anlisis. El proceso de recopilacin de los requisitos se centra e intensifica especialmente para el software. Para comprender la naturaleza de los programas que hay que construir, el ingeniero de software (analista) debe comprender el mbito de la informacin del software, as como la funcin, el rendimiento y las interfaces requeridos. Diseo. El diseo del software es realmente un proceso multipaso que se enfoca sobre cuatro atributos distintos del programa: la estructura de los datos, la arquitectura del software, el detalle procedimental y la caracterizacin de la interfaz. El proceso de diseo traduce los requisitos en una representacin del software que puede ser establecida de forma que se obtenga la calidad requerida antes de que comience la codificacin. Al igual que los requisitos, el diseo se documenta y forma parte de la configuracin del software.

Captulo 1

Introduccin a la ingeniera de software

Codificacin. El diseo debe traducirse en una forma legible para la mquina. El paso de codificacin realiza esta tarea. Prueba. Una vez que se ha generado el cdigo, comienza la prueba del programa. La prueba se centra en la lgica interna del software, asegurando que todas las instrucciones se han probado, y en las funciones externas, realizando pruebas que aseguren que la entrada definida produce los resultados que realmente se requieren. Operacin. Algunos autores aaden esta fase en el modelo del ciclo de vida del software. En esta fase se identifican aciertos, en la medida en que los requerimientos de los programas de computadora satisfagan las necesidades del usuario, la arquitectura y los diseos se asocian a las caractersticas especficas del sistema de explotacin de cmputo, y en general la disciplina que haya sido empleada para la construccin del cdigo[GER85]. Mantenimiento. El software, indudablemente, sufrir cambios despus de que se entregue al cliente. Los cambios ocurrirn debido a que se hayan encontrado errores, a que el software deba adaptarse a cambios de entorno externo, o debido a que el cliente requiera ampliaciones funcionales o de rendimiento. Una vez que se ha analizado el ciclo de vida del software se hablar ms ampliamente de la fase de diseo.

1.3 Diseo de software


Este tema de tesis se centra en la fase de diseo, debido a que sta es una de las menos atacadas por los desarrolladores de sistemas, ya que si bien existen herramientas que nos permiten organizar un sistema en mdulos en la fase de anlisis, no existen aquellas utilerias que nos permitan desarrollar el diseo de un sistema y que nos de como resultado la implantacin de ese diseo. Ahora se mencionarn las partes en las que se divide el diseo de software segn Farley y Pressman, cabe aclarar que estas dos ideas respecto al diseo no se presentan como una comparacin entre ellas, sino como un medio para llegar a una idea ms general de diseo. Fairley divide la fase de diseo en: estructural y detallado, dndoles la siguiente definicin:

Diseo estructural: comprende la identificacin de los componentes de la programacin, su


desacoplamiento y descomposicin en mdulos de procesamiento y estructuras de datos conceptuales, y la especificacin de las interconexiones entre componentes.

Captulo 1

Introduccin a la ingeniera de software

Diseo detallado: se refiere a detalles de: cmo empacar mdulos de procesamiento, y cmo
instrumentar los algoritmos, las estructuras de los datos y sus interconexiones. El diseo detallado est fuertemente influenciado por el lenguaje de implantacin, pero no es lo mismo que la instrumentacin, el diseo detallado tiene que ver ms con aspectos semnticos y menos con detalles sintcticos que es la instrumentacin, adems permite el diseo de algoritmos y representaciones de datos en un nivel ms alto de abstraccin y notacin que el que proporciona el lenguaje de implantacin, es decir el diseo de un algoritmo es susceptible a ser implantado en una amplia variedad de lenguajes de programacin. El diseo detallado separa las actividades de diseo a bajo nivel de instrumentacin, igual que las actividades de anlisis y diseo aslan las consideraciones de lo que se desea de la estructura que lograr los resultados deseados. Una especificacin adecuada de diseo detallado minimiza el nmero de sorpresas durante la instrumentacin del producto. A diferencia de Fairley, Pressman asienta el diseo de un programa en el diseo de datos, el diseo arquitectnico, el diseo procedimental y el diseo de la interfaz de usuario.

Diseo de datos: El diseo de datos es la primera (y de alguna forma podramos decir que la ms importante) de las tres actividades de diseo realizadas durante la ingeniera del software. El impacto de la estructura de datos sobre la estructura de programa y la complejidad procedimental, hace que el diseo de datos tenga una gran influencia en la calidad del software[PRE90]. En secciones posteriores se mostrarn algunas de las metodologas enfocadas a este tipo de diseo. Diseo arquitectnico: El objetivo principal del diseo arquitectnico es desarrollar una
estructura de programa modular y representar las relaciones de control entre los mdulos. Adems el diseo arquitectnico mezcla la estructura de programas y la estructura de datos y define las interfaces que facilitan el flujo de los datos a lo largo del programa [PRE90].

Diseo procedimental: El diseo procedimental se realiza despus de que se ha establecido la estructura del programa y de los datos. En un mundo ideal, la especificacin procedimental que define los detalles algortmicos debera explicarse en lenguaje natural. Desafortunadamente el diseo procedimental debe especificar los detalles de los procedimientos sin ambigedad y la falta de ambigedad en el lenguaje natural no es habitual. Por estas y muchas otras ms razones, se debe de usar una forma ms restringida para la representacin de los detalles procedimentales, las cuales se mostrarn en las secciones subsecuentes a este captulo. Este tipo de diseo es semejante o equivalente al diseo detallado del cual se habl anteriormente, slo que este autor lo denomina procedimental. Diseo de la intefaz de usuario: La interfaz del usuario es el mecanismo a travs del cual se establece un dilogo entre el programa y el humano. Tiene tanto que ver con el estudio de la gente como con aspectos de la tecnologa. Quin es el usuario? Cmo aprende el usuario a
5

Captulo 1

Introduccin a la ingeniera de software

interaccionar con un sistema nuevo basado en computadora? Qu espera el usuario del sistema? Estas son slo unas pocas de las muchas preguntas que deben ser planteadas y respondidas como parte del diseo de la interfaz de usuario. Teniendo varios enfoques de la fase de diseo mencionaremos cul es la importancia que tiene ste dentro del ciclo de vida del software.

1.4 Importancia del diseo


La importancia del diseo del software se puede sentar con una nica palabra CALIDAD. El diseo es el proceso en el que se asienta la calidad del desarrollo del software. El diseo produce las representaciones del software de las que pueden evaluarse su calidad. El diseo es la nica forma mediante la cual podemos traducir con precisin los requisitos del cliente en un producto o sistema acabado. El diseo de software sirve como base de todas las posteriores etapas del desarrollo y de la fase de mantenimiento. Sin diseo, nos arriesgamos a construir un sistema inestable, un sistema que falle cuando se realicen pequeos cambios; un sistema que pueda ser difcil de probar; un sistema cuya calidad no pueda ser evaluada hasta ms adelante en el proceso de ingeniera del software, cuando quede poco tiempo y se haya gastado ya mucho dinero [PRE90]. A continuacin en la figura 1.2 se presenta una grfica que ilustra los resultados de desarrollo de software con diseo y sin diseo.

Mantenimiento Prueba Implementacin Diseo Con diseo

Mantenimiento Prueba Implementacin

Sin diseo

Figura 1.2 Importancia del diseo.

En esta grfica se puede ver que el diseo es de primordial importancia para el desarrollo de cualquier sistema de software. Al igual que en las dems fases del ciclo de vida del software, en la etapa de diseo detallado se cuenta con un conjunto de herramientas que sirven para

Captulo 1

Introduccin a la ingeniera de software

facilitar las distintas actividades asociadas con dicha etapa, a estas herramientas se les conoce como notaciones de diseo En este tema de tesis se plantea la construccin de un sistema de software que permita al usuario realizar la etapa de diseo detallado de una manera automatizada. En el capitulo 2 se analiza el por qu a pesar de que el diseo de sistemas tiene beneficios tan palpables, los desarrolladores no lo utilizan cotidianamente en el ciclo de desarrollo de sistemas. El GenCod se ide como una herramienta capaz de generar cdigo en el lenguaje de programacin C basndose en el diseo de un sistema. El reto de construir esta herramienta fue que el GenCod fuese tan fcil de utilizar que para los desarrolladores no lo vieran como un nuevo problema.

CAPITULO 2

PLANTEAMIENTO DEL PROBLEMA


En este captulo se realiza un planteamiento del problema, para esto se muestran los resultados obtenidos de dos investigaciones, cuyo objetivo fue elegir la notacin de diseo detallado que se empleara para solucionar una parte del problema que se presenta.

Captulo 2

Planteamiento del problema

2.1 Descripcin del problema


En el captulo uno se analiz muy brevemente el ciclo de vida del software. Si se estudiaran ms a fondo cada una de las fases, nos percataramos de que en cada una de ellas existen problemas que impiden que su uso sea extensivo, algunos de estos problemas (los que han podido ser resueltos) no cuentan con soluciones que cumplan con las expectativas de los desarrolladores de software. Este tema de tesis trata de resolver uno de los problemas que se presenta en el ciclo de vida del software: la falta de inters por parte de los desarrolladores en la fase de diseo detallado en el ciclo de vida del software[YOU92]. En muchas ocasiones, la mayora de los programadores trabajan con un diseo informal del sistema, restando importancia a un diseo formal que permita contar con un producto robusto y consistente. Generalmente se busca "no perder tiempo" y como resultado de esto, no se contar con un respaldo documental de los conceptos de diseo. Esto es el equivalente a construir una casa sin realizar primero un plano arquitectnico de la misma. Pero aun con estas razones es difcil que el desarrollador comprenda que la implantacin de una especificacin adecuada del diseo detallado minimiza el nmero de sorpresas durante la instrumentacin del producto. A pesar de que actualmente existe una amplia gama de metodologas, a los desarrolladores les resulta una tarea desagradable el usar alguna de ellas, ya que consideran que representa un desperdicio de tiempo y esfuerzo, los cuales pudiesen ser aprovechados en la codificacin del sistema, se debe tener en cuenta que aunque el diseo detallado es de mucha utilidad, la construccin de ste es muy tediosa, por lo cual esta fase esta siendo reconocida como un serio problema [YOU92]. Las consecuencias de esta actitud se ven reflejadas mas tarde, cuando se intenta dar mantenimiento al sistema, y no se cuenta con una buena documentacin que ayude a comprender de forma ms rpida el funcionamiento del sistema. La ausencia de una documentacin que refleje el estado actual del sistema ocasiona muchos problemas asociados, uno de estos (an sin solucin) es la imposibilidad prctica para predecir con exactitud el tiempo de desarrollo de un proyecto, ya que generalmente el tiempo real es ms elevado que el tiempo estimado, disparndose de esta manera el costo del sistema. Y es que los problemas que se van encontrando durante el ciclo de vida del software y no se les da solucin, o se les resta importancia se van acarreando hasta el final del ciclo de vida del software, ocasionando otros problemas como son: 1. Desarrollos lentos. 2. Elevadas cargas de mantenimiento. 3. Elevados costos de correccin en el desarrollo. 4. Baja calidad y confiabilidad del producto [CUE93].
8

Captulo 2

Planteamiento del problema

Peor aun si no se utiliza formalismo y alguna metodologa para la realizacin del software, se continuar teniendo dependencia de los desarrolladores del software.

2.2 Alternativas de solucin


Una vez que se ha planteado el problema, se explicar la alternativa de solucin que se emple para la solucin de este problema. Lo que se pretende con este trabajo de tesis es que los desarrolladores se auxilien de la computadora para elaborar el diseo detallado de un sistema, pretendiendo con esto, ahorrar tiempo en la etapa de diseo, ya que las revisiones y correcciones sern mucho ms rpidas. En la seccin 2.3 se muestran los resultados de una investigacin que se realiz con el fin de conocer la metodologa de diseo que se empleara para la realizacin de este trabajo de tesis. El diseo detallado se realizar de una manera grfica (se emple el paradigma de la programacin visual de la cual se hablar ms ampliamente en el siguiente captulo), pretendiendo con esto, que el empleo de la herramienta no resulte un problema ms. Una vez que se haya completado el diseo detallado del sistema, el usuario podr generar el cdigo en el lenguaje de programacin C, correspondiente a dicho diseo, logrndose con esto una reduccin en el tiempo empleado para obtener un sistema terminado. Adems de que se le brinda al desarrollador una serie de ayudas para hacerle aun ms fcil y atractiva la idea de realizar el diseo detallado de un sistema de software (acerca de estas ayudas se hablar ms adelante).

2.2.1 Objetivo de la tesis


Elaborar e implantar una gramtica posicional de la notacin de diseo detallado elegida, as como la construccin de un analizador sintctico de esta gramtica, para la construccin de una herramienta visual que permita al usuario realizar de una manera automatizada sus diseos. La construccin de stos debern ser de una manera visual lo que facilitar el uso de la herramienta, porque se contarn con smbolos grficos para representar las instrucciones de la notacin, asi tambien se agregarn smbolos a aquellas instrucciones que no sean grficas, las figuras de estos smbolos sern congruentes con la instruccin a la que representen. Adems la herramienta permitir generar de manera automtica cdigo estructurado en el lenguaje de programacin C, este cdigo ser acorde al diseo construido.

Captulo 2

Planteamiento del problema

La herramienta debe permitir realizar diseos (que slo utilicen las construciones bsicas de la notacin) sin conocer el lenguaje de programacin C. Adems de almacenar los diseos del usuario en disco.

2.2.2 Beneficios de la tesis


Con el desarrollo de esta tesis se obtuvieron los siguientes beneficios: Se realiz una modificacin en la notacin de diseo detallado elegida (seccin 2.?), teniendo con esto una nueva notacin de diseo ms grfica. Se dise e implement una gramtica posicional de la notacin de diseo elegida. Se cuenta con un analizador sintctico de la gramtica posicional que permite validar las construcciones hechas por el usuario. Se cuenta con una gramtica lineal que valida las entradas por teclado hechas por el usuario. El usuario cuenta con una herramienta para construir sistemas, a partir del diseo detallado que asista a los programadores en la elaboracin de programas y en la documentacin de sistemas. Esta herramienta cuenta con un ambiente visual, en donde las instrucciones de la metodologa de diseo detallado estn representadas por botones, los cuales pueden ser seleccionados por el usuario para ir formando el diseo detallado, adems la herramienta va guiando al usuario en la construccin de su diseo, todo esto permite al usuario construir su diseo de una forma natural e intuitiva entre el hombre y la computadora. Se genera cdigo automticamente a partir del diseo detallado, avanzndose en la fase de codificacin, logrando con esto una reduccin de tiempo que puede ser empleado en otra fase del ciclo de vida del software. La herramienta de diseo adems de utilizar tcnicas de diseo estructurado, fomenta a los desarrolladores buenos hbitos de programacin, ya que no permite disear sus programas con muchos ciclos anidados, adems de poder utilizar solo variables que se hayan declarado con anterioridad. Se puede contar con la documentacin de los programas (diseo detallado), esto facilita la comprensin del funcionamiento de dichos programas, lo cual permitir que las adaptaciones futuras (mantenimiento) sean ms simples y rpidas.

10

Captulo 2

Planteamiento del problema

Se cuenta con un archivo de texto, donde se encuentra el cdigo generado por el sistema, de tal manera que este pueda ser utilizado posteriormente por el desarrollador si lo desea.

Una vez que se han visto algunos de los beneficios que aporta esta herramienta, se muestra a continuacin las investigaciones que se realizaron para saber cual es la notacin de diseo que se iba a implantar.

2.3 Investigacin sobre la utilizacin de las notaciones de diseo


Las notaciones de diseo surgen casi de manera simultnea con la aparicin de los lenguajes de programacin, como una herramienta que facilita a los programadores la realizacin de la fase de diseo. Hoy en da existe una amplia gama de metodologas de diseo, por lo que existen muchas maneras de realizar la fase de diseo. Para unificar un poco esto, se llev a cabo una investigacin a travs de un cuestionario, el cual se aplic a una muestra de 28 personas elegidas al azar y con diferentes niveles de conocimientos en programacin: alumnos del curso propedutico de ciencias computacionales de la generacin 95, profesores-investigadores, alumnos a nivel licenciatura tanto del Instituto Tecnolgico de Zacatepec como de la Universidad Autnoma de Morelos. Esta investigacin se realiz para determinar cules notaciones son las ms conocidas, as mismo saber cul de ellas es generalmente la ms utilizada (Anexo 1). Los resultados obtenidos de esta investigacin sirvieron para decidir qu notacin de diseo se implementa en esta tesis, buscando con esto realizar una herramienta CASE (computer aided software engineering) que pueda ser utilizada por un mayor nmero de programadores. A continuacin se muestran los resultados obtenidos de dicha investigacin.

2.3.1. Grfica de tendencias de las notaciones de diseo ms conocidas


Uno de los propsitos del cuestionario fue: saber cules notaciones son las ms conocidas, obtenindose los siguientes resultados de la encuesta a) 22 personas dijeron que conocan la notacin de diseo de Warnier/Orr. b) 20 personas conocan la notacin de diseo del pseudocdigo. c) 19 personas conocan la notacin de diseo de Flujo de datos. d) 7 personas conocan la notacin de diseo de Jackson. e) 6 personas conocan la notacin de diseo de Nassi-Shneiderman. f) 5 personas conocan la notacin de diseo de Yourdon. g) 4 personas conocan la notacin de diseo de Hipo.
11

Captulo 2

Planteamiento del problema

h) 1 persona dijo que conoca la notacin de diseo de Bertini. Con estos resultados se puede ver claramente que las notaciones ms conocidas entre los programadores son: Warnier, Pseudocdigo y Flujo de datos. Para visualizar mejor esta informacin se construy la siguiente grfica de barras. La figura 2.1 muestra el comportamiento del cuestionario aplicado.
M e to d o lo g a s d e d is e o m s c o n o c id a s
25

20

15

10

Seudocdigo

Jackson

Figura 2.1 Metodologas de diseo detallado ms conocidas.

2.3.2 Grfica de tendencia de las notaciones de diseo ms utilizadas


Una vez que han sido analizadas las notaciones de diseo ms conocidas entre los programadores, se procedi a determinar cules de ellas son las ms utilizadas (lo cual es realmente el objetivo principal de esta investigacin). Obtenindose la informacin de la figura 2.2. Frecuencia Notaciones de Diseo Warnier/Orr Pseudocdigo Diagramas de Flujo Jackson Nassi/Shneiderman 12 8 5 2 1

Con estos datos la figura 2.3 muestra un diagrama para representar la frecuencia de diseadores que eligi cierta notacin de diseo, en dnde la altura de cada barra representa el nmero de personas que eligi esa notacin, y cada una de las barras representa a la notacin.
12

Warnier

Figura 2.2 Cuadro de frecuencia de las notaciones de diseo

Yourdon

D. flujo

Bertini

Hipo

N-S

Captulo 2

Planteamiento del problema

M e to d o lo g a s d e d is e o m s u tiliz a d a s
1 2 1 0 8 6 4 2 0
Seudocdigo Warnier D. flujo

Figura 2.3 Metodologas de diseo ms utilizadas.

2.3.3 Grfica de tendencias (porcentajes) de las notaciones de diseo ms utilizadas


Otra manera de representar los resultados obtenidos de la investigacin llevada a cabo, es a travs de los diagramas circulares, llamados tambin diagramas de pastel, en donde para poder mostrar la informacin es necesario determinar un rango percentil para cada notacin, la cual representa un pedazo del diagrama de pastel. La ecuacin para determinar el rango percentil es la siguiente:

rango percentil = donde:

frecuencia * 100 N

N = sumatoria de todas las frecuencias. frecuencia = el nmero de personas que eligi cierta notacin. Aplicando esta ecuacin a cada uno de los datos que se encuentran en la figura 2.2 se obtuvo la muestra del ndice de utilizacin de las metodologas de diseo, aunque se debe recalcar que generalmente los desarrolladores no utilizan ninguna metodologa de diseo para desarrollar software, la siguiente grfica de la figura 2.4 muestra el porcentaje de utilizacin de las metodologas que ocasionalmente llegan a utilizar los desarrolladores.

Jackson

N-S

13

Captulo 2

Planteamiento del problema

Uso de las metodologas de diseo entre los desarrolladores


D. Flujo Jackson N-S

Seudocdigo Warnier

Figura 2.4 Uso de las metodologas de diseo entre los desarrolladores

2.4 Resultados obtenidos de la investigacin


Los resultados que se obtuvieron de la investigacin fueron muy similares. Todas las personas entrevistadas contestaron que s haban utilizado una notacin de diseo detallado para la elaboracin de un sistema, esto indica que s se realiza la fase de diseo detallado del ciclo de vida del software, aunque generalmente en muchas ocasiones no se hace. A pesar de que ellos mismos comentan que s han visto que son de gran ayuda porque reduce el tiempo en el desarrollo de un sistema y como consecuencia esto se ve reflejado en el costo, ya que cuando un proyecto se encuentra desfasado los costos se disparan. La mayora de las personas contestaron que utilizan una notacin de diseo cuando van a llevar a cabo un sistema grande porque esto les permite tener un mejor seguimiento de los programas adems de que sirve para la documentacin final del proyecto. Una vez analizada la utilidad y la frecuencia con la que se utiliza una notacin de diseo las dems preguntas del cuestionario estaban enfocadas para conocer cual de todas las notaciones que conocen y que han utilizado les haba gustado ms, las respuestas ya han sido mostradas en los puntos anteriores a travs de unas grficas. Aunque la informacin recabada en la encuesta es importante para este trabajo de tesis, tambin se requiri hacer otra investigacin entre las notaciones de diseo detallado, ms conocidas por los diseadores, para analizar si la notacin elegida por los encuestados ayudaba a cumplir con el objetivo de esta tesis. En esta investigacin se analizaron las construcciones bsicas, ventajas y desventajas de algunas de ellas.

14

Captulo 2

Planteamiento del problema

2.5 Investigacin de las notaciones de diseo


Las metodologas para construir el diseo detallado surgen casi de manera simultnea con la aparicin de los lenguajes de programacin. Estas metodologas junto con la programacin estructurada, permiten al diseador representar los detalles procedimentales, facilitando su traduccin al cdigo. En seguida se muestran algunas de estas metodologas o notaciones de diseo, as como sus construcciones bsicas (en algunos casos), porque cualquier programa, independiente del rea de aplicacin y de la complejidad tcnica, puede disearse e implementarse usando slo las tres construcciones estructuradas, sin embargo debe tenerse en cuenta que si estas herramientas se usan incorrectamente puede conducir a un software errneo [PRE90].

2.5.1 Pseudocdigo
Es un lenguaje chapurreado que utiliza el vocabulario de un lenguaje (p.ej.: ingls) y la sintaxis general de otro (p.ej.: un lenguaje de programacin estructurada) [CAI75]. A primera vista, el pseudocdigo se puede parecer a PASCAL o a Ada. La diferencia entre el pseudocdigo y un lenguaje de programacin de alto nivel se encuentra en el uso de texto descriptivo directamente dentro de las instrucciones del pseudocdigo. La desventaja que tiene esta notacin de diseo es que describe las instrucciones parecidas al lenguaje natural, y el diseo detallado debe especificar los detalles de los procedimientos sin ambigedad y la falta de ambigedad en un lenguaje natural no es habitual [PRE90].

1.5.2. Diagramas de flujo


Un diagrama de flujo es un grfico muy sencillo. Para representar un paso de procesamiento se utiliza un cuadro, un rombo para representar una condicin lgica y flechas para mostrar el flujo de control. Existen numerosas desventajas en el uso de los diagramas ordinarios de flujo, una de ellas es que este tipo de diagramas requieren de un espacio considerable de papel, de tal forma que el lector tiene que navegar entre varias pginas para asimilar todo el contenido del programa. Adems cuenta con demasiadas ramificaciones, cada una de ellas provenientes de cada decisin del diagrama de flujo, las cuales tienen varias formas de dibujarse, segn el autor. Esto ocasiona el problema de que a un diseador le resultar muy problemtico leer diagramas de flujo realizadas por otro diseador [KEN88].

15

Captulo 2

Planteamiento del problema

Tal vez la mejor razn para utilizar diagramas de flujo es que han sido utilizados histricamente. Quienes los han usado y han sido promovidos dentro de una compaa, con el tiempo llegan a entenderlos mejor que cualquier otra tcnica ms reciente.

2.5.2.1. Construcciones bsicas


Las construcciones bsicas de esta notacin son:

Condicin

Primera tarea ParteElse

Siguiente tarea

Partethen

Secuencia

If-then-else
Tarea del bucle

F Parte del caso T Casos de condicin F T F Do-while Condicin del bucle T F T Repeat-Until

Repeticin Seleccin
Figura 2.5 Construcciones en diagramas de flujo.

16

Captulo 2

Planteamiento del problema

2.5.3 Jackson
Esta metodologa creada por el ingls Michael Jackson se basa en que la estructura de un programa est en funcin de la estructura de los datos que manipula. Jackson emplea mdulos segn su orden jerrquico dentro de los diferentes niveles donde se encuentra. Cada mdulo es un dato o un conjunto de datos [JOY88].

2.5.3.1 Construcciones bsicas


Las estructuras bsicas en este mtodo vienen representadas en la figura 2.6 y son las siguientes:
Secuencial: un nmero determinado de mdulos se ejecutan una sola vez en el orden jerrquico preestablecido. Repetitiva: un mdulo se ejecuta desde cero hasta n veces. El proceso repetitivo se indica con un asterisco (*). Alternativa: Se selecciona para la ejecucin un mdulo entre varios posibles. El proceso se indica por medio de una letra O.

Con estas estructuras bsicas se puede obtener cualquier otra que intervenga en el diseo del programa. El uso del mtodo de Jackson supone lectura arriba-abajo y de izquierda a derecha.

N S e c u e n c ia l

R e p e t it iv a

A lte r n a tiv a

Figura 2.6 Estructuras bsicas del mtodo de Jackson.

17

Captulo 2

Planteamiento del problema

2.5.4 Nassi/Shneiderman (N-S)


Los diagramas de flujo estructurado tambin llamados Nassi-Schneiderman, son herramientas grficas que fuerzan al diseador a estructurar software que sea modular y descendente. Proporcionan una estructura a la que se pueden ajustar los que desarrollan el software de aplicacin [SEN94]. Este sistema de representacin permite tener una visin mucho ms estructurada que los diagramas de flujo y el pseudocdigo, por lo tanto tiene mayor facilidad de ser traducido al lenguaje de una computadora. Otra de las ventajas con las que cuenta este mtodo son: 1. compatibilidad con la programacin estructurada. 2. reduccin del espacio en papel ya que este mtodo omite el uso de flechas, utiliza cajas o bloques contiguos y los diagramas son de una sola hoja. Sin embargo este mtodo tambin tiene algunas desventajas con relacin a los otros mtodos. Una de ellas es que para que un diagrama pueda ser entendido debe ser completo y comprensivo [KEN88].

2.5.4.1. Construcciones bsicas


Los elementos bsicos de los diagramas N-S son [KEN88]:

Proceso

Decisin

Iteracin

Figura 2.7 Los tres smbolos grficos utilizados para dibujar los diagramas de Nassi-Schneiderman.

18

Captulo 2

Planteamiento del problema

PROCESO: est representado mediante un rectngulo y simboliza la inicializacin de variables, actividades de entrada y de salida y las llamadas para ejecutar otros procedimientos.

Un nombre descriptivo breve, escrito dentro del rectngulo, establece el propsito del proceso.
DECISION: el smbolo de decisin representa condiciones alternativas. Son equivalentes a las estructuras IF-THEN-ELSE. ITERACION: representa los ciclos y repeticiones de operaciones mientras se cumpla una condicin [KEN88].

2.5.5. HIPO (Hierachy/Input/Process/Output)


Este mtodo fue creado con el propsito de ayudar a los diseadores a no perder la pista de alguna funcin dentro de un sistema grande, sta es su principal ventaja con la que cuenta con respecto a otras notaciones, ya que este mtodo permite tener una vista panormica de las entradas, procesos y salidas de datos. Esto lo hace una herramienta til para la documentacin de programas, adems de que le puede facilitar al autor de un programa el recordar lo que hace el sistema despus de cierto tiempo. Sin embargo HIPO tambin cuenta con ciertas desventajas, una de ellas es que utilizan una gran cantidad de papel para mostrar todo el diagrama de un sistema por lo que puede ocasionar que el lector navegue entre hojas y se le dificulte el seguimiento del flujo de ste [KEN88]. En la figura 2.8 se muestra un ejemplo del diagrama HIPO [FAI90].

Leyenda
.-.-.-..-.-.-..-.-.-.2 5 6 7

1 3 8 10 9 11 4 12

Contenido
1-.-.-.-.-.-. 6.-.-.-.-.2.-.-.-.-.-.- 7.-.-.-.-.3.-.-.-.-.-.- 8.-.-.-.-.4--.--.-.--- 9.---.-.-.5.-.-.-.-.-.- 10.-.-.-.-.

Figura 2.8 Tabla visual de contenido para un paquete HIPO.

19

Captulo 2

Planteamiento del problema

2.5.6 Diagramas de warnier


El diseo de estos diagramas fueron desarrollados inicialmente en Francia por JeanDominique Warnier, con el fin de representar la jerarqua de la informacin utilizando las tres construcciones de secuencia, seleccin y repeticin, adems Warnier demostr que la estructura del software puede derivarse directamente de las estructuras de los datos. Por su parte Kenneth Orr en los Estados Unidos ampla el trabajo de Warnier abarcando una visin ms amplia del campo de informacin, evolucionando el desarrollo de sistemas estructurados en datos [PRE90].

2.5.6.1 Simbologa
A continuacin en la figura 2.9 se muestra un diagrama general de Warnier-Orr, as como el significado de los diferentes elementos que en l participan [SAN92].

C ondicin Proc. 1

sum a<- sum a+ 1 C ondicin x = x +1 (c)

* x >= 5


Figura 2.9 Simbologa utilizada para los diagramas de Warnier.

Significado de los elementos 1. Denota a un bloque de informacin jerarquizada que pueden ser datos o acciones, de derecha a izquierda denota los niveles de abstraccin, de arriba abajo, muestra la secuencia y las relaciones lgicas entre las funciones.

20

Captulo 2

Planteamiento del problema

2. La informacin entre los parntesis (variable simblica o cantidad numrica ) indica el nmero de veces que ocurrir la estructura. Si se coloca una letra C indica que un ciclo se termina cuando una condicin se cumple. 3. Indica la negacin de una condicin. 4. Indica ocurrencia condicional de una accin o grupo de acciones. 5. Indica un bloque de instrucciones descrito en otra parte, puede estar vaco o llevar adentro un nmero o identificador de procedimiento (subprograma, rutina, funcin, etc.). 6. Indica expresin condicional de fin de ciclo. Es decir cuando se cumple la expresin que va despus del asterisco, se termina de ejecutar el ciclo. 7. Indica asignacin de una variable, de derecha a izquierda.

2.5.6.2 Construcciones bsicas


La notacin de Warnier utiliza las construcciones bsicas de: secuenciacin, bifurcacin y repeticin figura 2.10. A continuacin se explica cada una de ellas [SAN92].

Proceso 1, Proceso 2,

Condicin Proc 1

. .
Proceso n (a) Secuenciacin
X <- 1

Condicin Proc 2

(b) Bifurcacin
sum a <- sum a + 1 x = x +1 * x >= 5

(c)

(c) Repeticin
Figura 2.10 Construcciones bsicas de los diagramas de Warnier.

21

Captulo 2

Planteamiento del problema

Secuenciacin. La llave es usada para denotar diferentes niveles de informacin jerarquizada,


de arriba abajo muestra la secuencia de ejecucin y las relaciones lgicas entre los procesos, de izquierda a derecha muestra el nivel de abstraccin.

bifurcacin. Si se cumple la condicin, el proceso se bifurca al proceso 1, de otra manera se


sigue con el proceso 2.

Repeticin. En la figura 2.10 inciso c se muestra la estructura de repeticin. Todas las


instrucciones que se encuentren dentro de la llave se van a ejecutar hasta que se cumpla la condicin x >= 5. Esta notacin de diseo detallado tiene una caracterstica que la hace diferente respecto a las dems notaciones, sta es: para poder desarrollar un diagrama de Warnier/Orr, el analista debe trabajar hacia atrs, es decir, se debe empezar con la especificacin de la salida del sistema. En el papel el flujo del diagrama va de izquierda a derecha, definiendo en primer lugar la salida o resultados del procedimiento y en el nivel siguiente, mostrado mediante la inclusin de una llave, se definen los pasos para producir una salida. Las llaves adicionales agrupan los procesos requeridos para producir el resultado en el siguiente nivel. Estos diagramas ofrecen a los expertos en sistemas algunas ventajas distintivas. Son simples en apariencia, fciles de entender, fciles de modificar, mas que los diagramas de NassiSchneiderman porque como se mencion anteriormente el analista debe trabajar hacia atrs. Otra de sus ventajas importantes es que los diagramas de Warnier son compatibles con las tcnicas de la programacin estructurada, por lo que se convierten en poderosas herramientas de diseo. Tambin tienen la ventaja de mostrar agrupaciones de procesos y los datos que deben transferirse de nivel a nivel. Adems la secuencia del trabajo hacia atrs garantiza que el sistema estar orientado hacia el resultado, a menudo es necesario determinar los pasos ms internos antes de poder resolver lo relativo a las interacciones y a la modularidad [KEN88].

2.6 Comparaciones entre las notaciones de diseo


En la seccin anterior se mencionaron algunas de las muchas notaciones que existen, pero en la actualidad no hay alguna notacin que pueda considerarse como estndar para la documentacin del software. Esto conlleva a la libertad que tienen los programadores en elegir la notacin que ms le pueda servir para su diseo, ya que no podemos decir cual de ellas es mejor o peor porque cada una de ellas cuenta con sus propias caractersticas lo que las ponen en ventajas con algunas de ellas y viceversa. Pressman hace algunos comentarios los cuales pueden serle tiles al programador para elegir una notacin de diseo.
22

Captulo 2

Planteamiento del problema

Una notacin de diseo debe conducir a una representacin que sea fcil de comprender y revisar. Adems, la notacin debe facilitar la codificacin, de forma que el cdigo se obtenga de hecho como un producto natural del diseo. Finalmente la representacin del diseo debe ser fcilmente mantenible, de forma que el diseo represente siempre correctamente el programa. Adems menciona algunos atributos con los que debe contar una buena notacin de diseo, estos son:
Modularidad: una notacin de diseo debe soportar el desarrollo de software modular. Pfleeger comenta que la modularidad es una de las caracterstica que tiene un buen diseo, ya que la modularidad provee la flexibilidad que los programadores necesitan para entender lo que un sistema est haciendo [PFL91]. Simplicidad global: una notacin de diseo debe ser relativamente sencilla de aprender, relativamente fcil de usar y generalmente fcil de leer. Facilidad de edicin: el diseo procedimental puede requerir modificaciones durante el paso de diseo, durante la prueba del software y finalmente durante la fase de mantenimiento del proceso de ingeniera de software. Legible por la mquina: los entornos de la ingeniera de software asistida por computadora estn siendo adoptados por la industria. Una notacin que pueda ser introducida directamente en un sistema de desarrollo basado en computadora ofrece unos enormes beneficios potenciales. Mantenimiento: el mantenimiento de la configuracin del mantenimiento de la representacin del diseo procedimental.

software casi siempre significa

Exigencia de Estructura: una notacin de diseo que refuerce el uso slo de construcciones estructuradas promueve la prctica de un buen diseo. Procesamiento Automtico: un diseo detallado contiene informacin que puede ser procesada para dar al diseador nuevos o mejores conocimientos respecto a la correccin y la calidad de un diseo. Representacin de los datos: la habilidad para representar datos locales y globales es un elemento esencial en el diseo detallado. Verificacin lgica: una notacin que refuerce la posibilidad de verificar la lgica, mejora bastante la idoneidad de la prueba. Disposicin para la codificacin: una notacin que se convierta fcilmente a cdigo fuente reduce el trabajo y los errores.
23

Captulo 2

Planteamiento del problema

2.7 Notacin de diseo detallado elegida


Con los resultados obtenidos de la encuesta y el estudio realizado de las notaciones de diseo detallado, se decide implantar la metodologa de Warnier porque la mayora de la gente la calific como una notacin sencilla de utilizar, porque permite manejar niveles de abstraccin tanto como el usuario quiera, adems de que es independiente del lenguaje sobre el cual se desee realizar la implantacin. Otra razn por la eleccin de esta notacin es que cuenta con algunos smbolos grficos en sus construcciones bsicas, lo que permite realizar la automtizacin visual de la notacin. Adems esta metodologa tiene en el momento actual, un nivel de formalizacin considerablemente superior a otras metodologas tales como Bertini, Jackson o Yourdon, lo cual permite una forma ms eficiente y real de su soporte mediante una herramienta CASE, tanto para la generacin de programas como para su validacin [CUE93].

24

CAPITULO 3

CONCEPTOS DE PROGRAMACION VISUAL


En este captulo se encuentran algunos conceptos fundamentales de la programacin visual, as como el estado del arte de la misma.

26

Captulo 3

Conceptos de Programacin Visual

3.1 Introduccin
Da a da crece el inters en los sistemas que utilizan grficas en la comunicacin computadora/seres humanos, en programacin de aplicaciones y en la llamada visualizacin de datos. Por lo tanto la tendencia dominante hoy en da es la de las herramientas de desarrollo generadas mediante lo que se ha denominado como programacin visual [LOP95]. Se presentan a continuacin algunos de los conceptos ms importantes en torno a la programacin visual.

3.2 Conceptos de programacin visual


Por programacin visual se entiende como el uso de expresiones visuales, tales como grficas, dibujos e iconos en el proceso de la programacin de aplicaciones [BUR95]. Un lenguaje visual es una representacin pictogrfica de entidades conceptuales y operaciones [CHA90]. Un lenguaje visual significa en realidad el uso sistemtico de las expresiones visuales (tales como grficas, dibujos e iconos), que se convierten en cdigo que a su vez la computadora puede ejecutar para realizar una tarea particular [LOP95]. La Visualizacin tiene la funcin de ilustrar ciertos tipos de datos, la estructura de datos, la estructura de un sistema complejo o, incluso, el comportamiento de un sistema dinmico [LOP95]. Un lenguaje visual es esencialmente una herramienta compuesta de iconos, o sentencias visuales. Los compiladores de los lenguajes visuales deben interpretar sentencias visuales y trasladar stas dentro de una forma que al menos intente la ejecucin de las tareas. Este proceso no es directo. El compilador no puede determinar el significado de una sentencia visual simplemente por mirar el icono. Debe considerar el contexto de la sentencia, como el objeto se relaciona con los dems. Los intentos de mantenimiento que hace un usuario, as como la interpretacin de los mismos, es una de las tareas ms importantes en un lenguaje visual. Una sentencia visual es un acomodo espacial de objetos y/o iconos de procesos que generalmente describen una compleja entidad conceptual de una secuencia de operaciones.

27

Captulo 3

Conceptos de Programacin Visual

3.3 Una taxonoma de iconos


Iconos objetos: representan entidades o grupos conceptuales de iconos que son acomodados en un lugar en particular. Iconos de procesos: denotan operaciones y son generalmente dependientes del contexto [CHA95]. En cuanto a los iconos, Shi-Kuo Chang en su artculo Hacia una teora formal de iconos [CHA87], realiza una taxonoma de los iconos y dice: un icono generalizado es un objeto con doble representacin, una parte lgica (el significado) y una parte fsica (la imagen). El diccionario define un icono como: una imagen; figura; representacin; pintura. La comunicacin de un icono concierne con el uso de la imagen para transmitir ideas o acciones (comandos) de una manera no verbal. En la figura 3.1 se da una taxonoma de iconos, que provee una clasificacin por su diseo o su funcin.

Diseo
Representativo

Funcion
Dibujo

Abstracto

Smbolo

Arbitrario

Signo

Figura 3.1 Una taxonoma de iconos.

En esta taxonoma Shi-Kuo Chang da un sistema formal de iconos, la cual tiene cinco elementos G = (VL, VP, S, x0, R), donde VL es un conjunto de objetos lgicos. VP es un conjunto de objetos fsicos, S es un conjunto finito no vaco de nombres de iconos, x0 es un elemento en S, denotando la cabeza el nombre del icono, y R es el conjunto de reglas de los iconos el cual es mapeado desde X en 2(VLS). Un icono es denotado por x, y su identificador formal, o (Xm, Xi), donde Xm es un subconjunto de VLS, y Xi es un elemento de VP. Se podra utilizar la notacin x intercambiable, (Xm, Xi), x(Xm, Xi), y (x, Xm, Xi), para denotar un icono. Dado que un icono en un sistema G, puede determinar el icono del conjunto RR, el cual es un conjunto de todos los iconos definido por G, o formalmente, RR = { (x,Xm, Xi): x::=( (Xm, Xi) R) }.
28

Captulo 3

Conceptos de Programacin Visual

Un icono (x,Xm, Xi) puede ser uno de los siguientes tipos: Icono elemental: Si XmS es vaco. En otras palabras, Xm es un subconjunto de VL, dado que x es de la forma ({etiquetas}, imagen). La etiqueta puede denotar objetos, procedimientos u operadores, dado que los iconos elementales pueden ser un icono objeto, un icono de proceso o un icono operador. Existen iconos elementales especiales. Un icono imagen es uno donde Xm est vaco, as x es de la forma ({}, imagen). Un icono etiqueta es uno donde la parte fsica es nula, as que x es de la forma ({etiqueta}, e). Finalmente, un icono nulo es de la forma ({}, e). Icono complejo: Si XmS es no vaco. Un icono complejo apunta a otros iconos y define relaciones de iconos. En este tipo de iconos se pueden distinguir los siguientes tipos: Icono compuesto: Si XmVL es no vaco. El icono x es de la forma ({OP, y1,...,yn}, imagen). En otras palabras, x est compuesto de subiconos y1,...,yn utilizando el operador OP. Icono estructural: Si XmVL es vaco. El icono x es de la forma ({y1,...,yn}, imagen), en otras palabras, x est relacionada con subiconos y1,...,yn , pero el mecanismo para la composicin de x de y1,...,yn no est especificado. Una de las razones por las que el uso de iconos tiene un gran crecimiento, se debe a la facilidad para captar un mensaje visual, ya que la mente, cuando procesa imgenes, infiere relaciones sin necesidad de incluir texto en estas. Adems, existen otras razones que nos invitan a iniciar la utilizacin de elementos visuales dentro de los medios ambientes de trabajo y desarrollo. Enseguida citamos algunas. a) Las figuras son ms didcticas que las palabras como un medio de comunicacin. Puede trasmitirse ms informacin de una manera ms concisa por unidad de expresin. b) Las figuras ayudan a entender y recordar. c) Las figuras pueden ser un incentivo para aprender a programar. d) Las figuras no tienen las barreras del lenguaje. Cuando son adecuadamente diseadas, son entendidas independientemente del idioma que se hable. Con lo anterior no queremos decir que la meta de los lenguajes visuales sea representar todo tipo de ideas y acciones mediante iconos sin incluir en estas texto; la finalidad es usar de manera armnica los dos tipos de representacin para integrar ideas ms claras.

29

Captulo 3

Conceptos de Programacin Visual

Debido a estas caractersticas el nmero de reas en las que se pueden emplear los iconos como objetos de informacin es mayor. Una de estas reas y la que nos interesa es la de computacin. En ella recientemente se ha investigado acerca de medios ambientes de trabajo basados en iconos, y ambientes fundamentalmente visuales. Esta rea es conocida actualmente como lenguajes Visuales (LV) o sistemas basados en iconos (SBI). Estos se encuentran dentro de la programacin visual [CHA86]. En este tema de tesis se utilizaron iconos elementales para representar cada una de las instrucciones del diseo detallado, estos iconos tienen con una parte lgica y una parte fsica, adems de los tributos asociados con los que cuentan. En el captulo siguiente se hablar con ms detalle de la gramtica utilizada en el GenCod, as como del lenguaje visual que se realiz con este trabajo de investigacin.

3.4 Programacin visual


La programacin visual se distingue por lo que describe y como lo describe. Lo que describe son programas, expresados en trminos de la sintaxis y semntica del lenguaje de programacin. Cuando al menos algunos de los terminales de la gramtica del lenguaje son grficos, tales como pinturas, formas o animaciones, decimos que el lenguaje tiene una sintaxis visual. Una sintaxis visual puede incorporar informacin espacial tal como contenido o relacin , y atributos visuales tales como localizacin o color. El texto puede adems ser una parte de la sintaxis visual. Ejemplos de texto en una sintaxis visual son los comentarios textuales y etiquetas textuales de los nombre de los iconos. Ejemplos de lenguajes con una sintaxis visual incluye muchas clases de lenguajes diagramticos, tales como lenguajes de flujo de datos o lenguajes de estados de transicin, en la cual los nodos y arcos son los terminales. Otros ejemplos incluyen lenguajes iconicos en los cuales la composicin espacial de los iconos son los terminales, utilizan la especificacin de la composicin de los tokens o las precondiciones y poscondiciones de las reglas de accin. Utilizamos el trmino lenguaje de programacin visual (VPL), para significar un lenguaje con una sintaxis visual. La forma en la cual trabajan los programadores para crear, modificar y examinar programas, est definida por el ambiente de programacin. El ambiente consiste de un conjunto de herramientas y una interfaz para que el usuario pueda accesar a ellas. Decimos que el sistema tiene un ambiente visual cuando las herramientas son grficas y utilizan tcnicas grficas para la manipulacin de elementos pictogrficos y para desplegar la estructura del programa si fue originalmente expresado textual o visualmente[BUR95]

30

Captulo 3

Conceptos de Programacin Visual

3.5 Lenguaje visual Vs. textual


Los defectos de los lenguajes basados en texto son variables. Uno de estos se presenta en la forma de representar las variables. Las variables son smbolos para representar objetos desconocidos, estas tienen dos propsitos contradictorios: a)ellas ligan puntos de dnde se producen los datos y dnde se utilizan (nombres cortos preferentemente) y b) sus nombres dan informacin del modo en que se usan los datos (nombres largos preferentemente). En los lenguajes grficos las variables pueden ser eliminadas usando un significado grfico que indique todos los puntos en el programa donde se usa el mismo dato. Los elementos de una figura pueden ser agrupados en un mismo tipo dentro de un conjunto de figuras, lo cual puede ser adems combinado con la forma de la figura. En un programa textual esta combinacin agrupa smbolos adyacentes dentro de subfrases. Esta composicin de dos frases textuales es su concatenacin. Para una figura la composicin es ms complicada que la concatenacin. La composicin de una figura puede ser hecha con formas adyacentes, donde la adyacencia puede ser sin fundamento o completamente especificado (A arriba de B, A cerca de B, etc.). La composicin puede adems ser hecha a travs de la conexin del elemento tal como dos segmentos de lneas con un punto en comn. Tanto los lenguajes textuales, como visuales, estn formados sobre un alfabeto bsico y pueden ser descompuestos dentro de su estructura bien definida. Pero (a) una cadena de strings es unidimensional y tiene un orden lineal, y (b) para entender la estructura de un programa visual es a menudo un grafo direccionado, ms que un rbol[PRO96].

3.6 Estado del arte


A continuacin se mencionan algunas de las herramientas que pudiesen tener alguna relacin con el tema de tesis que se presenta.

3.6.1 Visual magic


Visual Magic es una herramienta que permite desarrollar y mantener software en el nivel de diseo, mediante un modelo ejecutable que valida la funcionalidad de una aplicacin requerida. Despus que el usuario refina la aplicacin, puede generar cdigo automticamente de estos diagramas. Lo que significa que un usuario puede concentrarse en obtener el diseo, sin tener que preocuparse de escribir el cdigo[VIS97].

31

Captulo 3

Conceptos de Programacin Visual

3.6.2 Generador de ambientes visuales (VLCC)


El VLCC (The Visual Language Compiler-compiler), es un prototipo grfico para la generacin automtica de ambientes de programacin y soporta la implantacin de un lenguaje visual mediante la asistencia del diseador, con la sintaxis del lenguaje, semntica y la definicin grfica de los objetos. La generacin de procesos produce un ambiente integrado con un editor y un compilador para el lenguaje visual definido [CHA95].

3.6.3 Microstep
Microstep es un generador de aplicaciones basado en grficos, que permite ir de especificaciones a programas ejecutables de forma automtica. Este genera cdigo en C, compilndolo y ligndolo automticamente. Microstep esta diseado para procesamiento de datos y manejo de aplicaciones principalmente por el flujo de datos entre procesos. Microstep est basado en un lenguaje grfico que a su vez est basado en diagramas de flujo de datos similares a las de Yourdon. En Microstep se pueden crear diagramas de flujo de datos y definir los objetos individuales (estructuras y formatos) y procesos con un editor grfico. Se puede especificar el flujo de control y un rango completo de lgica. Microstep verifica consistencia y sintaxis. Microstep soporta diagramas de flujo ms grandes que una sola pantalla; se pueden utilizar herramientas zoom para moverse a travs de tales diagramas. Las especificaciones pueden contener llamados a otras especificaciones hasta cinco niveles de profundidad. Estas caractersticas permiten construir sistemas grandes. En Microstep se construyen especificaciones computacionales y lgicas seleccionando operadores y funciones de mens pull-down [LEW90].

32

CAPITULO 4

DESCRIPCION DE LA GRAMATICA DEL GENCOD


En este captulo se describe la gramtica posicional que utiliza el GenCod, as como las modificaciones que se realizaron a la notacin de diseo (Warnier), adems de mostrar la estructura de datos que se utiliz.

33

Captulo 4

Descripcin de la gramtica del GenCod

4.1. Antecedentes
El sistema Generador de cdigo para lenguaje C utilizando una notacin de diseo detallado no es un proyecto aislado, ste forma parte de un proyecto emprendido recientemente en el Cenidet. A continuacin se describe en forma general el objetivo de dicho proyecto: AMbiente integrado de soporte para la Administracin y desarrollo de Sistemas de Software (AMASS-I) [Santaolaya96]: En fecha reciente, el Consejo Nacional de Ciencia y Tecnologa (CONACYT) aprob el apoyo financiero para este proyecto de investigacin, asignndole la clave 0722P-A, a realizarse por el grupo de Ingeniera de Software del Cenidet. El sistema AMASS-I, consiste en un conjunto de herramientas de apoyo a los desarrolladores que estar organizado en forma modular para dar oportunidad de adicionar nuevas herramientas que sean desarrolladas despus de contar con la primera versin de ste. Inicialmente, el sistema estar integrado de herramientas de las etapas del ciclo de vida del software menos atendidas como son las fases de diseo y generacin automtica de cdigo, pruebas, mantenimiento y autodocumentacin, en un ambiente visual de desarrollo, que tendr la arquitectura presentada en la figura 4.1. De esta figura, la capa ms baja indica que todas las herramientas que forman parte del sistema AMASS-I, estn desarrollndose en una plataforma Windows. Las siguientes capas son los mdulos o subsistemas principales que forman las herramientas del AMASS-I, stas son: Sistema visual generador de interfaces visuales (GenVIU), este sistema actualmente se encuentra en desarrollo dentro del AMASS-I. El tipo de interfaces que generar este sistema estar enfocado a los ambientes de desarrollo de sistemas. En particular, el GenVIU permitir generar una interfaz grfica SAMI (sistema administrador de sistemas integrados) que posibilite a las herramientas que integran el AMASS-I y versiones posteriores comunicarse a travs de protocolos perfectamente definidos. Generador de cdigo (GenCod), este sistema parte de la definicin gramatical de un lenguaje visual basado en los smbolos diagramticos de Jean D. Warnier para el diseo detallado de programas, de tal forma que el usuario pueda ir diseando interactivamente un programa mediante la identificacin visual de los smbolos de la notacin de diseo de Warnier. La salida de este sistema genera por un lado un archivo que contiene el diseo detallado del programa de la aplicacin particular en diagramas de Warnier, para su posterior uso en actividades de mantenimiento, y por otro lado tambin genera un archivo que contiene el cdigo fuente en lenguaje C, generado a partir de la aplicacin hecha por el usuario.

34

Captulo 4

Descripcin de la gramtica del GenCod

Este sistema podr accesar al sistema de recuperacin de cdigo reusable (este sistema tambin forma parte del AMASS-I) y regresar desde l, despus de haber localizado e incorporado unidades de biblioteca, al proceso de desarrollo del programa de la aplicacin. Tambin podr accesar al sistema documentador de software (este sistema tambin forma parte del AMASS-I) y regresar desde l, sto lo podra hacer con la herramienta explicada anteriormente.

Sistema de recuperacin de cdigo reutilizable (SisRec)

Autodocumentador de software (DaProg)

Generador de cdigo (GenCod)

Generador de interfaces visuales (GenVIU)

Aplicacin

Plataforma windows
Figura 4.1 Esquema conceptual por capas del AMASS-I.

Autodocumentador de software (DaProg), este sistema actualmente se encuentra en desarrollo dentro del AMASS-I. Permitir documentar interna y externamente programas de computadora escritos en lenguajes C (los cuales deben apegarse a un formato impuesto por la herramienta). En esta parte se generar la estructura y el diccionario de datos utilizados por el programa en cuestin, un diagrama conceptual o ndice de contenido del sistema, descripcin a detalle de funciones y procedimientos, especificando sus parmetros de entrada/salida, la bsqueda y reemplazo de nombres de variables, eliminacin de identificadores o variables no utilizadas, y un archivo de ndices del programa fuente. Esto ser de utilidad para el proceso de mantenimiento de sistemas de informacin que carecen de la documentacin asociada. Existir un canal de comunicacin e intercambio de informacin adecuado entre este sistema y los dems subsistemas del ambiente.
35

Captulo 4

Descripcin de la gramtica del GenCod

Sistema de recuperacin de cdigo reutilizable (SisRec), este sistema utiliza depsitos de componentes reutilizables y/o bibliotecas de funciones ya sean definidas por los lenguajes y/o aquellas que son desarrolladas de manera aislada por los programadores, para incorporar automticamente cdigo reusable; mediante la bsqueda, localizacin y recuperacin, de segmentos de cdigo o unidades de biblioteca, al desarrollo de nuevos programas de aplicaciones diversas, sin que se requiera de la modificacin importante de tales bibliotecas y/o funciones. Se podr accesar desde este sistema a los subsistemas de generacin automtica de cdigo y autodocumentacin, una para la construccin de bibliotecas y la otra para su documentacin [SAN96].

4.2 Esquema conceptual del GenCod


Gramtica del Leng. C A. sintctico A. lxico Gramtica posicional Interfazgrfica Grfica Interfaz Analizador sintctico Analizador semntico

Generador de cdigo en C Ayudas de la herramienta

Programa de aplicacin

Figura 4.2 Esquema conceptual del GenCod

El esquema conceptual del GenCod (Generador de cdigo para lenguaje C utilizando una notacin de diseo detallado) es mostrado en la figura 4.2. Este modelo representa grficamente las capas que sirvieron de base para construir el GenCod. La primera etapa de este proyecto consisti en analizar la gramtica del lenguaje de programacin C, para posteriormente elaborar un analizador lxico y sintctico de la gramtica (anexo 3), estos dos analizadores son tiles al realizar el anlisis de las entradas textuales que realiza el usuario, por ejemplo, las declaraciones de nombres de variables e identificadores.

36

Captulo 4

Descripcin de la gramtica del GenCod

De forma simultnea al desarrollo de estas dos primeras etapas se llev a cabo una investigacin de campo para determinar cul metodologa de diseo era la ms conveniente de implantar en este proyecto de tesis (seccin 2.3). Las siguientes tres capas que se muestran en el modelo conceptual del GenCod, forman las partes de un compilador visual. La primera es una gramtica posicional basada en la metodologa de diseo detallado de Warnier, se le denomin posicional porque la gramtica toma como referencia un espacio bidimensional en el cual se distribuyen los elementos que componen un diseo elaborado con esta metodologa. La segunda capa constituye la creacin de la interfaz grfica del sistema, sta se realiz implcitamente al implantarse la gramtica posicional. Aunado a esto se llev a cabo la tercera capa, formada por el analizador sintctico y semntico de la gramtica posicional. Se debe mencionar que el compilador que se implant para este proyecto de tesis no cuenta con un analizador lxico debido a que se est hablando de un compilador visual, el cual difiere de los compiladores lineales en que el primero de estos no necesita ir formando unidades lxicas sino que cada elemento que compone a la gramtica es una unidad lxica (de esto se hablar ms ampliamente a lo largo de este captulo). La siguiente capa del modelo conceptual la forma el generador de cdigo, en esta parte del sistema se traduce la notacin de diseo detallado a cdigo en lenguaje C. La capa siguiente est constituida por una serie de herramientas incluidas en este sistema, tales como: el sistema de navegacin, el sistema de impresin del diseo, el sistema de ayudas al usuario (hipertexto) y el sistema de buenos hbitos de programacin [PAZOS]. Este ltimo valida lo siguiente: que no sea posible hacer declaraciones de variables de una sola letra, que no se permita declarar una variable si sta no cuenta con al menos tres letras al inicio y, por ltimo, que no pueda haber ms de tres ciclos anidados del mismo tipo. La capa ms externa del modelo conceptual es la del programa de aplicacin que constituye al GenCod.

4.3 Un lenguaje grfico para la representacin de una notacin de diseo


Una vez que se determin la notacin de diseo a utilizar (notacin de Warnier) y la forma como se iba a representar (un ambiente grfico), se hizo necesario disear un lenguaje que permitiera unir ambos conceptos sin que perdieran sus atributos principales, lo cual implic definir una gramtica que soportara a este lenguaje. La gramtica definida para este tema de tesis ser expuesta en las secciones posteriores. El primer paso para construir un lenguaje grfico para la representacin del diseo fue realizar algunas modificaciones a los componentes u objetos grficos que forman la notacin de diseo detallado de Warnier, estas modificaciones consistieron en: a) modificar aquellos
37

Captulo 4

Descripcin de la gramtica del GenCod

smbolos grficos que determinamos (en reunin con el Grupo de Ingeniera de Software del cenidet) que carecan de la expresividad suficiente como para ser entendidas por un gran nmero de desarrolladores y b) agregar smbolos grficos a aquellas instrucciones que no tenan una representacin en la metodologa de Warnier, pero que se necesitaban para el desarrollo de un sistema, un caso de esto fueron las instrucciones de escritura o lectura, que no tienen una contraparte simblica en la notacin Warnier original. En la siguiente seccin se expondrn las modificaciones a la notacin. A estas modificaciones que se realizaron no se afect el principio de organizacin jerrquica con el que cuenta Warnier, esta organizacin puede interpretarse de la siguiente manera (figura 4.3). El conjunto de informaciones C se subdivide en subconjuntos de primer nivel S11..., S1n (el nivel viene sealado por el ndice superior). Estos se subdividen a su vez, en subconjuntos de segundo nivel S21,1...,S21,K1..., S2n,1..., S2n,Kn y as sucesivamente hasta agotar la particin.

N IV E L 1

N IV E L 2

S 2 1 ,1 S 11 S 2 1 ,K 1 C S 2 n ,1 S 1n S 2 n ,K n

Figura 4.3 Principio de la organizacin jerrquica

Para efectos de esta tesis se determin dividir cada uno de los conjuntos de informaciones en objetos activos y pasivos, de tal forma que sea posible diferenciarlos entre s: los objetos activos son aquellos que generalmente llevan implcitos un conjunto de instrucciones, por ejemplo, si hablamos de un ciclo de repeticin, ste es un objeto activo porque dentro de l pueden existir n conjuntos de instrucciones, que se van a estar ejecutando, por lo tanto se dice que un objeto activo puede contener n conjuntos de objetos activos, pasivos o ambos, dando paso a la formacin de los niveles de abstraccin; mientras que un objeto pasivo es aquel que no puede contener a otros objetos, por ejemplo las instrucciones secuenciales: las instrucciones de entrada (scanf), salida (printf), etc.

38

Captulo 4

Descripcin de la gramtica del GenCod

4.3.1 Notacin de diseo detallado modificada


Como se mencion anteriormente, se tuvieron que hacer algunas modificaciones a la notacin de diseo de Warnier para hacerla ms intuitiva al usuario para su manejo. Por lo tanto se obtuvo una notacin de diseo ms grfica. En la figura 4.4 se muestra una tabla con las modificaciones que se hicieron a la notacin de diseo detallado de Warnier, en esta figura solamente se maneja la construccin bsica de la secuenciacin que abarca las siguientes instrucciones:
Construccin bsica tipo de instruccin
a) instruccin de entrada

Notacin de Warnier (ejemplos)

Notacin de Warnier Modificada(ejemplos)

Secuencia

Lee variable

variable

Instruccin1, Instruccin2, . . . Instruccin n

b) instruccin de salida
c) instruccin para representar la terminacin del conjunto de instruccines que integran un objeto activo. d) El indicador de la implantacin de un lenguaje dado no existe

Escribe Cadena

cadena

No existe (slo el indicador del nivel de abstraccin)

No existe su representacin

clrscr();

Figura 4.4 Tabla que muestra las modificaciones hechas a la notacin de diseo de Warnier en la secuencia.

a) Instruccin de entrada. A esta instruccin solamente se agreg un smbolo grfico, de un libro abierto, con el cual se pretende que el usuario de la herramienta GenCod asocie este smbolo con una lectura. b) Instruccin de salida. Al igual que la instruccin anterior, solamente se agreg a sta un smbolo grfico (un lpiz). c) Fin del ciclo. Esta instruccin fue agregada a la notacin de diseo e indica la terminacin del conjunto de instrucciones que forman parte de un objeto activo. d) Texto en C. Esta nueva notacin de diseo, es independiente de cualquier lenguaje de programacin excepto por este icono. Esta instruccin o icono fue diseado con el propsito de darle ms facilidades al desarrollador, que ya conoce el lenguaje C, adems de hacer a la notacin ms extensa, ya que las notaciones de diseo detallado generalmente slo incluyen las construcciones bsicas. Cuando el usuario elija esta instruccin tiene que escribir sintcticamente bien, alguna funcin del lenguaje de programacin C, que desee incluir dentro de su diseo. Esta instruccin tiene asociado el smbolo grfico mostrado en la figura 4.4 inciso d (ver columna etiquetada con el texto instruccin). Sin embargo el empleo de esta instruccin no es obligatoria para el desarrollo del diseo.

39

Captulo 4

Descripcin de la gramtica del GenCod

Pasando a las modificaciones que se hicieron a la construccin bsica de la bifurcacin, podemos notar que en sta hubo varios cambios: 1. Se agreg la instruccin de la bifurcacin simple, ya que en la notacin de diseo de Warnier, sta no existe. Esto se hizo con el fin de eliminar el conjunto vaco que se colocaba cuando no exista una condicin negada. 2. Se agreg un smbolo grfico a todas las condiciones. Tambin a las condiciones negadas se les ha agregado un smbolo grfico, estos smbolos se pueden observar en la tercera columna de la figura 4.5. (or exclusivo), de la notacin de Warnier que exista entre dos 3. Se elimin el smbolo condiciones de una bifurcacin compuesta o mltiple (figura 4.5 inciso b y c), ya que lo lleva implcito el smbolo .

Construccin bsica

Instruccin

Notacin de Warnier (Ejemplos)


no existe

Notacin de Warnier Modificada (ejemplos)

a) Simple

condicin condicin

Proc 1

Proc1 Proc2

Condicional

b) Compuesta condicin

condicin

Proc1

condicin Proc 2

condicin1 c) Mltiple condicin2 condicin n

Proc1 condicin1 Proc2 condicin2 Proc n

Proc1 Proc2

condicinn Proc n

Figura 4.5 Tabla que muestra las modificaciones hechas a la notacin de diseo de Warnier en la bifurcacin.

Pasando a la construccin bsica de la repeticin, tambin se hicieron algunos cambios, estos fueron: a) Se elimin la informacin entre los parntesis (r) de la notacin de Warnier (figura 4.6 inciso a y b). b) El parntesis que indica la condicin del ciclo en el diagrama de Warnier, fue reemplazado por un smbolo grfico, el cual tiene la forma de un asterisco y la posicin de ste indica la instruccin a ejecutar, por ejemplo si el asterisco se encuentra al principio del conjunto de instrucciones que forman ese nivel de abstraccin (figura 4.6 inciso a), entonces la instruccin
40

Captulo 4

Descripcin de la gramtica del GenCod

estar actuando como un while (del lenguaje de programacin C), pero si el asterisco se encuentra al final del bloque de instrucciones (figura 4.6 inciso b), entonces estar actuando como un ciclo do while, pero si el asterisco con la condicin se encuentra en un nivel de abstraccin anterior a un conjunto de instrucciones (figura 4.6 inciso c, columna notacin de Warnier modificada), entonces se estar comportando como un ciclo for (del lenguaje de programacin C).

Construccin bsica

Instruccin

Notacin de Warnier (ejemplos)


expresin instruccin 1 instruccin 2 *condicin

Notacin de Warnier modificada (ejemplos)


expresin instruccin 1 instruccin 2 condicin

a) Hacer instruccin 1 instruccin 2 mientras (condicin)

(r)

Repeticin

b) mientras (condicin ) instruccin 1 instruccin 2 fin mientras

expresin (r) *condicin instruccin 1 instruccin 2

expresin condicin instruccin 1 instruccin 2

c) Para (expresin) hasta (condicin)

condicin no existe sentence 1 sentence 2

instruccin 1 instruccin 2

Figura 4.6 Tabla que muestra las modificaciones hechas a la notacin de diseo de Warnier en la repeticin.

4.4 Algunas ventajas que ofrecen las gramticas


Antes de hablar de la gramtica que se utiliz para la construccin de la herramienta que se muestra en esta tesis, se mostrarn algunas ventajas significativas que ofrecen las gramticas a los diseadores de lenguajes y a los escritores de compiladores. Una gramtica da una especificacin sintctica precisa y fcil de entender de un lenguaje de programacin. A partir de algunas clases de gramticas se puede construir automticamente un analizador sintctico eficiente que determine si un programa fuente est sintcticamente bien formado. Otra ventaja es que el proceso de construccin del analizador sintctico puede revelar ambigedades sintcticas y otras construcciones difciles de analizar que, de otro modo podran pasar sin ser detectadas en la fase inicial de diseo de un lenguaje y de su compilador.

41

Captulo 4

Descripcin de la gramtica del GenCod

Una gramtica diseada adecuadamente imparte una estructura a un lenguaje de programacin til para la traduccin de programas fuente a cdigo objeto correcto y para la deteccin de errores. Los lenguajes evolucionan con el tiempo, adquiriendo nuevas construcciones y realizando tareas adicionales. Estas nuevas construcciones se pueden aadir con ms facilidad a un lenguaje cuando existe una aplicacin basada en una descripcin gramatical del lenguaje[Aho90].

4.4.1 Convencin de la notacin de la gramtica


Para evitar confusiones en la formalizacin de la gramtica que se explica en la siguiente seccin, se presenta a continuacin una convencin de notacin de las gramticas propuesta por Alfred V. Aho, [AHO90] la cual se ha ajustado a la formalizacin de la gramtica propuesta. 1. Son smbolos terminales: a) Las letras que se encuentren entre comillas . b) Los smbolos grficos. c) Las letras escritas en minsculas. 2. Son smbolos no terminales: a) Las letras escritas en maysculas. b) La letra S, que cuando aparece suele ser el smbolo inicial. c) Los smbolos grficos que se encuentran encerrados en un cuadro. 3. Las letras griegas minsculas, , por ejemplo, representan cadenas de smbolos gramaticales. Por tanto, una produccin genrica podra escribirse A , indicando que hay un solo no terminal A a la izquierda de la flecha (el lado izquierdo de la produccin) y una cadena de smbolos gramaticales a la derecha de la flecha (el lado derecho de la produccin). 4. Si A 1, A 2 ,..., A 1k son todas las producciones con A a la izquierda (se les llama producciones de A), se puede escribir A 1 2 ... k donde 1, 2,..., k se denominan alternativas de A. 5. A menos que se diga otra cosa, el lado izquierdo de la primera produccin es el smbolo inicial.

42

Captulo 4

Descripcin de la gramtica del GenCod

4.5 Descripcin de una gramtica


Muchos formalismos han sido propuestos para describir el analizador sintctico de los lenguajes visuales[CHA87]. Pero para la formalizacin de esta gramtica, se han utilizado los conceptos bsicos que utiliza Chang, quien comenta que las gramtica posicionales constituyen una extensin de las gramticas lineales [CHA95]. El sistema GenCod est soportado por la gramtica posicional independiente de contexto que a continuacin se describe. La gramtica se compone de una tupla de seis elementos. G = ( N, T, S, P, POS, PE ) donde: N = T = S = P = POS = PE = Smbolos no terminales. Smbolos terminales Smbolo inicial. Reglas de produccin. Relaciones binarias de identificadores. Es un evaluador pictogrfico que convierte formas de instrucciones en sus representaciones visuales.

4.5.1 Smbolos no terminales


Los smbolos no terminales, son variables sintcticas que denotan conjuntos de cadenas. La lista de smbolos en la figura 4.7 representan smbolos no terminales, stos definen conjuntos de cadenas que ayudan a generar el lenguaje generado por la gramtica. Tambin imponen una estructura jerrquica sobre el lenguaje que es til tanto para el anlisis sintctico como para la traduccin [AHO90]. N={<S>, <VAR>, <TXTC>, <CADVAR>, <PARAMVAR>, <ELSE>,<ELSEOP>, <SECUENCIAS>,
<INSTRUCCINES>, <CONDCICLO>, <SWITCH>, <DEFAULT>, <DECFUN>, <PRINTF>, <SCANF>, <LLAMADA>, <IFCOMP>, <WHILE>, <DOWHILE>, <FOR> } Figura 4.7 Conjunto de smbolos no terminales.

4.5.2 Smbolos terminales


Los terminales son smbolos bsicos con que se forman las cadenas. Componente lxico, es un sinnimo de terminal cuando se trata para gramticas de lenguajes de programacin[AHO90].
43

Captulo 4

Descripcin de la gramtica del GenCod

En la figura 4.8 se muestra la lista de smbolos terminales que conforman la notacin de diseo detallado, algunos de los smbolos terminales no son grficos, debido a que dentro de la notacin de diseo, existe tambin texto que sirve para complementar al diseo. Por ejemplo el nombre de la funcin, las condiciones, etc.

T={

, , , , , , , , Nombre funcin, Nombre variables, Cadena, Condicin, }


Figura 4.8 Conjunto de smbolos terminales.

Los smbolos terminales T mostrados anteriormente son todos aquellos que componen la notacin del diseo detallado. Algunos de estos smbolos varan su significado de acuerdo a la posicin en la que se encuentren y, a los atributos que tengan asociados. Por ejemplo, el smbolo sirve para representar la declaracin de una funcin y tambin representa la llamada a una funcin.

1 2 1 2

2 1 2

Este smbolo con el subndice 1 representa la declaracin de una funcin. Este smbolo con el subndice 2 representa la llamada de una funcin. Este smbolo con el subndice 1 representa una instruccin seleccin simple. Este smbolo con el subndice 2 representa una instruccin seleccin mltiple. Este smbolo con el subndice 1 representa a la instruccin seleccin simple negada. Este smbolo con el subndice 2 representa a la instruccin seleccin mltiple negada. Este smbolo con el subndice 1 representa a un ciclo iterativo sin condicin. Este smbolo con el subndice 2 representa a un ciclo iterativo condicional (MIENTRAS condicin). Este smbolo con el subndice 3 representa a un ciclo iterativo condicional (HACER MIENTRAS condicin ).

Figura 4.9 Tabla de smbolos grficos con su subndice asociado dependiendo del significado.

En la formalizacin de la gramtica G a todos los smbolos terminales grficos, se les ha asignado un subndice que indica, cul es su significado en cada una de las reglas de produccin ), estos (figura 4.9). Existen smbolos terminales grficos con un solo significado ( , , , smbolos tienen como subndice el nmero cero.

44

Captulo 4

Descripcin de la gramtica del GenCod

4.5.3 Smbolo inicial


En una gramtica, un no terminal es considerado como el smbolo inicial, y el conjunto de cadenas que representa es el lenguaje definido por la gramtica[Aho90]. En la gramtica G el smbolo inicial est representado por la letra S.

4.5.4 Reglas de produccin


Las producciones de una gramtica especifican cmo se pueden combinar los terminales y los no terminales para formar cadenas. Cada produccin consta de un no terminal seguido por una flecha, seguida por una cadena de smbolos no terminales y/o terminales[Aho90]. Repasando lo que se haba mencionado anteriormente: las gramticas posicionales son una extensin de las gramticas lineales, por lo tanto podemos ver un incremento de nuevas caractersticas a las reglas de produccin P. Enseguida se muestra la forma general de las reglas de produccin de una gramtica visual. A X1w1Rj1X2w2Rj2Xiwi... Rj nX n wn ,

Donde i = 1,2,3,4,....,n y A es un smbolo no terminal, cada Xiw puede ser un smbolo terminal o no terminal, el superndice i identifica a cada objeto (icono o texto) en las reglas de produccin. El subndice w es escrito despus de cada smbolo terminal grfico y es utilizado para identificar su significado (ver figura 4.9). Rj es una relacin compuesta de la forma: ( REL1h1,..., RELihi ,..., RELnhn ) con n >= 1

Cada RELihi denota un par (RELi,hi) donde RELi, es una relacin en POS denotando las relaciones posicionales que tiene un objeto con respecto a otro; hi muestra el objeto con el cul se tiene relacin, el valor de hi se obtiene de xj-k en donde j corresponde al valor secuencial que tiene el smbolo gramatical actual y k corresponde al valor secuencial que tiene el smbolo gramatical con el cual se relaciona[CHA95]. Un ejemplo de una regla de produccin del GenCod: DECFUNCION
1 1

ABAJO11 nombre funcin2 DERECHA22 <INSTRUCCIONES >3


4 0

ABAJO13

45

Captulo 4

Descripcin de la gramtica del GenCod

De esta regla de produccin la relacin que tiene el smbolo no terminal 1 <INSTRUCCIONES>3 se encuentra a la DERECHA con respecto al smbolo terminal 1, donde el superndice 1 en el smbolo terminal, representa el valor de posicin secuencial con respecto a la regla de produccin, por lo tanto la relacin con el smbolo <INSTRUCCIONES >3 estar de la forma Xk RELj-k Xj, en donde j=3 y k=1 porque el valor secuencial del smbolo con el cual se va a relacionar es 1, por lo tanto la relacin quedara DERECHA3-1. El smbolo representa a las reglas semnticas dentro del compilador espacial.

Tambin se debe mencionar que en cada regla de produccin se encuentra un smbolo no terminal de lado izquierdo y del lado derecho se encuentran las reglas que se derivan de ese smbolo y para que se pueda cumplir esa regla, tambin se deben cumplir las derivaciones que sta tenga. Estas derivaciones son el resultado de cada una de las relaciones cudruples que tiene cada uno de los smbolo terminales grficos, de las cuales se hablar en la siguiente seccin.

4.5.4.1 Relaciones cudruples de identificadores (POS).


Cada smbolo tiene relaciones cudruples con respecto a los dems identificadores, estas relaciones ubican al objeto dentro de un plano cartesiano de 2-D con respecto a otros objetos, estas relaciones son : ARRIBA, ABAJO, DERECHA e IZQUIERDA , cada una de estas relaciones son un par de coordenadas qu muestran, que es lo que se encuentra alrededor de un objeto, adems de indicar la posicin en la que se encuentra dentro de la pantalla. Estas relaciones es a lo que se refiere el trmino POS de la gramtica posicional. Por ejemplo: la regla de produccin descrita arriba puede verse en la siguiente figura 4.10, donde se muestran los smbolos terminales y no terminales junto con las relaciones que existen entre estos. Se debe aclarar que con esta figura slo se pretende ilustrar la secuencia de una regla de produccin.

DERECHA22 <INSTRUCCIONES> ABAJO13 ABAJO 1 nombre


1

Figura 4.10 Ejemplo de una regla de produccin.

46

Captulo 4

Descripcin de la gramtica del GenCod

4.5.4.1.1 Relaciones cudruples de los smbolos terminales de la gramtica


En la seccin anterior se describi en qu consisten las relaciones entre los smbolos gramaticales, en esta seccin se explicar cules son las relaciones que tiene cada smbolo terminal con respecto a los dems. En la seccin 4.5.2, se mencion que en esta gramtica existen smbolos terminales con diferente significado y para poder identificarlos se les aada un subndice. Para explicar las relaciones de los identificadores se va hacer uso de la tabla que se encuentra en esa seccin figura 4.9.

a) Declaracin de una funcin


El smbolo terminal asociado a la declaracin de una funcin es el siguiente: En la gramtica que se encuentra en el anexo 2 podemos ver que este smbolo es el primer smbolo terminal grfico con el que se inician las reglas de produccin, y es el smbolo del cual se derivan todos los dems smbolos terminales que forman la gramtica posicional; es decir este smbolo siempre va a constituir el primer nivel dentro de la notacin de diseo, por lo tanto sus relaciones con los dems objetos son: abajo e izquierda. Sus relaciones son: ABAJO : nombre de la funcin
2

IZQUIERDA:

0|

(1,2) |

(1,2)

(1,2,3)|

b) Llamada de una funcin


El smbolo terminal asociado a la llamada de una funcin es el siguiente: El smbolo terminal que representa la llamada de una funcin es un smbolo pasivo que como tal no ocasiona un nivel, por lo tanto en su relacin a la derecha no tiene ningn smbolo terminal asociado. Sus relaciones son: ARRIBA : 0 | 0 | 0| 0 | 1 ABAJO : el nombre de la funcin IZQUIERDA : 1 | (1,2) | (1,2) | (1,2,3)

47

Captulo 4

Descripcin de la gramtica del GenCod

c) Instruccin de salida
El smbolo terminal asociado a una instruccin de salida de una funcin es el siguiente: Este smbolo terminal tambin es un smbolo pasivo, pero a diferencia del smbolo anterior, ste tiene asociado a su derecha una cadena o una variable la cual forma parte de sus atributos asociados a este objeto (estos atributos sern explicados en la siguiente seccin). Sus relaciones son: ARRIBA ABAJO : :
0 2

| | |

0 0

| |

0| 0

|
0|

2 0

(1,2) |

(1,2)

(1,2,3)

DERECHA : cadena | variable IZQUIERDA :


1 (1,2) | (1,2)

(1,2,3)

d) Instruccin de entrada
El smbolo terminal asociado a una instruccin de entrada de una funcin es el siguiente: Las relaciones cudruples de este smbolo son las mismas que el smbolo anterior (instruccin de salida), la nica diferencia es que este smbolo slo tiene asociado a su derecha el nombre de una variable.

e) Instrucciones: condicional simple, mltiple y condicional negada


El smbolo terminal asociado a la instruccin condicional simple y mltiple es el siguiente: . El smbolo terminal asociado a la instruccin condicional negada es el siguiente: Estos smbolos terminales tienen diferente representacin (ver figura 4.9), pero sus relaciones cudruples son las mismas, por lo tanto se explicarn slo una vez para todos ellos. Sus relaciones son: ARRIBA ABAJO :
0

| |

| |

0|

0|

: condicin
0 0 0| 2

IZQUIERDA :

(1,2) |

(1,2)

(1,2,3)|

DERECHA : los objetos que pueden tener a la derecha son los mismos que tiene en su relacin izquierda.

f) Instrucciones: ciclos condicionales


48

Captulo 4

Descripcin de la gramtica del GenCod

El smbolo terminal asociado a los ciclos condicionales (mientras<condicion>, repetir mientras <condicin>, para hasta <condicin>) es el siguiente: . Estos smbolos terminales tienen diferente representacin (ver tabla 4.9), y sus relaciones cudruples son las mismas, que los smbolos anteriores

4.5.4.2 Atributos de los objetos


Otra cosa que hace diferentes a las gramticas visuales de las gramticas lineales son los atributos que tienen asociados los smbolos terminales grficos. Estos atributos proporcionan informacin adicional a cada smbolo. Los smbolos grficos que componen la gramtica G tienen algunos atributos en comn, estos son: * Tipo de instruccin. * Tipo de bitmaps. * Coordenadas arriba del objeto (x,y) * Coordenadas abajo del objeto (x,y) * Coordenadas derecha del objeto (x,y) * Coordenadas izquierda del objeto (x,y) * cadena Los atributos (tipo de instruccin y tipo de bitmaps) representan al nombre lgico de cada bitmap, y el cuarteto de coordenadas (x,y) representan las relaciones que tiene el smbolo con respecto a otros smbolos, adems de ubicar a cada smbolo dentro de un plano cartesiano de 2D. El atributo cadena sirve para almacenar informacin, la cual depende del tipo de instruccin al que represente, por ejemplo si se trata de la declaracin de una funcin, en esa cadena se va a almacenar el nombre de la funcin, en caso de que se trate de un ciclo en esa cadena se almacenar la condicin, etc. En seguida se muestran los atributos adicionales que tienen cada uno de los smbolos terminales grficos.

Atributos de la declaracin de una funcin:


* Tipo de la funcin * parmetros {tipo dato, nombre, tipo parmetro}

Atributos de la llamada de una funcin:


* parmetros {Tipo dato, nombre, tipo Parmetro}
49

Captulo 4

Descripcin de la gramtica del GenCod

Atributos de las instrucciones de entrada y salida:


* Variables (este smbolo puede tener asociado varias variables)

Atributo de las instrucciones condicional simple, mltiple, condicional negada y los ciclos:
* Condicin

4.5.5 Evaluador pictogrfico (PE)


PE es un evaluador pictogrfico donde se encuentran las reglas semnticas que se utilizarn dentro del compilador, aqu se definen las posiciones que deber tomar cada objeto de acuerdo a la relacin que tenga con los dems objetos, a diferencia de un compilador lineal donde se encuentran las instrucciones para generar el cdigo.

4.6 Estructura de datos que maneja el GenCod


Para la implantacin de la gramtica G fue necesario que sta estuviera respaldada por una estructura de datos que soportara los atributos y objetos que maneja dicha gramtica posicional. En la figura 4.11 se muestra un panorama de la estructura de datos que utiliza el GenCod, stas son: * un lista doblemente ligada en donde se almacenan los datos de las variables globales, como son: el nombre de las variables, su tipo de dato y el tiempo de vida de la variable. * una lista doblemente ligada la cual est apuntada por un arreglo. En esta lista se almacena la informacin de las variables locales (la informacin que se almacena es parecida a la lista de las variables globales). * un arreglo de 50 posiciones en donde se almacena la informacin de las diferentes funciones que componen todo el diseo detallado, adems de la informacin referente a cada ventana (que representa a cada funcin).

50

Captulo 4

Descripcin de la gramtica del GenCod

Variables globales

Objetos

Variables locales

. . .

Atributos de los objetos

Figura 4.11 Estructura de datos del GenCod.

* una lista doblemente ligada donde se almacena la informacin de los objetos que forman el diseo detallado, en cada uno de los nodos se almacenan los atributos de los objetos, como son: la posicin del objeto dentro de un espacio, el tipo de instruccin, el tipo de bitmap que va a utilizar y los atributos con los que cuente este objeto, adems puede contar con una lista doblemente ligada que contiene informacin asociada al objeto. En la siguiente seccin se hablar ms ampliamente de esta estructura. * una lista doblemente ligada que almacena la informacin de los atributos de los objetos esta lista va a estar apuntada por la lista de los objetos.

4.6.1 Estructura de datos de la lista de objetos

Apuntador hacia el nodo anterior

Nmero de

Nmero de

Coord. Coord.

Coord.

Coord. Coord. AbajoY Dcha X

Coord. Dcha Y

Coord. Izq X

ArribaX Arriba Y AbajoX

Coord. normal tipo funcin Cadena Izq . Y

Apuntador hacia el nodo siguiente

instruccin Bitmap

Apuntador hacia la lista de los atributos de los objetos

Figura 4.12 Modelo conceptual de los nodos de la lista de objetos

51

Captulo 4

Descripcin de la gramtica del GenCod

La estructura de los nodos de la lista de objetos (figura 4.12) se muestra a continuacin: typedef struct { int nInstruc; int nBmp; int DerechaX; int DerechaY; int IzquierdaX; int IzquierdaY; int ArribaX; int ArribaY ; ; int AbajoX; int AbajoY int ArribaModifX; int ArribaModifY; int NormalBmp; int Tipo; char Cadena[80]; struct OBJECTDATA *AptNext; struct OBJECTDATA *AptAnt; struct LISTAVARS *AptArgs; } donde:

Coordenadas

nInstruc = Es una variable de tipo entera que almacena el tipo de instruccin que representa ese
nodo, el valor que contenga se va a tomar de la siguiente tabla de comparacin (Figura 4.13). Instruccin
FUNCION DECLARA TXTC LLAMADA PRINTF SCANF IF SWITCH CASE ELSE WHILE DOWHILE FOR FIN

Identificador numrico 0 1 2 3 4 5 6 7 8 9 10 11 12 13

Figura 4.13 Tabla de identificadores para el nmero de instrucciones.

52

Captulo 4

Descripcin de la gramtica del GenCod

nBmp = Al igual que la variable anterior sta tambin es de tipo entera, y almacena el tipo del
bitmap que representa a la instruccin de la que se trate, es decir, almacena el nombre fsico del objeto, que en realidad tambin lleva el nmero del identificador de la tabla de la figura 4.13, ese nmero corresponde al ndice de un arreglo, en el cual se encuentran todos los nombres de los bitmaps. DerechaX, DerechaY, IzquierdaX, IzquierdaY, ArribaX, ArribaY, AbajoX, AbajoY, ArribaModifX, ArribaModifY (Coordenadas) = Almacenan las relaciones de cada objeto.

ArribaModifX, ArribaModifY = Estos dos campos almacenan las coordenadas modificadas del objeto cuando el objeto tiene que cambiar de posicin, esto ocurre cuando se trata de un objeto activo, que necesita volver a calcular sus coordenadas con respecto a los objetos que forman parte de l (Esto ser explicado ms adelante en la seccin de ajuste de objetos). NormalBmp = Este campo sirve como una bandera para realizar el borrado de algn objeto, el
campo siempre estar inicializado en 0, de otra manera indica que el objeto tiene que ser eliminado de la lista (la funcin de este campo se ver ms ampliamente en la seccin de borrado de objetos).

Tipo = En este campo se almacena el tipo de la funcin. El valor de este campo corresponde a
un indicador numrico; el cual es el ndice de un arreglo (TposDtos), en donde se encuentran todos los nombres de los tipos de datos. Como se mencion anteriormente en esta estructura se guarda la informacin de la declaracin de variables y de los argumentos (que se hablar posteriormente), por lo tanto en esta variable de tipo entero, se almacena el tipo de la variable, colocndose un indicador numrico que corresponde al ndice de un arreglo en donde se encuentran los nombres de los tipos de datos.

Cadena = En este campo se almacena distinta informacin, sta va a depender del tipo de instruccin que tenga el nodo. Por ejemplo si el nmero de la instruccin corresponde a una funcin, entonces en este campo se almacenar el nombre de la funcin, pero si la instruccin corresponde a un printf, entonces aqu se almacenar la cadena que se desea imprimir en pantalla.

4.6.2 Estructura de datos de la lista de argumentos


La estructura que se presenta en la figura 4.14, es la misma que se utiliza para almacenar la informacin de las variables locales, globales y los argumentos de los objetos.

53

Captulo 4

Descripcin de la gramtica del GenCod

Apuntador hacia el nodo anterior

Tipo

Variable

alcance

Apuntador hacia el nodo siguiente

Figura 4.14 Modelo conceptual de los nodos de la lista de variables

La estructura de los nodos de la lista de argumentos (figura 4.14) se muestra a continuacin: typedef struct{ int Tpo; char Variable[25]; char alcance[8]; struct LISTAVARS *AptNext; struct LISTAVARS *AptLast; } donde:

Tpo = En esta estructura se guarda la informacin de la declaracin de variables y de los


argumentos, por lo tanto en esta variable de tipo entero, se almacena el tipo de la variable, el cual corresponde al ndice del arreglo TposDtos.

Variable = En esta cadena se almacena el nombre de la variable, en caso de que se trate de un


argumento o parmetro, se guarda el nombre de ste.

alcance = En este campo se almacena el alcance que tiene una variable, por ejemplo se
almacena la palabra static, en caso de que se trate de un parmetro formal, se guarda el caracter del tipo del parmetro, por ejemplo si es por referencia se almacena un *, y si se trata de un parmetro real por referencia, se almacena el smbolo &.

4.6.3 Estructura de datos del arreglo de listas


La figura 4.15 muestra la estructura de una posicin del arreglo de listas, en el cual se almacena toda la informacin referente a la interfaz del sistema GenCod, adems de la informacin especfica de cada una de las funciones que existan dentro del diseo detallado.

54

Captulo 4

Descripcin de la gramtica del GenCod

Arr

Arr Bmp FunY LeftX TopY RightX BottomY Edo NumWin

Apuntador hacia las variables

Bmp Fun X

caduno caddos cadtres [120] [120] [120]

Apuntador hacia los objetos

Figura 4.15 Modelo conceptual de los nodos del arreglo de listas

Enseguida se muestra la declaracin de esta estructura. typedef struct{ struct OBJECTDATA *AptObjs; struct LISTAVARS *AptVars; int ArrBmpFunX; int ArrFuncionY; int LeftX; int TopY; int RightX; int BottomY; int Edo; int NumWin; char caduno[120]; char caddos[120]; char cadtres[120]; }

Coordenadas del rea cliente

Comentarios de la funcin

ArrBmpFunX, ArrFuncionY = Estas dos coordenadas almacenan la informacin de las


coordenadas de arriba de la posicin en la que se encuentra el bitmap de la funcin. LeftX, TopY, RightX, BottomY (Coordenadas del rea del cliente) = Almacenan las coordenadas del rea del cliente, en el momento de crear una nueva funcin.

Edo = Este campo almacena el estado de cada una de las funciones (el autmata que se
menciona, se encuentra ilustrado en la figura 4.16). Por ejemplo, en caso de que una funcin que se est ejecutando tenga que interrumpirse por el llamado de otra funcin, se debe almacenar el estado en el cual se encuentra, para que cuando vuelva a ser llamada contine en el estado en el cual se qued.

55

Captulo 4

Descripcin de la gramtica del GenCod

secuencial, bifurcacin, repeticin. Fin del diseo

Funcin

Figura 4.16 Autmata empleado por el GenCod.

NumWin = Esta variable guarda el nmero de la ventana que le corresponde a cada una de las
funciones. caduno, caddos, cadtres (Comentarios) = El sistema GenCod permite que el usuario documente cada una de sus funciones, para esto tiene una opcin para realizar estos comentarios, los cuales son almacenados en estas tres variables de tipo cadena.

4.7 Interfaz grfica implantada en el sistema GenCod


A continuacin se presenta una descripcin de los elementos que forman la interfaz del GenCond, explicando en algunos de los casos especiales el porqu de la eleccin de una tcnica en particular.

4.7.1. Interfaz con mltiples documentos (MDI)


Las interfaces con mltiples documentos permiten trabajar en una sola aplicacin con mltiples ventanas hijas que tendrn todas las mismas funciones pero diferentes atributos asociados. Tanto la ventana principal como las ventanas hijas cuentan con barra de ttulos, barras scroll, botones de maximizar, minimizar e iconos. Una de las diferencias entre la ventana principal y las ventanas hijas es que, las ventanas hijas solo pueden moverse dentro de la ventana principal (rea cliente), adems slo la ventana principal tiene men. El administrador de archivos (File Manager) para Windows en Windows 3.1 y el SysEdit de Windows 3.0 son ejemplos de MDIs [Farrell92]. En la figura 4.17 se muestra un ejemplo de un editor de un programa que utiliza los MDIs como interfaz.

56

Captulo 4

Descripcin de la gramtica del GenCod

barra de men de la ventana padre barra de ttulo de la ventana hija Programa Editor Archivo Editar Buscar Ventana

barra de ttulo de la ventana padre botones de la ventana padre botones de la ventana hija

<sin ttulo>

una de las muchas posibles ventanas

barra de desplazamiento de la ventana hija

espacio para otras ventanas hijas

marco de la ventana

Figura 4.17 Editor de un programa MDI

En el desarrollo de esta tesis fue necesario utilizar la tcnica de los MDIs con la finalidad de hacer ms prctico el GenCod, esto es, se necesitaba que existiera un mecanismo que permitiera crear mltiple ventanas para contener a las mltiples funciones que pueden integrar un programa escrito en lenguaje C. Se requera que cada ventana pudiera representar una funcin, y que por lo tanto, todas estas ventanas tuvieran la misma finalidad, pero cada una conteniendo una parte del diseo detallado del sistema.

4.7.2. Interfaz del GenCod


La interfaz del GenCod (figura 4.18) cuenta con un men y una paleta de botones, en donde se encuentran representados en forma grfica los smbolos de la notacin de diseo detallado de Warnier (estructuras de decisin, iteracin, llamadas a funciones, etc.). Tambin cuenta con una ventana de edicin donde se construye el diseo detallado especificado por el usuario. Como se mencion en la seccin anterior, en esta interfaz que emplea la tcnica de MDIs pueden existir tantas pantallas de edicin como funciones tenga el programa.
57

Captulo 4

Descripcin de la gramtica del GenCod

Cada una de estas ventanas de edicin posee las caractersticas bsicas de cualquier ventana en windows: minimizacin, maximizacin, colocar las ventanas en cascada, dividir las ventanas, etc. Esto da una amplia flexibilidad al sistema, en el sentido que un usuario puede tener siempre visible todas las funciones que integran su sistema.

Men
GenCod Archivo O pciones E ditar V entana Ayuda

Paleta de botones

main

Pide_datos

SearchMin num1

Nombre de la funcin

Diseo detallado

main
Pide_datos Opcion=s

num1>num2 num1=num2

num2

hola

num1>num2

Op

Figura 4.18 Interfaz del GenCod

El men del GenCod cuenta con las siguientes opciones: Archivo: esta opcin de men contiene las opciones Cargar, Salvar diseo y Salir del sistema. Opciones: contiene las opciones Generar cdigo con base en el diseo desarrollado, Ver Cdigo, Compilar y Ejecutar el archivo fuente creado y por ltimo, colocar Comentarios en cada una de las funciones que formen el diseo creado con la herramienta.

58

Captulo 4

Descripcin de la gramtica del GenCod

Editar: esta opcin cuenta con las opciones que es posible realizar sobre el diseo detallado como son: Cortar (borrar una parte del diseo) e Insertar (insertar instrucciones dentro de una seccin del diseo). Ventana: esta opcin del men permite colocar las ventanas hijas en cascada, u ordenarlas por ttulo, adems permite arreglar los iconos de las ventanas, adems de cerrar todas las ventanas que forman el sistema (Cerrar Todo). Ayuda: Esta opcin despliega una ventana de hipertexto en la cual se explica el funcionamiento del sistema.

59

CAPITULO 5

DESARROLLO DEL SISTEMA


En este captulo se describe la metodologa de solucin para el problema descrito en el captulo 2, detallando los algoritmos utilizados.

60

Captulo 5

Desarrollo del sistema

5.1 Desarrollo interno del diseo detallado


Utilizando el sistema GenCod el usuario tiene la opcin realizar un diseo nuevo o de leer un diseo hecho con anterioridad, si la opcin elegida es realizar uno nuevo, entonces se le presenta una caja de dilogo para proporcionar el nombre y el tipo de la funcin (figura 5.1), ste ltimo se elige de una lista de tipos escrita en espaol, por lo que el usuario slo deber elegir alguno de ellos.
G en C o d Arch iv o A yuda

Figura 5.1 Caja de dilogo que pide la informacin de una funcin del sistema GenCod.

Si el usuario elige dos o ms tipos de datos para una funcin, el sistema toma la ltima opcin que se haya elegido. Por otra parte, si un usuario escribe el nombre de una funcin con menos de tres letras al inicio, se le mostrar la figura 5.2. Esto forma parte del sistema de buenos hbitos de programacin que utiliza el GenCod, ya que en muchas ocasiones los nombres de las funciones no corresponden a su semntica, y colocar el nombre de un identificador con ms de tres letras al inicio fuerza al usuario a describir ms precisamente una funcin.

Figura 5.2 Caja de dilogo que impide dar nombres inapropiados a las funciones. 61

Captulo 5

Desarrollo del sistema

Si el usuario diera un nombre correcto a la funcin pero no hubiese elegido el tipo de la funcin se le presentar la caja de dilogo mostrada en la figura 5.3.

Figura 5.3 Caja de dilogo que fuerza a definir el tipo de una funcin

Una vez que ha escrito el nombre y elegido el tipo de la funcin se le presenta otra caja de dilogo (figura 5.4), en la cual se piden los parmetros de la funcin, si es que los tiene, de otra manera el usuario puede elegir la opcin de cancelar e inmediatamente iniciar con el desarrollo de su diseo detallado, del cual se hablar en la siguiente seccin.
GenCod Archivo Ayuda

Figura 5.4 Caja de dilogo de la declaracin de los parmetros de una funcin.

En caso de que la funcin tenga parmetros, entonces el usuario deber escribir el nombre de cada uno de estos en la caja de edicin correspondiente. Al igual que en la declaracin del nombre y tipo de la funcin, esta seccin fuerza al usuario a definir el tipo del parmetro s es que se ha omitido, as como tambin para escribir por lo menos tres letras al inicio del nombre de un parmetro (figura 5.5).
62

Captulo 5

Desarrollo del sistema

Figura 5.5 Cajas de dilogo para controlar el nombre y tipo de cada variable

Si el usuario ha determinado el nombre y tipo para una variable entonces deber definir si el parmetro ser pasado por valor o por referencia, en caso de no especificarse esta caracterstica se toma por omisin la opcin de paso de parmetro por valor. Una vez que se hayan definido el nombre, tipo y forma de paso de parmetro, el usuario debe presionar el botn de agregar que le dar la opcin de seguir declarando ms parmetros. Una vez que el usuario haya declarado todos los parmetros que contiene la funcin deber de presionar el botn de finalizar. De la misma manera se realiz la declaracin de las variables. Si el usuario ha determinado el nombre y tipo para una variable entonces deber definir si los parmetros sern pasados por valor o por referencia, en caso de no especificarse esta caracterstica se toma por default la opcin de paso por valor. Una vez que se haya definido el nombre, tipo y forma de paso de parmetros, entonces el usuario debe presionar el botn de Agregar que le dar la opcin de seguir declarando ms parmetros. Una vez que el usuario haya declarado los parmetros de la funcin deber presionar el botn de finalizar. De la misma manera se realiza la declaracin de las variables (en el anexo 5 se muestra brevemente la ejecucin del GenCod). Se debe mencionar que la entrada de datos que se realiza por teclado (por ejemplo: el nombre de la funcin, la declaracin de variables, la declaracin de parmetros, etc.), se analiza a travs de una gramtica muy parecida a la gramtica utilizada por el lenguaje de programacin C, por lo que se tiene un analizador lxico y sintctico, para este tipo de entradas. Se utilizaron unos autmatas de estados finitos, los cuales se muestran en el anexo 3.

5.1.1. Definicin dirigida por la sintaxis


En esta seccin se hablar de cmo se realiza internamente la insercin de los objetos en el sistema GenCod por medio de un anlisis sintctico, pero antes de eso definiremos el anlisis sintctico como: El proceso de determinar si una cadena de componentes lxicos puede ser generada por una gramtica [AHO90], en este caso los componentes sern los objetos, de los cuales se ha hablando a lo largo de este captulo.

63

Captulo 5

Desarrollo del sistema

Para este sistema se utiliz una definicin dirigida por sintaxis que es una generalizacin de una gramtica independiente del contexto en la que cada smbolo gramatical tiene un conjunto de atributos asociados, dividido en dos subconjuntos, llamados atributos sintetizados y atributos heredados de dicho smbolo gramatical. Un atributo puede representar cualquier cosa: una cadena, un nmero, un tipo, una posicin de memoria, etc. El valor de un atributo en un nodo de un rbol de anlisis sintctico se define mediante una regla semntica asociada a la produccin utilizada en dicho nodo, en este caso se utilizarn los atributos heredados, porque el valor de un atributo heredado se calcula a partir de los valores de los atributos en los hermanos (objetos pasivos) y el padre (objeto activo) [AHO90]. Una vez que se han hecho algunas definiciones, se pasar a explicar el anlisis sintctico, ste se realiza en varias ocasiones durante el funcionamiento del sistema: en el desarrollo de un diseo, en la insercin y eliminacin de objetos dentro del diseo. Paralelo a esto, se lleva a cabo la ubicacin de los objetos dentro del diseo, as como el ajuste de las coordenadas de los objetos activos. Estos dos ltimos aspectos forman parte del anlisis semntico de este sistema.

5.1.2 Anlisis en el desarrollo de un diseo y ubicacin de los objetos en la pantalla


El sistema GenCod est desarrollado de forma tal que no permita que un usuario cometa errores durante el desarrollo de su diseo, guindolo en todo el desarrollo de su diseo, es por esta razn que se realiza un anlisis mnimo de las expresiones gramaticales que el usuario va formando. Cada vez que un usuario realiza un diseo y elige un objeto para formar parte del diseo, se forma un expresin gramatical, y es entonces cuando se realiza el anlisis sobre esa expresin. El proceso que se realiza es el siguiente: 1. El objeto elegido por el usuario es insertado al final de la lista que contiene la informacin de los objetos. 2. Si el objeto insertado representa a las instrucciones else o default, se recorre la lista de nodos que contiene la informacin de los objetos de atrs hacia adelante, ya que debe haber sido insertada antes la instruccin if (condicional compuesta) o case (condicional mltiple), adems el GenCod verifica que la expresin condicional est finalizada, es decir, debe existir el smbolo fin correspondiente a la instruccin if, como se ilustra en la figura 5.6.

64

Captulo 5

Desarrollo del sistema

hola

fin de la instruccin: if

Figura 5.6 Ejemplo del anlisis en la insercin de un objeto en el diseo.

En caso contrario, el sistema GenCod manda un mensaje de error al diseador indicndole que no puede insertar ese objeto en el diseo, y en forma automtica es borrado de la lista de objetos, el nodo que representa a la instruccin else. Este ejemplo se muestra en la figura 5.7.

hola

Figura 5.7 Ejemplo de un error en el anlisis con la insercin del objeto else.

3. Si el objeto elegido corresponde al smbolo fin de todo el diseo, entonces no es posible insertar otro objeto, a menos que se elimine este objeto o se realice la opcin de insertar un objeto en una parte intermedia dentro del diseo.

65

Captulo 5

Desarrollo del sistema

4. Cada vez que se inserta un objeto activo en el diseo, se analiza el anidamiento de las funciones, es decir, se recorrer la lista de objetos para verificar que no existan ms de dos objetos activos anidados del mismo tipo, si esto ocurre entonces se despliega un mensaje de error indicndole al diseador que no puede insertar ese objeto, en la figura 5.8 se muestra un ejemplo de este tipo.

hola

Figura 5.8 Ejemplo de una funcin con tres condicionales simples anidadas.

5.1.2.1 Ubicacin del primer objeto en la pantalla


En cuanto a la ubicacin de los objetos dentro de la pantalla, para el primer objeto grfico del diseo que corresponde a la declaracin de una funcin, el sistema lo pone automticamente cuando el usuario elige la opcin de hacer un nuevo diseo, porque de este primer elemento se van a determinar las coordenadas de los dems objetos. Este objeto obtiene sus coordenadas del rea del cliente, y es colocado en la posicin Arriba (0,0): las dems coordenadas son calculadas de la siguiente manera: Las coordenadas de abajo se obtienen sumndole a las coordenadas de arriba en y el espacio del bitmap (SPCBMP), adems del espacio que ocupan los datos de la declaracin de la funcin (DATOS), que en este caso es el nombre de la funcin. Las coordenadas de la izquierda son (0,0), ya que este objeto no tiene ninguna relacin con otro objeto a su izquierda.

66

Captulo 5

Desarrollo del sistema

Las coordenadas de la derecha van a modificarse en su coordenada en x, estas coordenadas se obtienen de las coordenadas de arriba, a estas se les va a sumar en x un espacio horizontal (SPCHOR) este espacio es lo que separa un nivel de otro. La insercin de este objeto se encuentra ilustrado en la figura 5.9.

ArribaX=0 ArribaY=0

DerechaX=ArribaX+ SPCHOR DerechaY=0 AbajoX=ArribaX AbajoY=ArribaY+SPCBMP+DATOS


Figura 5.9 Coordenadas del primer objeto del diseo.

5.1.2.2 Ubicacin de un objeto en la pantalla despus de un objeto activo


Una vez que se ha insertado el primer objeto del diseo, las dems posiciones van a originarse de alguna manera de este primer objeto. Ahora bien cuando se inserta otro objeto, se realiza el anlisis, de la siguiente manera: primeramente, se analiza el objeto insertado, para comprobar si esta accin corresponde a las reglas de produccin de la gramtica, sino existe error, entonces se analiza cul es el elemento que lo antecede para obtener las coordenadas del objeto que se ha insertado, s el objeto anterior corresponde a un objeto activo, es decir, que el objeto insertado forme parte de un nuevo nivel, entonces las coordenadas de la izquierda del objeto van a estar dadas por las coordenadas de arriba del objeto anterior, esta representacin se ilustra en la figura 5.10 inciso a. Las coordenadas de arriba del objeto insertado sern las mismas que las coordenadas de la derecha del objeto anterior, solamente que a la coordenada en y del objeto insertado se le sumar un espacio (SPCentreBMPS), para que el objeto no quede hasta arriba de la pantalla (figura 5.10 inciso b).

67

Captulo 5

Desarrollo del sistema

Izq=Arriba(Obj.Anterior) X=0 Y=0

ArribaX=DerechaX(Obj.Anterior) ArribaY=DerechaY(Obj.Anterior) + SPCentreBMPS


Izq(X,Y)

X=0 Y=0 DchaX=ArribaX +SPCHOR DchaY=0

(a)

(b)

Figura 5.10 (a) Muestra la obtencin de las coordenadas de la izquierda de un objeto insertado despus de un objeto activo, (b) Muestra la obtencin de las coordenadas de arriba del mismo objeto.

Las coordenadas de abajo y derecha del objeto, se obtienen de las coordenadas (x,y) de arriba del mismo objeto. Las coordenadas de abajo son las mismas que las coordenadas de arriba, solamente que en la coordenada en y se le va a sumar el espacio que ocupa el bitmap. Las coordenadas de la derecha del objeto van a ser (0,0), ya que este objeto (el de la figura 5.11) que se est analizando es un objeto pasivo.

ArribaX=DerechaX(Obj.Anterior) ArribaY=DerechaY(Obj.Anterior) + SPCentreBM PS

Izq(X,Y)

AbajoX=ArribaX AbajoY=ArribaY+SPCBM P
Figura 5.11 Muestra la obtencin de las coordenadas abajo y derecha de un objeto insertado. 68

Captulo 5

Desarrollo del sistema

5.1.2.3 Ubicacin de un objeto en la pantalla despus de un objeto pasivo


Una vez analizado un objeto insertado en un nivel abstracto menor, se analizar la insercin de un objeto cuando ste se encuentre en el mismo nivel de abstraccin (figura 5.12), en este caso despus de analizar que el objeto elegido para su insercin corresponda a la gramtica posicional explicada anteriormente. Las coordenadas de la izquierda del objeto insertado sern las mismas que las coordenadas de la izquierda del objeto anterior y las coordenadas de arriba sern las coordenadas de abajo del objeto anterior, las coordenadas de abajo y derecha del objeto insertado sern calculadas como las coordenadas de los objetos explicados anteriormente.

Izquierda(x,y) Abajo(x,y)

Arriba(x,y) Izquierda(x,y) Abajo(x,y)


Figura 5.12 Muestra la insercin de un objeto en el mismo nivel de abstraccin.

5.1.2.4 Ubicacin de un objeto en la pantalla despus del objeto FIN


Ahora se mostrar cmo se realiza el anlisis de la expresin cuando se inserta un objeto el cual es antecedido por el objeto FIN, el objeto que ser insertado debe pertenecer a un nivel mayor de abstraccin. Se debe recordar que cada vez que un objeto se desea insertar en el diseo primero se realiza un anlisis para ver si el objeto se encuentra sintcticamente correcto; para entender mejor esto, en la siguiente seccin se mostrar un ejemplo de una expresin incorrecta. Retomando lo referente al anlisis, veremos la insercin del objeto de lectura (figura 5.13), que est representado por la figura del libro. La coordenada de arriba en x de este objeto estar dada por las coordenada de la izquierda en x del objeto anterior, y la coordenada de arriba en y est dada por las coordenada de abajo en y del objeto anterior y se le va a adicionar un pequeo espacio para separar a los objetos verticalmente.

69

Captulo 5

Desarrollo del sistema

Arriba(X,Y)

Izq(X,Y) Abajo(X,Y) ArribaX=Izquierda(Obj.anterior) ArribaY=AbajoY+SPCentreBMPS

Figura 5.13 Muestra la obtencin de las coordenadas de arriba de un objeto insertado en un nivel de abstraccin mayor.

Las coordenadas de la izquierda del objeto insertado estn dadas por las coordenadas de la izquierda del objeto que se encuentra arriba del objeto insertado (figura 5.14). Internamente sto se lleva a cabo recorriendo la lista doblemente ligada que almacena la informacin de los objetos hasta el final, como el penltimo objeto se trata de un objeto fin entonces se coloca un apuntador a ese nodo y se recorre la lista ahora de atrs hacia adelante, hasta encontrar el nodo al cual corresponde el nodo fin, para este ejemplo ese nodo representa a un if, se coloca otro apuntador en ese nodo para obtener las coordenadas que interesan. Las coordenadas de abajo y derecha se obtienen de la misma forma que las coordenadas de los objetos explicados anteriormente.

Dcha(X,Y) Izq(X,Y)

Izq(X,Y)

Figura 5.14 Muestra la obtencin de las coordenadas de la izquierda de un objeto insertado en un nivel de abstraccin mayor 70

Captulo 5

Desarrollo del sistema

5.1.2.5 Ubicacin del objeto activo: hacer-mientras <condicin> y hacer <condicin> mientras >
El anlisis de las instrucciones: hacer mientras <condicin> y hacer <instrucciones> mientras <condicin> , es diferente a las instrucciones que se han estado analizando y esto se debe a la insercin que tienen estas instrucciones cuando son elegidas por el usuario, cuando esto sucede las coordenadas de arriba del objeto van a ser dadas por las coordenadas de abajo del objeto anterior, adems se va a adicionar el espacio que ocupa el bitmap (SPCBMP), y un espacio horizontal (SPCHOR). Aunque este objeto ya sea while o dowhile, pertenece al conjunto de instrucciones de la funcin (para este ejemplo figura 5.15), se va a encontrar en una posicin un poco ms adelante que los dems objetos, esto se debe a la manera de cmo maneja la notacin de Warnier estas dos instrucciones.

SPCBMP Abajo(X,Y)

SPCHOR Arriba(X)= AbajoX (Obj. anterior) + SPCBMP + SPCHOR

Figura 5.15 Muestra la obtencin de las coordenadas de arriba del objeto while

Como se analiz anteriormente las coordenadas de arriba de estos dos objetos (while o dowhile), se obtienen de diferente manera que las coordenadas de los dems objetos activos que se han estado analizando, por lo tanto cuando un objeto es insertado despus que es finalizado el nivel de abstraccin que comprende la instruccin de un while o do while, las coordenadas de este objeto se obtienen de la siguiente manera: se analiza el penltimo objeto, si ste corresponde al objeto fin (figura 5.16), entonces se coloca un apuntador a este objeto y se recorre la lista de objetos de atrs hacia adelante, para encontrar cul es el objeto activo al cual corresponde este objeto fin, si se trata de un while o dowhile (apuntador 2), entonces se analiza cul es el objeto anterior, que puede ser: a) un objeto pasivo diferente al objeto fin, b) el objeto fin, c) un objeto activo

71

Captulo 5

Desarrollo del sistema

a p u n ta d o r 4

a p u n ta d o r 3 I z q ( X ,Y ) I z q ( X ,Y ) a p u n ta d o r 2

a p u n ta d o r 1

A rrib a X = iz q u ie rd a X

A b a j o ( X ,Y )

A r r i b a Y = A b a j o Y ( o b j e t o a n t e r io r ) I z q ( X ,Y )

Figura 5.16 Muestra la obtencin de las coordenadas de arriba e izquierda del objeto scanf.

a) un objeto pasivo diferente al objeto fin: en este caso las coordenadas del objeto insertado son calculadas de la misma manera que en las figuras 5.12 y 5.15. b) el objeto fin: cuando se trate del objeto fin que anteceda al objeto while o dowhile (apuntador 3, de la figura 5.10), se debe seguir recorriendo la lista que contiene la informacin de los objetos, para encontrar el objeto al cual corresponde el fin, para este ejemplo se trata del objeto que representa a la instruccin if(apuntador 4), entonces se coloca un apuntador y las coordenadas de la izquierda del objeto insertado, son las mismas que las coordenadas de la izquierda del objeto sealado por el apuntador nmero 4, del objeto sealado por el apuntador nmero 3 se toman las coordenadas de arriba en su coordenada en x del objeto insertado, las coordenadas de arriba en y del objeto insertado son las mismas que las coordenadas de abajo en y del objeto anterior a l (apuntador 1). En algunas de las figuras (5.16 y 5.17) se presentan puntos suspensivos entre un smbolo activo y el smbolo fin, stos indican que pueden existir n instrucciones en este espacio. c) un objeto activo: cuando se trate de un objeto activo, el que anteceda al objeto while o dowhile, (en este ejemplo mostrado en la figura 4.35, el smbolo que antecede al while es el que representa a la instruccin del if, que se encuentra sealado por el apuntador 3, en la figura 5.11, inciso b), las coordenadas de la izquierda del objeto insertado son las mismas que las coordenadas de la izquierda del objeto anterior a l (figura 5.17 inciso a), la coordenada de arriba en x est dada por la coordenada de la derecha del objeto activo que antecede al smbolo while y la coordenada de arriba en y est dada por la coordenada de abajo en y del smbolo anterior al smbolo insertado (figura 5.17 inciso b).

72

Captulo 5

Desarrollo del sistema

apuntador 2 apuntador 3

Dcha(X,Y) apuntador 1 Izq(X,Y) Abajo(X,Y) ArribaX = derecha X Izq(X,Y) ArribaY = Abajo Y(obj anterior)

(a)

(b)

Figura 5.17 (a) Muestra la obtencin de las coordenadas de la izquierda del objeto scanf (b) Muestra la obtencin de las coordenadas de arriba del objeto.

5.1.3 Insercin de objetos


En este punto se hablar de la insercin de los objetos, pero desde el punto de vista de las coordenadas que el usuario elija para insertar un objeto. El anlisis de las expresiones gramaticales formadas son evaluadas de la misma manera que cuando se lleva a cabo el desarrollo de un diseo (visto en la seccin anterior). Se debe hacer notar, que el diseo se va construyendo de arriba hacia abajo y de derecha a izquierda. A diferencia de la opcin de insertar que existe en el men, con la cual se puede hacer insertar un objeto en el lugar que indique el usuario, siempre y cuando sea correcta la expresin. Para poder entender mejor esto se tomar como ejemplo el diseo de la figura 5.17, en donde el conjunto de instrucciones del objeto activo if ( ) es terminado cuando se elige el smbolo fin ( ), por lo tanto cuando el usuario elija otro objeto, ste formar parte del objeto . Por lo tanto si el usuario desea insertar un objeto en el conjunto de instrucciones que activo forman el objeto activo if, deber elegir la opcin de insertar que se presenta en el men principal del sistema GenCod. Notando que slo se puede hacer la insercin de un objeto a la vez. La insercin de un objeto, entre dos objetos que ya han sido insertados anteriormente se debe realizar de la siguiente manera:

73

Captulo 5

Desarrollo del sistema

1. El usuario tiene que elegir del men principal la opcin de insertar. 2. Sealar con el mouse y presionar el botn derecho el lugar dnde se desea hacer la insercin. 3. Por ltimo se debe elegir de la paleta de botones la instruccin que desea insertar. Una vez que el usuario realiza los tres pasos que se mencionan arriba, internamente el sistema inserta el nodo de la instruccin seleccionada por el usuario, pero antes de hacer eso, verifica las coordenadas sealadas por el mouse, para realizar una comparacin de las coordenadas obtenidas, contra las coordenadas de los dems objetos, sto se hace analizando las coordenadas de un nodo y del siguiente para verificar si las coordenadas obtenidas por el mouse se encuentran entre estos dos nodos (ver figura 5.18) y poder hacer la insercin del nodo con la instruccin seleccionada. En caso de que la coordenada sealada por el mouse fuera invlida, se manda un mensaje de error al usuario.

N odo

N odo siguiente

C oordenadas (x,y)

Figura 5.18 Comparacin de las coordenadas obtenidas por el mouse contra los objetos que integran el diseo

Una vez que se ha insertado el nodo en la lista, se realiza el anlisis para ver si la insercin de este nuevo objeto cumple con las reglas gramaticales, de las cuales se ha estado hablando. La ubicacin de este objeto en el diseo slo se ver reflejado hasta que se realice el ajuste de las coordenadas de todos los dems objetos que componen el diseo, tomando como base el objeto activo que antecede al nuevo objeto insertado (las coordenadas se obtienen de la misma manera que en la seccin anterior). La insercin se puede llevar a cabo entre los niveles de abstraccin que existan en el diseo, en las siguientes secciones se hablar de cmo analiza el sistema GenCod, si una coordenada es vlida para realizar la insercin de un objeto en esa posicin.

74

Captulo 5

Desarrollo del sistema

5.1.3.1 Insercin entre niveles (de mayor a menor abstraccin)


Este tipo de insercin se lleva a cabo cuando se desea insertar despus de un objeto activo, ya que el objeto a insertar formar parte del conjunto de objetos que pertenecen a ese objeto activo. Aunque en la figura 5.19 se ve fcilmente en donde se desea hacer la insercin, no se debe perder de vista que todos los objetos grficos (y su posicin en el espacio) mostrados en el diseo se encuentran almacenados en una lista, por lo tanto se tiene que hacer un recorrido de estos objetos para saber en dnde se debe insertar el objeto.

N iv e l1

N iv e l2

Figura 5.19 Insercin de un objeto despus de una funcin.

Cuando se eligen las coordenadas en el rea de desarrollo del diseo para realizar la insercin, se debe analizar si stas son vlidas, es decir se debe verificar que en las coordenadas elegidas por el usuario puede insertarse un objeto de ese tipo, esto se realiza haciendo las siguientes comparaciones. (Cur.x >= XNext && Cur.x <= XNext+SPCBMP)&& (Cur.y >= YNext && Cur.y <= YNext+SPCBMP)|| (Cur.y < YNext && Cur.y > NodoAnt->ArribaY+ SPCBMP)) donde: Cur.x = corresponde a la coordenada en x que el usuario eligi para realizar la insercin. Cur.y = corresponde a la coordenada en y que el usuario eligi para realizar la insercin. XNext= corresponde a la coordenada en x del nodo siguiente. YNext= corresponde a la coordenada en y del nodo siguiente. SPCBMP = corresponde al espacio en pixeles que ocupa un bitmap. En la figura 5.19 se muestra la insercin de un objeto despus de la declaracin de una funcin y antes de un objeto pasivo (scanf), en este caso especfico la insercin se lleva a cabo con un objeto que se encuentra en un nivel de abstraccin ms grande que el objeto siguiente. En la figura 5.20 se mustra la comparacin de las coordenadas sealadas por el mouse (CurX), las cuales se deben encontrar entre las coordenadas x y x ms el espacio que ocupa el
75

Captulo 5

Desarrollo del sistema

bitmap (SPCBMP) del elemento siguiente al que se encuentra, en el nivel de abstraccin ms grande.

(Cur.y >= YNext && Cur.y <= YNext+32) XNext XNext +SPCBMP

CurX

Figura 5.20 Pantalla de comparacin de las coordenadas, para la insercin de un objeto.

Adems de cumplirse la comparacin anterior debe cumplirse la siguiente comparacin: las coordenadas sealadas por el mouse en y deben estar entre las coordenadas de y y las coordenadas de y+SPCBMP, pero puede ser que curY est fuera de las coordenadas de YNext, y tambin se considera una coordenada correcta. Ver figura 5.21.

(Cur.y >= YNext && Cur.y <= YNext+SPCBMP) YNext

CurY

YNext +SPCBMP

Figura 5.21 Pantalla de comparacin de las coordenadas para la insercin de un objeto.

76

Captulo 5

Desarrollo del sistema

5.1.3.2 Insercin entre niveles (de menor a mayor abstraccin)


La insercin entre un nivel de abstraccin menor a otro de mayor abstraccin (figura 5.22) se presenta cuando la insercin de un objeto se desea hacer despus del objeto que representa el fin de una instruccin de un objeto activo ( ).

N iv e l1

N iv e l2

N iv e l3

Figura 5.22 Insercin de un objeto, despus del objeto de terminacin de una instruccin.

Para este tipo de insercin (figura 5.23), las coordenadas seleccionadas por el usuario con el mouse(CurX) deben encontrarse en el espacio que ocupa el bitmap en x, es decir entre las coordenadas de x y x+SPCBMP del objeto que se est analizando o en esas mismas coordenadas, pero del objeto siguiente. La coordenada en y debe encontrarse en y+SPCBMP del objeto analizado (fin del nivel) y la coordenada en y del objeto siguiente. Si las coordenadas dadas por el usuario cumplen con estas restricciones, entonces se tienen unas coordenadas vlidas y se podr llevar a cabo la insercin de un objeto, siempre y cuando ste cumpla con las reglas de la notacin.

X +SPC BM P Y +SPCB M P

C urX Y N ext

CurY

X N ext N ivel1 CurX N ivel2

X N ext+SPCBM P N ivel3

Figura 5.23 Pantalla de comparacin de las coordenadas para la insercin de un objeto.

77

Captulo 5

Desarrollo del sistema

Se debe tener en cuenta que cuando se desea hacer la insercin despus del objeto fin de un nivel, se analiza que este fin no represente el final de una condicional compuesta, es decir no se podr llevar a cabo la insercin entre un if y un else, porque representa un error, aunque las coordenadas de insercin estn correctas, lo mismo ocurre cuando se tiene la instruccin que representa un condicional mltiple.

5.1.3.3 Insercin entre objetos (en el mismo nivel)

Este tipo de insercin se lleva a cabo cuando se desea insertar entre dos objetos pasivos, los cuales van a encontrarse en el mismo nivel

Nivel1

Nivel2

Figura 5.24 Pantalla de la posicin elegida por el mouse para realizar la insercin de un objeto.

En este tipo de insercin el anlisis de las coordenadas es ms simple (figura 5.25). Solamente se tiene que verificar que el objeto actual (scanf), est representado por un objeto pasivo y el objeto siguiente tambin.
C u rX X X +SPCBM P

Y +SPCBM P C u rY Y N ex t

Figura 5.25 Pantalla de comparacin de las coordenadas entre dos objetos que se encuentran en el mismo nivel.

78

Captulo 5

Desarrollo del sistema

Por lo tanto las coordenadas seleccionadas por el usuario en x deben encontrarse entre las coordenadas en x y x+SPCBMP del objeto analizado y las coordenadas en y deben encontrarse entre la coordenada de y+SPCBMP del objeto analizado y la coordenada de y del objeto siguiente. Una vez que se ha comprobado que las coordenadas dadas por el usuario cumplen con estas restricciones se puede llevar a cabo la insercin de un objeto, siempre y cuando ste sea vlido.

5.1.3.4 Insercin entre niveles (de mayor a menor abstraccin) cuando se desea hacer la insercin antes del objeto mientras condicin o hacer-mientras condicin
Este tipo de insercin se lleva a cabo cuando se desea insertar antes del objeto que representa a la instruccin MIENTRAS condicin o HACER MIENTRAS (condicin) (figura 5.26), debido a que cuando se inserta cualquiera de estas dos instrucciones se crea un nivel virtual (nivel 3 de la figura 5.26), que en realidad no es posible que vayan objetos en ese nivel, segn la notacin modificada de Warnier, pero el diseador pudiera ser que desee hacer una insercin de un objeto en ese espacio, entonces la comparacin de las coordenadas, se realiza de la siguiente manera:

N iv e l1

N iv e l2

N iv e l3

N iv e l4

Figura 5.26 Pantalla de la insercin entre niveles (de mayor a menor abstraccin).

a) como se haba mencionado antes, cuando se elige del men cualquiera de estas dos instrucciones, se crea un nivel intermedio entre la instruccin del tipo mientras condicin o hacer mientras condicin y la instruccin anterior a ella.

79

Captulo 5

Desarrollo del sistema

b) para analizar si la coordenada elegida por el usuario para realizar la insercin es vlida se sigue el mismo procedimiento que la insercin entre niveles. El anlisis de las coordenadas se encuentra ilustrado en la figura 5.27.
CurX

X+SPCBM P

Y+SPCBM P

CurY

XNext CurX

XNext+SPCBM P

Figura 5.27 Pantalla de comparacin de las coordenadas de la insercin entre niveles.

5.1.3.5 Ubicacin de los objetos despus de la insercin


Una vez analizada la manera de cmo se lleva a cabo la insercin internamente, en este punto se ver como afecta la insercin de un objeto activo en el diseo. En la figura 5.28 se ilustra un diseo ya terminado, esto se puede ver porque la funcin cuenta con el smbolo de terminacin en el nivel dos. En este ejemplo se muestra la insercin de un objeto activo (if), dentro del diseo.

N iv e l1

N iv e l2

Figura 5.28 Insercin de un objeto activo dentro de un diseo. 80

Captulo 5

Desarrollo del sistema

Una vez que se han verificado las coordenadas de la insercin y se ha visto que este objeto puede ir en esa posicin, se realiza la actualizacin de las coordenadas (el GenCod lo realiza automticamente) con el nuevo objeto ya insertado. En la figura 5.29 se muestra el diseo actualizado despus que se ha realizado la insercin del objeto activo (if), en donde se puede notar que se ha aumentado un nuevo nivel y todos los objetos hasta el fin del nivel pertenecen al nuevo objeto activo insertado, dando como resultado un diseo inconcluso porque el objeto que representa la declaracin de la funcin no cuenta con su objeto de terminacin.

N ivel1

N ivel2

N ivel3

Figura 5.29 Ubicacin del objeto activo ya insertado en el diseo.

5.1.4 Ajuste de los objetos en el diseo


El ajuste de los objetos consiste en ordenar los objetos activos (declaracin de una funcin, if, case, else, for, etc.), que se encuentren dentro del diseo detallado conforme se vaya desarrollando el diseo.

objeto activo 2 objeto activo 1

Figura 5.30 Ejemplo del ajuste de los objetos en el diseo detallado (externamente).

81

Captulo 5

Desarrollo del sistema

Por ejemplo en la figura 5.30 se encuentran sealados por una flecha dos objetos activos. Sus coordenadas en y dependen del nmero de objetos que formen parte de ellos. Por ejemplo el objeto activo 2 (condicional simple if), se encuentra colocado al centro (en su coordenada en y ) de los cinco objetos que pertenecen a l, El ajuste de las coordenadas en y, de los objetos activos se realiza internamente de la siguiente manera (ver figura 5.31):

a) Se recorre la lista de los objetos y cada vez que se encuentre un objeto activo, se crea un nodo temporal, el cual va a estar inicializado con las coordenadas de abajo del objeto activo. b) Se une el nodo temporal y el objeto activo al cual est asociado a travs de un apuntador. c) Cada vez que se encuentre un smbolo de terminacin de un conjunto de instrucciones de un objeto activo, se posiciona un apuntador al final de la lista de nodos temporales (apuntador 2 de la figura 5.31). d) Se calculan las coordenadas del objeto activo, comparando las coordenadas de abajo del objeto de terminacin (apuntador 1 de la figura 5.31), con las coordenadas del nodo temporal (apuntador 2), para determinar las coordenadas del objeto activo, stas se colocan en el campo del objeto ArribaModifX y ArribaModifY. e) El nodo de la lista temporal se elimina.

Apuntador 1

Lista de objetos

Lista temporal
Apuntador 2

Figura 5.31 Ajuste de los objetos en el diseo detallado (internamente)

82

Captulo 5

Desarrollo del sistema

5.1.4.1 Estructura de datos de la lista temporal (que realiza el ajuste de las coordenadas de los objetos activos)
La estructura de datos que utiliza la lista temporal que sirve para calcular las coordenadas de acomodo de los objetos activos en el diseo, se encuentra ilustrada en la figura 5.32.

A pun tador hacia un objeto activo de la lista de objeto s

A puntador hacia el nod o anterior

SpcA llB m ps
A puntador hacia el nodo siguiente

Figura 5.32 Modelo conceptual de los nodos de la lista temporal que sirve para realizar el ajuste de las coordenadas de objetos activos del diseo.

La estructura de los nodos de la lista mostrada en la figura anterior es la siguiente:

typedef struct{
int SpcAllBmps; struct CUENTABMPS *AptNext; struct CUENTABMPS *AptLast; struct OBJECTDATA *AptObjsBmp; }CUENTABMPS ; donde:

SpcAllBmps = es una variable de tipo entera en donde se almacenan las coordenadas de abajo en y del objeto activo que se est analizando.

5.1.5 Eliminacin de objetos


El sistema GenCod permite al usuario realizar la eliminacin de varios objetos dentro del diseo, para esto debe marcar con video inverso los objetos que desea eliminar figura 5.33.

83

Captulo 5

Desarrollo del sistema

Figura 5.33 Pantalla que muestra la eliminacin de objetos en el sistema GenCod.

Una vez colocado el video inverso se recorre la lista de los objetos analizando sus coordenadas para saber si stas se encuentran dentro del bloque marcado, si es as se le pone una marca al nodo del objeto y dependiendo del tipo de instruccin del que se trate va a afectar a los dems objetosl.

1. Objetos pasivos: En caso de que la eliminacin se trate de un objeto pasivo, como este tipo de objetos no implican a otros objetos simplemente son eliminados. 2. Objetos activos: for, else, dowhile, while En caso de que se trate de estas instrucciones se tiene que dejar un apuntador en esa posicin de la lista y recorrerla hacia adelante para analizar si esa instruccin tiene fin de nivel. En caso de que tenga, se va a eliminar tanto la instruccin como su fin de nivel. 3. Condicional (if ): Si la instruccin que se desea eliminar es un condicional simple, entonces solamente se elimina la instruccin del if y se sigue analizando para ver si sta cuenta con su fin de nivel para eliminarse tambin. En caso de ser condicional compuesta, se tiene que eliminar tambin el objeto de else y su fin de nivel (si lo tiene) todos los dems objetos que se encuentren dentro de estas instrucciones pasarn a formar parte del objeto activo anterior. Un ejemplo de esto se encuentra en la figura 5.34, en donde al eliminar el objeto activo if, se realiza automticamente la eliminacin del objeto fin del if y se elimina el objeto else con su fin respectivo .

84

Captulo 5

Desarrollo del sistema

Objeto marcado para la eliminacin

Objetos despus de la eliminacin

Nivel1

Nivel2

Nivel3 Nivel4

Nivel1

Nivel2

Nivel3

Figura 5.34 Pantalla que muestra la eliminacin del objeto if y la ubicacin de los objetos despus de la eliminacin.

4. Fin de la ejecucin de una instruccin: Cuando se desea hacer la eliminacin del objeto que representa la terminacin de una instruccin (para este ejemplo la terminacin de la instruccin if), se analiza que no exista el objeto que representa a la instruccin else enseguida del objeto de terminacin, si es as, entonces tambin debe eliminarse, junto con su terminacin de la instruccin. En la figura 5.35 se ilustra este ejemplo, en donde puede verse cmo al eliminar el objeto de terminacin, tambin es eliminado el objeto else y los objetos que pertenecan a l, pasan a formar parte de la instruccin if y el objeto de terminacin de la instruccin else va a ser la terminacin de la instruccin if.

O bjetom arcadopara laelim inacin

O bjetos despus delaelim inacin

N ivel1

N ivel2

ivel4 N ivel3 N

N ivel1

N ivel2

N ivel3

Figura 5.35 la eliminacin del objeto fin de una instruccin y la ubicacin de los objetos 85

Captulo 5

Desarrollo del sistema

despus de la eliminacin.

5.1.6 Generador automtico de cdigo


Como se ha estado mencionando a lo largo de esta tesis, el GenCod es una herramienta visual que permite crear diseos detallados. Internamente el sistema (GenCod) almacena estos diseos en una estructura de datos(analizada en la seccin 4.6), toda la informacin almacenada en esta estructura de datos, sirve para generar automticamente cdigo estructurado en el lenguaje de programacin C. El sistema GenCod valida la informacin que es introducida por el diseador al sistema, (seccin 5.1) a travs de autmatas que utilizan la gramtica del lenguaje de programacin C, eliminando una fuente potencial de error. Esto no slo asegura que el cdigo producido sea sintcticamente correcto sino que adems corresponda al diseo detallado. Aunque ste no es el objetivo principal de esta tesis, s constituye un gran beneficio para el diseador ya que la herramienta sirve como un puente entre la fase de diseo detallado y la fase de pruebas (figura 5.36), sin tener que pasar por la etapa de implantacin.

PRUEBAS

DISEO DETALLADO

in ntac eme l p im

Figura 5.36 El GenCod como un puente entre la etapa de diseo detallado y pruebas.

5.1.6.1 Manejo de la estructura de datos para la generacin de cdigo


La generacin de cdigo se realiza con la informacin contenida en las estructuras de datos que utiliza el GenCod, las cuales fueron explicadas en la seccin 4.6.
86

Captulo 5

Desarrollo del sistema

El cdigo generado se almacena en un archivo de texto, el cual tiene una extensin .C, este cdigo se forma de la siguiente manera:

Se colocan las bibliotecas bsicas que utiliza el lenguaje de programacin C. Se escriben todas las variables globales que existen en el diseo detallado, esto se hace recorriendo cada uno de los nodos de la lista que almacena la informacin de las variables globales (figura 5.37 nmero 1). Se escriben los prototipos de todas las funciones que existan en el diseo. Una vez escritas las variables globales, se comienza a recorrer el arreglo en donde se almacena la informacin de cada una de las funciones que forman el diseo(figura 5.37 nmero 2), adems de los comentarios de cada una de las funciones. En cada una de las posiciones del arreglo, se coloca un apuntador al primer nodo de la lista de objetos(figura 5.37 nmero 3), para obtener la informacin de la funcin, tal como el nombre y tipo de la funcin, para escribir los prototipos de las funciones.


Variables globales

Objetos

Variables locales

. . .


Atributos de los objetos

Figura 5.37 Orden secuencial en el cual se recorren las estructuras de datos en el GenCod para la generacin de cdigo.

Los parmetros de la funcin se obtienen recorriendo la lista (figura 5.37, nmero 4), que se encuentra apuntada por el nodo que contiene la informacin de la funcin y cada uno de los nodos de esta lista, va a contener la informacin de la declaracin de un parmetro.
87

Captulo 5

Desarrollo del sistema

Despus de haber escrito los parmetros de una funcin (si los tiene), se escriben las variables locales a la funcin, recorriendo la lista donde se encuentra la informacin de estas variables (figura 5.37, nmero 5), aqu al igual que las dems listas, cada uno de los nodos contiene la informacin de la declaracin de una variable. Al terminar de recorrer la lista de las variables locales a una funcin, se contina recorriendo la lista de los objetos, empezando con el nodo siguiente al nodo que representa la declaracin de una funcin (figura 5.37, nmero 6). Dependiendo la instruccin que se trate, va a tener una lista asociada de atributos, por ejemplo en el caso de un printf, puede contener la informacin de una variable y una cadena a desplegar. Cada vez que se encuentre un nodo que represente la instruccin de fin de una instruccin ( ), se escribe en el archivo del cdigo fuente la llave }.
De esta manera se sigue generando el cdigo de cada una de las instrucciones que represente cada uno de los nodos, hasta terminar de recorrer la lista de los objetos. Despus se contina con la siguiente posicin del arreglo, realizando los mismos pasos para todas las posiciones del arreglo que contengan informacin. El cdigo generado se almacena en un archivo fuente, que puede ser visualizado mediante la opcin del men ver cdigo, de esta manera se presenta el cdigo en otra ventana, en donde el usuario puede analizarlo y ejecutarlo si lo desea. En la figura 5.38 se muestra la generacin de cdigo del diseo detallado de dos funciones.

Figura 5.38 Interfaz del GenCod que muestra la generacin de cdigo de dos funciones.

88

Captulo 5

Desarrollo del sistema

5.1.7 Arquitectura del archivo de diseo


El sistema GenCod tiene la opcin de salvar el diseo detallado en un disco, esto lo hace almacenando la informacin contenida en las estructuras de datos a un archivo(figura 4.39). La informacin de las estructuras de datos manejadas por el GenCod se convierten en cadenas, las cuales son insertadas en un archivo de texto para su almacenamiento, la extensin que tienen los archivos que almacenan el diseo es .dis.

Figura 5.39 Almacenamiento del archivo de diseo detallado del GenCod.

El orden en que es almacenada la informacin del diseo en el archivo de texto es el siguiente (ver figura 5.40, en donde los nombres de los bloques mostrados en esta figura representan las palabras claves que identifican el tipo de informacin que se est almacenando):

a) Se almacenan primero los datos globales en el archivo, tales como el tope del arreglo. b) Despus almacena la informacin de las variables globales, si es que existen en el diseo. c) Una vez almacenada la informacin de las variables globales, se van a tener n bloques de informacin, en donde cada uno de los bloques va a contener la informacin de las funciones declaradas dentro del diseo. Estos bloques contienen la declaracin de las variables locales (si existen), la declaracin de todos los objetos que pertenecen a la funcin de la cual se est hablando, as como la declaracin de los argumentos o parmetros de los objetos.
Un ejemplo de este archivo se encuentra en el anexo 4 al final de esta tesis.
89

Captulo 5

Desarrollo del sistema

DTOSGLOBALES VARGLOBALES DECFUNCION VARLOCALES OBJSDTOS ARGDTOS

se almacena el tope del arreglo principal Se almacena la informacin de las variables globales Se almacena la informacin de la funcin Se almacena la informacin de las variables locales Se almacena la informacin de los objetos Se almacena la informacin de los argumentos de los objetos

Figura 5.40 Arquitectura del archivo de diseo

5.1.8 Herramientas del GenCod 5.1.8.1 Navegacin entre funciones


El sistema GenCod incluye un sistema de navegacin entre las funciones, que permite a un usuario invocar a una funcin dando un clic con el mouse en el icono que represente las llamada a esa funcin, de esta forma, el usuario puede observar el cuerpo de la funcin invocada (figura 5.41).
G enC od Archivo O pciones E ditar V entana A y u da

m ain SearchM in

Pide_datos
num 1 > num 2 Search S earc hM in m ain num 1 < num 2 num 1
P ide_datos

num 1>num 2 Pide_D atos O pcion= s n um 1=num 2

num 2

hola

num 1>num 2

Op

Figura 5.41 Navegacin entre las funciones de diseo.

90

Captulo 5

Desarrollo del sistema

Este mecanismo de navegacin es una de las ventajas del uso de los MDIs para la programacin de ventanas.

5.1.8.2 Ayudas por hipertexto


Esta herramienta cuenta con un mecanismo de ayuda por hipertexto, similar a la utilizada por paquetes comerciales. Una vez que el usuario activa el hipertexto puede navegar entre tpicos que explican el funcionamiento del GenCod. Esta ayuda por hipertexto puede ser comparada con un manual de usuario de la herramienta.

91

CAPITULO 6

DISEO DE UN PLAN EXPERIMENTAL


En este captulo se establece la forma experimental con el cual se evalu el desempeo del GenCod, definiendo variables dependientes e independientes y sealando los factores que fueron evaluados.

92

Captulo 6

Diseo de un plan experimental

Antes de entrar de lleno a la descripcin de las pruebas realizadas se debe de aclarar que estas no tuvieron el rigor suficiente como para ser tomadas como una conclusin definitiva, de tal forma que sera necesario realizar una investigacin con muchos casos ms de los aqu analizados y con un tiempo de experimentacin mayor, sin embargo estas pruebas pueden servir como un indicativo de una posible tendencia al utilizar el GenCod, cabe mencionar que el desarrollo de pruebas exahustivas no fue el objetivo principal de este tema de tesis, sino el uso de una gramtica visual para la generacin de cdigo.

6.1 Muestreo
Los sujetos que se eligieron para este estudio fueron 5 desarrolladores de sistemas de distintas instituciones (C.B.T.i.s 136, Universidad Autnoma de Morelos, cenidet, IIE) y de distinto nivel acadmico (medio, profesional y maestra). El estudio o prueba consisti en medir el tiempo requerido para realizar un programa de software con la herramienta o sin ella, de tal forma que cada persona pudiese experimentar las dos formas de desarrollo. Se decidi no hacer una comparacin midiendo en forma paralela el tiempo de dos desarrolladores con la utilizacin de la herramienta o sin ella, debido a que esta forma de evaluacin ocasionara que el experimento estuviera afectado por demasiados factores externos. Por ejemplo, la experiencia de los programadores en el lenguaje C, la capacidad de abstraccin, razonamiento lgico, y otros factores de los sujetos a estudio, etc. La alternativa elegida fue permitir que un sujeto desarrollara un programa sin la herramienta, para posteriormente desarrollar un sistema de igual complejidad utilizando el GenCod. Se pens en no utilizar el mismo programa para ambas pruebas porque se dara el caso de que al utilizar la herramienta el sujeto ya estara condicionado por el experimento previo. El primer paso para evaluar el desempeo del GenCod fue determinar tanto las variables dependientes como independientes que afectan el desempeo del sistema. a) VARIABLE DEPENDIENTE: la dimensin tecnolgica a medir en el GenCod es el tiempo de desarrollo de un sistema en relacin al tamao del mismo. b) VARIABLES INDEPENDIENTES: las variables independientes son los dos mtodos de desarrollo de sistemas a medir, el tradicional (sin utilizar generadores de cdigo) y el uso del GenCod.

93

Captulo 6

Diseo de un plan experimental

6.2 Variables dependientes


A continuacin se describe cada uno de los factores que se utilizaron para medir el desempeo del sistema. Tiempo de desarrollo: para este caso de estudio se consider como el tiempo que requiere un sujeto para elaborar el diseo conceptual de un problema para posteriormente realizar el diseo detallado del mismo, y por ltimo traducir la especificacin de diseo a un lenguaje de programacin.

6.3 Variables independientes


Como ya se mencion anteriormente las variables independientes consideradas para este plan experimental son: a)el mtodo tradicional de desarrollo que consiste en elaborar todas las etapas en forma artesanal y b)el uso de herramientas automticas para generar cdigo.

6.4 Hiptesis a comprobar


El diseo del plan experimental tiene como objetivo comprobar o refutar algunas de las hiptesis que se plantearon al iniciar este trabajo de tesis: El uso del GenCod permite reducir en aproximadamente una tercera parte el tiempo normal de desarrollo de un sistema de software utilizando el mtodo tradicional de desarrollo. El tiempo de desarrollo de un sistema utilizando el GenCod se reduce en forma ms significativa a medida que el tamao de los programas aumenta.

6.5 Plan de evaluacin


Una vez diseado el plan de pruebas, se trabaj con la muestra seleccionada para obtener datos relevantes, los cuales fueron relacionados estadsticamente para observar el comportamiento entre las formas de creacin de sistemas: el tradicional y el basado en el GenCod. El concepto de dispersin resulta importante porque puede darse el caso de que poblaciones con la misma media aritmtica (valor central) puedan tener distinto nivel de dispersin. Una de las medidas de dispersin utilizadas es el Rango, que es la diferencia entre el valor mximo y el mnimo de un grupo de datos. La frmula del Rango es R = Mmax - Mmin.

94

Captulo 6

Diseo de un plan experimental

Con la finalidad de obtener datos ms exactos acerca de la dispersin de los datos entre s, es necesario utilizar valores como la desviacin media, la varianza y la desviacin estndar. Estas medidas de dispersin fueron elegidas porque muestran qu tanto estn dispersos los datos obtenidos contra la media, lo cual da una idea del grado de error presente en cada una de las formas de creacin de sistemas. A continuacin se describe el significado de cada uno de estos valores y las frmulas que las calculan:

Media aritmtica: Es la suma de los valores dividida por el nmero de estos.

X=

N Xi
i =1

Desviacin media: Es el promedio del valor absoluto de las desviaciones de los datos respecto
a la media.
N

DM =

| X X|
i i=1

Varianza: es el promedio de los cuadrados de las desviaciones.

S2 = i =1

( Xi X ) N

Desviacin estndar: es la raz cuadrada de la varianza.

S=

i =1

( Xi X ) N

95

Captulo 6

Diseo de un plan experimental

6.6 Anlisis de resultados


Primeramente se calculan los valores de dispersin para el tiempo de desarrollo con programas de 130 lneas de cdigo. La tabla 6.1 muestra los datos relativos al desarrollo de un sistema de cdigo sin utilizar la herramienta.
Persona 1 2 3 4 5 Cuadrados de los desvos (x - X)2 210 81.4 81.4 6625.96 193 64.4 64.4 4147.36 83 -45.6 45.6 2079.36 76 -52.6 52.6 2766.76 81 -47.6 47.6 2265.76 SUMA 291.6 17885.2 Tabla 6.1 Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema sin utilizar la herramienta Tiempo (minutos) Desvo x-X Valor absoluto |x - X|

X=
DM =

643 = 128.6 5
291.6 = 58.32 5

S2 =

178852 . = 357704 . 5

S = 3577.04 = 5980 .
Posteriormente se calculan los valores relativos al desarrollo de un sistema de cdigo utilizando la herramienta (tabla 6.2).
Cuadrados de los desvos (x - X)2 145 53.4 53.4 2851.56 131 39.4 39.4 1552.36 63 -28.6 28.6 817.96 58 33.6 33.6 1128.96 61 30.6 30.6 936.36 SUMA 185.6 7287.2 Tabla 6.2 Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema utilizando la herramienta Tiempo (minutos) Desvo x-X Valor absoluto |x - X|

Persona 1 2 3 4 5

96

Captulo 6

Diseo de un plan experimental

X =

458 = 91.6 5

DM =

185.6 = 37.12 5

S2 =

72872 . = 1457.44 5

S = 1457.44 = 3817 .

Posteriormente se calculan los valores de dispersin para el desarrollo de un sistema de 350 lneas de cdigo sin utilizar la herramienta.
Persona 1 2 3 4 5 Cuadrados de los desvos (x - X)2 615 232.6 232.6 54102.76 597 214.6 214.6 46053.16 245 -137.4 137.4 18878.76 217 -165.4 165.4 27357.16 238 -144.4 144.4 20851.36 SUMA 894.4 167243.2 Tabla 6.3 Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema sin utilizar la herramienta Tiempo (minutos) Desvo x-X Valor absoluto |x - X|

X=

1912 = 382.4 5

DM =

894.4 = 178.88 5

S2 =

. 1672432 = 3344864 . 5

S = 33448.64 = 18288 .

97

Captulo 6

Diseo de un plan experimental

Por ltimo se calculan los valores relativos al desarrollo de un sistema de 350 lneas utilizando el GenCod.
Cuadrados de los desvos (x - X)2 407 176.6 176.6 31187.56 348 117.6 117.6 13829.76 137 -93.4 93.4 8723.56 118 -112.4 112.4 12633.76 142 -88.4 88.4 7814.56 SUMA 588.4 74189.2 Tabla 6.4 Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema utilizando la herramienta Tiempo (minutos) Desvo x-X Valor absoluto |x - X|

Persona 1 2 3 4 5

X= DM =

1152 = 230.4 5 588.4 = 117.68 5

S2 =

741892 . = 1483784 . 5

S = 1483784 . = 12181 .
En resumen, de las cuatro tablas se obtiene la siguiente comparacin:
concepto Desarrollo de un Desarrollo de un Desarrollo de un Desarrollo de un sistema de 130 lneas sistema de 350 lneas sistema de 350 lneas sistema de 130 lneas de cdigo sin de cdigo utilizando de cdigo sin utilizar de cdigo utilizando el GenCod el GenCod el GenCod utilizar el GenCod 128.6 91.6 382.4 230.4 promedio en las 117.68 14837.84 121.81

Tiempo invertido pruebas. Desviacin media de 58.32 37.12 178.88 los datos. Varianza de los datos 3577.04 1457.44 33448.64 Desviacin estndar 59.80 38.17 182.88 de los datos Tabla 6.5 Resumen comparativo del tiempo utilizado en las cuatro pruebas.

98

Captulo 6

Diseo de un plan experimental

Los resultados de las pruebas permitieron validar en pequea escala las hiptesis planteadas al inicio de este tema de tesis ya que el porcentaje de reduccin de tiempo al utilizar el GenCod fue del 28.43% en sistemas de 150 lneas de cdigo, y de 39.79% en sistemas de alrededor de 350 lneas de cdigo, lo cual representa una disminucin considerable de tiempo. Los resultados obtenidos permitieron comprobar la hiptesis de que mientras ms grande sea el sistema a desarrollar, mayor ser el tiempo que se ahorre en relacin a la forma tradicional de desarrollo de sistemas, ya que el control de sistemas se vuelve ms difcil. Se debe recordar que los resultados obtenidos no pueden ser tomados como una conclusin definitiva de la relacin entre el uso del GenCod y el ahorro de tiempo, sino como un indicativo de la manera cmo se comporta el GenCod con una pequea muestra, de tal forma que se hace necesario un plan experimental ms completo.

99

Captulo 7

Comentarios finales

CAPITULO 7

COMENTARIOS FINALES
En este captulo se describen los alcances logrados en este proyecto de tesis. Se proponen algunas recomendaciones a ste, se da un panorama de los trabajos futuros relacionados con el tema de la programacin visual, y por ltimo se expresan algunos comentarios finales.

100

Captulo 7

Comentarios finales

Con base en el anlisis bibliogrfico realizado se lleg a las siguientes conclusiones: El uso de smbolos de grficos para representar una idea intenta que una persona pueda lograr un salto entre la visualizacin de un objeto y su representacin mental, omitiendo en lo posible el proceso cognoscitivo que se realiza al tratar de comprender el significado de una idea. Con base en la hiptesis anterior, se asegura que el uso de la programacin visual puede facilitar el desarrollo del diseo de un sistema, ya que el uso de grficos facilita la visualizacin del contenido de un programa al estar organizado (en la notacin de Warnier) en niveles de abstraccin. La utilizacin de herramientas que eliminen la etapa de codificacin de un sistema, auxilian a los desarrolladores a crear diseos sin que esto represente una perdida de tiempo o esfuerzo, y por lo tanto, no se vea al diseo como una actividad demasiado tediosa.

7.1 Alcances logrados


En lo general, el objetivo global de este trabajo de tesis fue alcanzado: El desarrollo de un sistema que permitiera a un usuario realizar en forma visual el diseo detallado de un sistema, y que como resultado de la creacin del diseo obtener el cdigo del mismo en el lenguaje de programacin C, logrando con esto una reduccin en los tiempos de desarrollo de sistemas computacionales. Los resultados especficos alcanzados, fueron los siguientes:

Un Analizador de las relaciones espaciales entre los objetos que forman el diseo:
Desarrollo de una gramtica que refleje las relaciones permitidas y no permitidas entre cada objeto. La gramtica desarrollada es independiente de contexto y puede ser considerada como visual porque al menos alguno de los smbolo terminales de la gramtica son objetos grficos. Desarrollo de un analizador que valida que las construcciones realizadas por un usuario sean correctas de acuerdo a la gramtica definida. Desarrollo de un gramtica y sus correspondientes analizadores (lxico y sintctico) para validar las entradas por teclado del usuario.

101

Captulo 7

Comentarios finales

Un ambiente de creacin del diseo detallado de un sistema, que incluye las siguientes funciones:
Desarrollo de los algoritmos para insertar un objeto en alguna posicin del diseo detallado, lo cual implic la construccin de un analizador que garantice la validez semntica de la insercin del objeto. Desarrollo de algoritmos para eliminar un objeto en el diseo, lo que implic realizar un anlisis espacial que confirmara que eliminar uno o varios objetos no traer como resultado un diseo semnticamente incorrecto. Desarrollo de algoritmos para reacomodar los objetos del diseo en la pantalla, ya que al hacer una insercin o eliminacin las coordenadas de los objetos deben modificarse para que puedan reflejar los niveles de abstraccin de los diagramas Warnier-orr.

7.2 Mejoras y ampliaciones a este trabajo


A travs del desarrollo e implantacin del generador de cdigo fueron apareciendo nuevos enfoques, extensiones y mejoras al mismo. Este proyecto como un primer intento de solucionar uno de los problemas asociados con el uso de la programacin enfocada a la etapa de diseo detallado tiene sus limitaciones y alcances. Para mejorarlo se proponen como trabajos futuros los siguientes: Desarrollo e implantacin de un mecanismo que permita la generacin de cdigo no slo en lenguaje C, sino en cualquier lenguaje de programacin que soporte la programacin estructurada. Extensin de la gramtica visual para que pueda considerar no slo la programacin estructurada, sino tambin la modular, adems la gramtica debe extenderse para que abarque todas las construcciones que permite el lenguaje C y que no fueron incluidas en este primer prototipo (uniones, interrupciones, manejo de apuntadores, etc). Crear iconos para agrupar instrucciones semejantes, por ejemplo, incluir iconos que representen las operaciones de Abrir y Guardar un diseo detallado.

102

Captulo 7

Comentarios finales

7.3 Trabajos futuros


Es importante hacer notar que el proyecto desarrollado en esta tesis es el inicio de un ambiente integrado de desarrollo de software que pretende automatizar el mayor nmero de acciones involucradas en el ciclo de vida del software, por lo que este trabajo puede ser el origen de una serie de proyectos afines: Desarrollo de un mecanismo que permita tomar el cdigo fuente de un programa escrito en lenguaje C y lo transforme a la notacin de Warnier para poder ser modificado en forma visual. Este mecanismo deber generar el cdigo intermedio que se produce al crear un diseo detallado con el GenCod, de tal forma que este cdigo intermedio sea interpretado y desplegado en forma grfica. Desarrollo de un generador de lenguajes visuales que cuente con un ambiente que permita generar la gramtica de un lenguaje visual (smbolos iniciales, terminales, no terminales, y reglas de produccin), y que posteriormente pueda crear en forma automtica el compilador que realice el anlisis semntico de las construcciones que realice el usuario. Desarrollo de un lenguaje visual para la especificacin de requerimientos de una aplicacin y que con base en sta se genere el diseo detallado del mismo.

103

Referencias

Referencias
[AHO90] Alfred V. Aho, et al, Compiladores: principios, tcnicas y herramientas, Ed. Addison-Wesley Iberoamericana,Wilmington, Delaware, E.U.A. 1990. [BUR95] [CAI75] M.M. Burnett, D.W. McIntyre, Visual Programming, Computer, vol. 28, No. 3, marzo 1995. Caine,S., and K. Gordon, PDL _A Tool for software Desing, in Proc. National Computer Conference, AFIPS Press, 1975.

[CHA86] S.K. Chang, T. Ichikawa and P.A. Ligomenides, Visual Languages, Plenum Press. New York 1986. [CHA87] S. K. Chang, et al., Icon purity-toward a formal theory of icons, international journal of pattern recognition and artificial intelligence, World Scientific Publishing Company, Vol 1, No. 3,4. 1987. [CHA90] S. K. Chang Principles of Visual Programming Systems, Ed. Prentice-Hall, Englewood Cliffs, N.J., 1990. [CHA95] S. K. Chang and Gennaro Costagliola, Visual-Language System for User Interfaces, IEEE computer society, Vol 12, No. 2, March 1995. [CUE93] Gonzalo Cuevas Agustn INGENIERIA DEL SOFTWARE: Prctica de la programacin, Ed. Addison-Wesley Iberoamericana,Wilmington, Delaware, E.U.A. 1993. Richard E.Fairley "INGENIERIA DE SOFTWARE", Ed. McGraw-Hill, enero 1990. Tim Farrell Runnoe Connally, Programming in Windows 3.1 2nd Edition, QUE, USA, 1992. Gerez Greiser V., Rodriguez Ortiz G., et al., Desarrollo y administracin de programas de computadora (software), De. Continental, Mxico 1985. Luis Joyanes Aguilar "FUNDAMENTOS DE PROGRAMACION algoritmos y estructura de datos", Ed. McGraw-Hill, Espaa 1988. Kenneth E. Kendall, Julie E. Kendall SYSTEM ANALYSIS AND DESIGN De. Prentice-Hall, 1988.
104

[FAI90] [FAR92] [GER85] [JOY88] [KEN88]

Referencias

[LEW90] [LOP95]

Ted Lewis "Code Generators", IEEE Software, mayo 1990. Manuel Lpez, Gerardo Marn, et al. las nuevas herramientas visuales, Personal computing Mxico, mayo 1995.

[PAZOS] Comunicacin personal Dr. Pazos Rangel R. [PET92] [PFL91] [PRE90] [PRO96] [SAN92] [SAN96] Charles Petzold Programming Windows 3.1, 3ra. Edicin, Microsoft press. USA, 1992. Shari Lawrence Pfleegder, Software Engineering The Production of Quality Software , segunda edicin, Macmillan Publishing Company, U.S.A.,1991. Pressman, S. Roger INGENIERIA DE SOFTWARE, UN ENFOQUE PRACTICO, 3era. Edicin Espaa, Ed. McGraw-Hill, 1990. Programming Visual, http: //union.ncsa.uiuc.edu/ hypernews/ get/ computing/ visual.html #wthat_is_VPL. 1996. Santaolaya S.R. Planeacin y diseo de programas de Computadora, Apuntes cenidet 1992. Santaolaya S.R. et al. Anlisis prospectivo de investigacin sobre la lnea de ingeniera de software, precisando en reusabilidad de componentes, cenidet, junio 1996. James A. Senn "Anlisis y diseo de SISTEMAS DE INFORMACION" Ed. McGraw-Hill, Segunda edicin 1994. Visual Magic, http://www.visual-magic.com/index.html. 1997.

[SEN94] [VIS97]

[YOU92] Edward Yourdon Decline & Fall of American Programmer. 1992 by PTR Prentice Hall, inc.

105

Anexo1

Cuestionario

ANEXO 1 CUESTIONARIO 1. Haz utilizado alguna vez una notacin de diseo detallado para la elaboracin de un sistema?_______________________________________________________________________ 2. Si la respuesta anterior fue negativa escribe brevemente por qu? ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ Si haz utilizado alguna vez una notacin de diseo contesta brevemente las siguientes preguntas. 3. Con qu frecuencia utilizas una notacin de diseo detallado para la elaboracin de tus sistemas y por qu? ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ 4. Cul es el resultado en tiempo, costo, etc. que haz obtenido cuando utilizas una herramienta de diseo y cundo no la utilizas? ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ 5. Consideras que las notaciones de diseo realmente ayudan al programador? Por qu? ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ 6. Cules notaciones de diseo detallado conoces? ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ 7. Si tuvieras que hacer en este momento un sistema. Cul notacin de diseo detallado eligiras y por qu? ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________

106

Anexo2

Reglas de produccin de la gramtica posicional

ANEXO 2

REGLAS DE PRODUCCION
= SIGNIFICA VACIO <S> <VAR> <PARAMETROS> <DECFUNCION> <VAR> <S> | DECFUNCION <S>| nombre variables<VAR> | nombre parametros<PARAMETROS> |
1 1

ABAJO1 nombre funcin2 DERECHA2 <SENTENCIAS >3


4

ABAJO1 <SENTENCIAS> <PRINTF>1 <SCANF>1

ABAJO1 ABAJO1

<SENTENCIAS>2 <SENTENCIAS>2

ABAJO1 ABAJO1

3 3

| |

3 1 <LLAMADA>1 ABAJO1 <SENTENCIAS>2 ABAJO1 | 3 ABAJO1 <SENTENCIAS>2 ABAJO1 | <CONDCICLO>1

ABAJO1 <SENTENCIAS>2 | <PRINTF> ARRIBA1 <INSTSEC>2 DERECHA2 cadena 3 IZQUIERDA3 <INSTFUN>4 | 1 ARRIBA1 <INSTSEC>2 DERECHA2 variable3 IZQUIERDA3 <INSTFUN>2 ARRIBA1 <INSTSEC>2 DERECHA2 variable3 IZQUIERDA3 <INSTFUN> 4 ABAJO1 nombre funcin2 IZQUIERDA3 <CONDCICLO> 4
1 1 1 1 1

<SCANF>

<LLAMADA>

ARRIBA1

<INSTSEC>3

<TXTC> CONDCICLO

DERECHA1 cadena2

<IFCOMP>1 ABAJO1 <CONDCICLO>2 | <SWITCH>1ABAJO1 <CONDCICLO>2 | <WHILE>1 ABAJO1 <CONDCICLO>2 | <DOWHILE>1 ABAJO1 <CONDCICLO>2 | <FOR>1 ABAJO1 <CONDCICLO>2 |

107

Anexo2

Reglas de produccin de la gramtica posicional

<INSTFUN> <INSTSEC> <IFCOMP>

1|

(1,2,3)

| |

(1,2)|

(1,2) 1|

|
1 1

ARRIBA1 <INSTSEC>2 ABAJO2 Condicin3 DERECHA3 6 <SENTENCIAS>4 IZQUIERDA4 <INSTFUN>5 ABAJO2 | 11 ARRIBA1 <INSTSEC>2 ABAJO2 Condicin3 DERECHA3 6 <SENTENCIAS>4 IZQUIERDA4 <INSTFUN>5 ABAJO2
7 ABAJO1 ABAJO1 Condicin8 DERECHA2 1 11 <SENTENCIAS>9 IZQUIERDA4 <INSTFUN>10 ABAJO2

<SWITCH>

ARRIBA1 <INSTSEC>2 ABAJO1 Condicin 3 DERECHA2 7 <SENTENCIAS>4 IZQUIERDA4 <INSTFUN> 6 ABAJO2


1

ABAJO1 <SWITCH>8 ABAJO1 92 ABAJO1 Condicin10 DERECHA2 <SENTENCIAS>11 IZQUIERDA4 <INSTFUN>12 ABAJO2 <FOR>
1 1 13

ARRIBA1 <INSTSEC>2 ABAJO2 Condicin 3 DERECHA3 5 <SENTENCIAS>4 ABAJO1 IZQUIERDA5 <INSTFUN> 6 ARRIBA1 <INSTSEC>2 ABAJO2 Condicin3 DERECHA3 5 <SENTENCIAS>4 ABAJO1 IZQUIERDA5 <INSTFUN> 6
2 1

<WHILE>

<DOWHILE>

ARRIBA1 <INSTSEC>2 ABAJO2 Condicin3 DERECHA3 5 <SENTENCIAS>4 ABAJO1 IZQUIERDA4 <INSTFUN> 6


3

108

Anexo3

Diagrama de transicin de estados

ANEXO 3

Diagrama de transicin de estados para la declaracin de una variable o un arreglo

e 0 9
[

9 17
[ blanco

otra cosa

17 ;
Fincadena Fincadena

, ; id 4
blanco

5
otra cosa

6 0
digito

, 5
blanco , ;

Blanco , ; = Fincadena

Blanco , ; = Fincadena Letra digito guin Letra digito guin otra cosa

= =
digito

15

otra cosa

Letra

Letra

1
otra cosa otra cosa

2 e

Letra otra cosa

7
otra cosa

14 e

Letra

16

blanco , ;

e
[ [ [

=
blanco

otra cosa blanco

14 0
=

, ; Fincadena
otra cosa

token =id

10

[
otra cosa

11

12 e

13

otra cosa

e
otra cosa

109

Anexo 4

Formato del archivo de diseo

ANEXO 4

FORMATO DEL ARCHIVO DE DISEO


- Se almacena la informacin general del sistema. {DTOSGLOBALES (IndexWnd) * Almacena el tope del arreglo. }FIN - Se almacena la informacin de la variables globales. {VARGLOBALES (Variable) (Tipo) (Alcance) * Se almacena la informacin de las variables globales. }FIN - Este bloque almacena la informacin de una funcin, pueden existir varios bloques de este tipo, dependiendo de las funciones que existan en el desarrollo de un diseo. {DECFUNCION (NumWin)(EdoFun)(Edo) * (NumWin) almacena el nmero de la ventana que le corresponde a esa funcin. * (EdoFun) almacena el estado de la funcin. El nmero 1 indica que la funcin est
activa y 0 que esa funcin ya ha sido borrada.

* (Edo) Almacena el estado del autmata.


(Caduno) (Caddos) (Cadtres)

* En estas tres cadenas se almacenan los comentarios de la funcin. }FIN - Se va a almacenar la informacin de las variables locales de la funcin. {VARLOCALES (Variable) (Tipo) (Alcance) * Se almacena la informacin de las variables locales. }FIN - En este bloque se almacena la informacin de todos los objetos que existan en la funcin y se va a diferenciar la informacin de un objeto, con respecto a otro con el smbolo (@) {OBJSDATOS
@ (nInstruc)(nBmp)(SpcBmp) * (@) Este smbolo identifica la declaracin de un objeto. * (nInstruc) almacena el nombre lgico del objeto. * (nBmp) almacena el nombre fsico del objeto. * Se va a almacenar el espacio que ocupa el objeto en pixeles.

110

Anexo 4

Formato del archivo de diseo

(ArribaX)(ArribaY)(AbajoX)(AbajoY) (IzquierdaX)(IzquierdaY)(DerechaX)(DerechaY) * Se almacena el cudruple de coordenadas que tiene cada objeto. (ArribaModifX)(ArribaModifY) * Se van a almacenar las coordenadas de arriba en X y Y pero ya modificadas, de cuando se realiza el ajuste de objetos en la pantalla. (Tipo)(NormalBmp) (cadena)

* (Tipo) Almacena diferentes cosas dependiendo de la instruccin. * (NormalBmp) Este campo sirve para ver si se va a eliminar un objeto. * (cadena) Se almacenan varias cosas segn sea la instruccin.

- Se almacena la informacin de los argumentos de un objeto {ARGDTOS (Variable) (Tipo) (Alcance) * Se van a almacenar los argumentos de los objetos. }FIN - Este FIN indica la terminacin de la informacin de una funcin. }FIN

111

Anexo 5

Demostracin de la ejecucin del GenCod

ANEXO 5

DEMOSTRACION DE LA EJECUCION DEL GENCOD


Este anexo pretende mostrar brevemente la ejecucin del GenCod. El sistema GenCod cuenta con dos mens, el primero de ellos slo tiene las opciones de abrir un archivo ya existente de diseo o de comenzar un nuevo diseo, adems de la opcin de ayuda (que indica cmo se puede manejar el sistema), para esta prueba de corrida se inici con la opcin de generar un nuevo archivo de diseo, enseguida aparece una caja de dilogo que pregunta el nombre de la funcin de diseo, adems de mostrar los tipos de datos que existen para que el usuario eliga el tipo de la fucin, una vez hecho sto se oprime el botn de Aceptar (ver figura 1).

GenCod Archivo Ay uda

figura 1 Pantalla inicial que se presenta al elegir del men nuevo archivo de diseo

Una vez que se escribe el nombre de la funcin y se elige el tipo de la funcin, se presenta otra caja de dilogo preguntando por los parmetros de la funcin (figura 2). El usuario debe escribir el nombre del parmetro, elegir el tipo de dato y el tipo de paso del parmetro, hecho sto debe oprimir el botn con la opcin de Agregar y continuar con la declaracin de los dems parmetros, al terminar debe oprimir el botn con la opcin de Finalizar. En caso de que la funcin no cuente con parmetros el usuario slo debe oprimir el botn de Finalizar.

112

Anexo 5

Demostracin de la ejecucin del GenCod

GenCod Archivo Ay uda

figura 2 Pantalla que se muestra para realizar la declaracin de parmetros

En la siguiente pantalla que se presenta en la figura 3, se puede ver el segundo men del GenCod, el cual contiene todas las instrucciones de la notacin de diseo de Warnier, adems aparece el primer objeto del diseo que representa la declaracin de una funcin.

figura 3 Pantalla en donde se va a realizar el diseo

113

Anexo 5

Demostracin de la ejecucin del GenCod

Cada vez que se elija una instruccin de la paleta de botones del men, se presentar una caja de dilogo, que pide la informacin necesaria para cada instruccin. En la figura 4 se muestran las cajas de dilogo de las instrucciones de salida y condicional (todas las instrucciones tienen la opcin de cancelar la accin).

figura 4 Caja de dilogo de las instrucciones de salida y del condicional

Con la utilizacin de la herramienta el usuario no debe preocuparse dnde colocar cada una de las instrucciones elegidas, porque el GenCod se encarga de realizar sto. En la figura 5 se muestra cmo despes de elegir un objeto activo (condicional), se crea un nuevo nivel de abstraccin, asi que todos los objetos o instrucciones que se eligan van a pertenecer al objeto activo anterior, en este caso al condicional.

figura 5 Insercin de un objeto despus de un objeto activo

114

Anexo 5

Demostracin de la ejecucin del GenCod

Adems en caso de que se eligiera una instruccin incorrecta, el GenCod presenta un mensaje indicando el error (ver figura 6).

figura 6 Mensaje de error al elegir una instruccin incorrecta

De tal manera que el usuario puede continuar eligiendo instrucciones hasta terminar con su diseo, pudindolo guardar en un archivo (ver figura 7).

figura 7 Caja de dilogo que se presenta al elegir la opcin de guardar el archivo de diseo

115

Anexo 5

Demostracin de la ejecucin del GenCod

Adems el GenCod cuenta con un sistema de ayuda que permite al usuario consultar a travs de hipertexto el funcionamiento que tiene el sistema (ver figura 8).

figura 8 Pantalla que muestra las ayudas del GenCod

En el captulo 5 se explica con mayor detalle las opciones que tiene el GenCod, as como tambin la generacin de cdigo y la ejecucin de los programas generados a partir del diseo (desde el punto de vista interno del sistema).

116

También podría gustarte