          DB3mnugn: generacin de prototipos de sistemas
              y tutores electrnicos mediante mens

                               por

                          Adolfo Di Mare

                   Reporte Tcnico PIBDC-01-87
                       Proyecto 326-86-053


Abstract:
========

Por medio de  la generacin automtica  de mens es  posible crear 
prototipos   de   sistemas   y   sus   correspondientes    tutores 
electrnicos.  Aunque los  programas  generados  no  son  todo  lo 
completos  que  se  quisiera,  si  representan  una   aproximacin 
razonable   al   sistema  real.    DB3mnugn  es   una  herramienta 
desarrollada  localmente  y orientada  al paquete  DBase III,  que 
tiene gran popularidad  en nuestro medio.   Se incluye una  amplia 
discusin  sobre  las ventajas  y desventajas  de dos  sistemas de 
bases de datos muy populares en ambientes de micro computadores.

Este reporte  es una  contribucin a  la investigacin  aplicada y 
altamente relevante y coherente a la realidad nacional.


Esta investigacin se realiz dentro del proyecto de investigacin 
326-86-053  "Conversin   automtica  de   programas  despus   de 
reestructurar una base de  datos", inscrito ante la  Vicerrectora 
de Investigacin de la Universidad  de Costa Rica.  La Escuela  de 
Ciencias de la  Computacin  e  Informtica  tambin  ha  aportado 
fondos para realizar este trabajo.


1. Introduccin
===============

Dentro  del   proyecto  326-86-053,   "Conversin  Automtica   de 
Programas despus de Reestructurar una Base de Datos" he  definido 
una arquitectura para sistemas de bases de datos. Para hacerlo, he 
estado  estudiando  diversos  sistemas,  principalmente   aquellos 
relevantes a ambientes de micro computadores. Esto me ha llevado a 
cuestionar las cualidades de sistemas como DBase III y RBase 5000, 
as como otras  herramientas de esta  naturaleza.  Dentro de  este 
flujo  de  ideas,  conoc  algunos problemas  que se  presentan en 
nuestro ambiente,  lo que  me movi  a crear  el sistema  de mens 
descrito en este artculo.

En  mi  proyecto  deseo  encontrar  mtodos  que  nos  hagan   ms 
productivos.  Aumentar la  productividad preservando o  reduciendo 
los costos necesariamente  redunda  en  progreso.   Este  ha  sido 
tambin el aliciente para adoptar el uso de computadores en muchas 
empresas de nuestro  pas: lograr ms  resultados a un  precio ms 
bajo.

Adquirir un computador  soluciona  apenas  la  mitad  de  nuestros 
problemas  en  el  mejor  de  los  casos:  al  usarlo  es  posible 
tcnicamente  almacenar grandes volmenes  de informacin en estas 
mquinas.   Mas  la   compra   implica   tambin   una   inversin 
considerable en el  desarrollo de programas.   Como es el  caso en 
los  pases desarrollados, cada vez es  ms cierto que el costo de 
los sistemas  generalmente sobrepasa  el del  equipo.  Esto  me ha 
movido a  trabajar en  cmo aumentar  nuestra productividad  en el 
desarrollo  de  sistemas, trabajo  que ha  quedado plasmado  en el 
DB3mnugn.

Nuestro  pas  cuenta  con  una  gran  cantidad  de  profesionales 
formados  en Ciencias  de la Computacin  e Informtica.  Nosotros 
podemos mejorar las tecnologas de implementacin de sistemas, con 
lo que lograremos reducir el costo de mecanizacin.  El  generador 
de   mens  que   describo  es  un   paso  ms  hacia   lograr  la 
especializacin  tcnica en el desarrollo  de sistemas que yo creo 
que debemos alcanzar.

Creo  que   es  muy   probable  que   logremos  aumentar   nuestra 
productividad en el rea de implementacin de sistemas en el corto 
plazo.

El auditorio  al que  este trabajo  va dirijido  es el  analista o 
programador que necesita  de  nuevas  herramientas  para  ejecutar 
mejor su labor de implementacin de sistemas de computacin.


2. Estructura de los Sistemas
=============================

Los sistemas computacionales son creados para almacenar y procesar 
los datos relevantes a una empresa.  Estos datos deben ingresar al 
sistema, para luego  ser  procesados  y  extrados  en  una  forma 
adecuada,  y as apoyar tanto  la gestin administrativa diaria de 
la empresa como la toma de decisiones a nivel gerencial.  El deseo 
de  usar  computadoras  nace  de la  reconocida capacidad  de este 
aparato  para  ejecutar operaciones  repetitivas rpidamente,  sin 
errores y a bajo costo.

Interesa  entonces  definir  ms  claramente  el  significado  del 
concepto "sistema", al menos en lo que concierne al desarrollo  de 
aplicaciones comerciales.

Para un usuario,  el sistema computacional  es una caja  negra con 
entradas  y  salidas,  que  se manifiestan  de varias  formas.  El 
ingreso de datos al computador generalmente se hace usando una  de 
tres tcnicas: mens, pantallas de entrada o comandos. Las salidas 
del  sistema se hacen por medio  de pantallas de salida y reportes 
impresos.   Tambin es posible que  un sistema interacte con otro 
intercambiando archivos de datos, ya  sea por medio de diskette  o 
por otros medios electrnicos.  Internamente el sistema tiene  dos 
componentes  bsicos:  los  programas  que  dirijen  las  acciones 
ejecutadas por el computador, y los archivos en que se guardan los 
datos del sistema. Esquemticamente:

    Entradas                Sistema                 Salidas

    Pantallas          +-----------------+
   +-----------+       |                 |       +------------+
   |  Entrada  |       |                 |       |   Salida   |
   |           |------>|                 |------>|            |
   | D/M: 00/? |       |                 |       | D/M: 23/j  |
   | Status: _ |------>|                 |------>| Status: A  |
   +-----------+       |    PROGRAMAS    |       +------------+
                       |                 |
     Comandos:         |                 |
   A>  dir      ------>|                 |
                       |                 |          Reportes
   +-----------+       |     BASE DE     |       +------------+
   |   Menu    |------>|      DATOS      |------>|o| Rep #1 |o|
   | A. _____  |       |                 |       |o|.. .... |o|
   | B. _____  |------>|                 |------>|o|.. .... |o|
   +-----------+       |                 |       +------------+
                       +-----------------+
                          ^           ^
                          |  +-----+  |
                          +->|     |<-+
                             |  O  |
                             |  |  |
                             +-----+

La mayora de los sistemas para aplicaciones administrativas estn 
compuestos por un porcentaje bastante alto de cdigo para hacer la 
entrada/salida,  pues  generalmente la parte de proceso  de  datos 
(tambin  llamada  la  "lgica"  del  sistema)  es   relativamente 
pequea.  El lector puede dudar de esta afirmacin,  ms an si se 
trata de un programador experimentado. Por eso debo justificarla.

Al examinar el cdigo fuente de muchos sistemas, es fcil ver como 
todas  sus componentes se encuentran mezcladas,  interactuando  en 
formas  muchas  veces complicadas.  A veces esto se da  porque  el 
sistema es muy complicado,  por lo que el programarlo requiere  de 
una alta sofisticacin. Sin embargo, en general lo que sucede   es 
que  los programadores debemos crear interfaces con el  computador 
que  sean sumamente cmodas y adecuadas al usuario.  Esto se logra 
slo a travs de un arduo trabajo de programacin.  Pero estas  no 
son las nicas razones.

Como  los  manuales  tcnicos de las mquinas  y  lenguajes  estn 
escritos   en   ingls,   es  realmente  costoso   leerlos.   Como 
consecuencia,  existe la marcada tendencia a no utilizar todas las 
facilidades  que un lenguaje de programacin ofrece,  por  lo  que 
algunas  tareas  se  hacen por medio de  programacin    realmente 
innecesaria.  He  constatado que ste es el caso en cuanto  a  las 
facilidades  de edicin de campos en pantallas de entrada y  en la 
produccin de reportes usando el DBase  III.   Adems,  como seres 
econmicos que somos, estamos renuentes a aprender cosas nuevas si 
las   viejas  ya  nos  satisfacen,   por   lo  que  es  usual   la 
desactualizacin tecnolgica en nuestro medio.  (Esta realidad  es 
tan  pattica  que  todava  en el ao 1986 una  de  nuestras  ms 
prestigiosas  instituciones todava utilizaba su  mega  computador 
IBM,  ltimo  modelo,  como  si fuera un modelo caduco de hace  20 
aos: el 1401!).

Entonces  lo que afirmo es que los programas son  innecesariamente 
complicados, y que en muchos casos la lgica del sistema realmente 
es una parte pequea de todo el programa. Es mi experiencia que en 
ambientes  de micro computadoras la lgica del sistema no  es  ms 
del 20% del cdigo,  y que por los menos el 60% corresponde a  los 
mens  y las pantallas de entrada/salida.  Lo restante  es  cdigo 
para produccin de reportes.  En aplicaciones comerciales es  raro 
hacer  uso de lenguajes de comandos,  pues stos requieren de  una 
gran  capacitacin  para su uso.  Ms  bien  somos  nosotros,  los 
programadores, quienes los usamos.

Ya   existen  herramientas  que  permiten  generar  pantallas   de 
entrada/salida  de  datos.  La herramienta  que  presento  permite 
generar  mens,  lo  que  es de gran utilidad  al  programador  de 
aplicaciones,  pues  as disponde de herramientas que facilitan la 
programacin  del  60%  de  cada  sistema.   Adems,   esta  misma 
herramienta  puede usarse para generar rpidamente  prototipos  de 
aplicaciones, que pueden ser verificados con el usuario final  del 
sistema  inmediata  e interactivamente,  evitando as el  invertir 
muchos recursos en un programa que a fin de cuentas no le resuelve 
sus  necesidades  de informacin.  Ms an,  el   DB3mnugn  podra 
usarse para hacer paquetes de programas para un mercado amplio  de 
usuarios, pero ajustando cada paquete a cada usuario con un mnimo 
de esfuerzo.

El DB3mnugn permite generar todos los mens de una  aplicacin,  y 
es  capaz  de integrar el cdigo correspondiente a las  pantallas, 
reportes  y  la lgica del sistema en un  slo  programa.  Permite 
adems  integrar  al sistema pantallas de ayuda.  Todos los  mens 
generados  tienen  una  estructura  estndar,  y  son  fciles  de 
accionar por el usuario.

El  uso de mens en aplicaciones comerciales es casi  obligatorio. 
Cada  men  contiene  todas las opciones a que  el  usuario  tiene 
acceso en un nivel del sistema. Cada item de un men resume en una 
lnea una funcin del sistema.

Si los mens estn correctamente organizados,  entonces el sistema 
ser sencillo de usar,  y estarn juntas las funciones que  tengan 
una   gran   interrelacin.    Los   mens   permiten    organizar 
jerrquicamente las funciones del sistema,  comenzando en el nivel 
ms  general y terminando en el ms especfico.  Los mens son  un 
muy   buen  paradigma  para  la  construccin  de  sistemas   pues 
corresponden a nuestro entendimiento: en nuestra mente almacenamos  
el conocimiento en capas sucesivamente ms  detalladas. El  uso de 
mens   est   muy generalizado  pues  los   programadores   hemos 
reconocido su aplicabilidad en sistemas de computacin.

Los  mens  tambin ayudan al novato a conocer  el  sistema,  pues 
recorrindolos  puede aprender a usarlo.  La concha de  mens  del 
sistema  puede  usarse como tutor electrnico para el  novato.  Es 
reconocida la necesidad de contar con buenos manuales descriptivos 
del sistema,  pero es mucho mejor contar con un tutor  electrnico 
que  permita  al  nuevo usuario interactuar con  el  sistema  para 
aprender  a usarlo.  Los tutores electrnicos han sido muy  usados 
para   introducir  muchos   paquetes  como   hojas   electrnicas, 
procesadores  de  palabras  y otros.  Estos paquetes  incluyen  un 
programa  tutor  que   ayuda  al  nuevo  usuario  a  entender   el 
funcionamiento del sistema.

3. Generacin de Prototipos y de Tutores Electrnicos
====================================================

No quiero afirmar que el disear prototipos de sistemas es  fcil, 
mas  el  DB3mnugn  ayuda  a  hacerlo,   en  forma  natural  y  sin 
complicaciones.  Una muy buena aproximacin al sistema final es su 
estructura  jerrquica  de mens.  Si a esto agregamos  todas  las 
pantallas  de  ayuda  de cada item en la  jerarqua,  entonces  el 
programa  resultante sera no slo un buen descriptor del  sistema 
real, sino tambin un tutor para el novato.

El  analista/programador  puede disear una jerarqua de  mens  y 
pantallas de ayuda,  que puede usar como prototipo del sistema. Al 
terminarla,  puede presentrsela al usuario,  para que ste evale 
si el correspondiente sistema sera de su agrado, y cumple con sus 
requerimientos.  Una  vez definida la estructura de los mens,  el 
analista/programador puede dedicarse a programar el sistema, en la 
secuencia que acuerde junto al usuario.

El  DB3mnugn hace relativamente sencillo cambiar la estructura  de 
los mens, por lo que el analista puede rpidamente generar muchos 
prototipos de sistemas para el usuario, hasta llegar a uno que sea 
adecuado.

Para generar un tutor electrnico,  basta perdirle al DB3mnugn que 
genere  un  programa que no incluya cdigo del todo,  pero que  si 
incluya todas las pantallas de ayuda.  El tutor generado tendr la 
misma  jerarqua de mens que el programa de  aplicacin,  con  la 
diferencia de que al seleccionar un item de men cualquiera lo que 
se desplegar es la ayuda detallada del item. Las ayudas para cada 
men  siguen siendo las mismas,  y se activan mediante el botn de 
ayuda.

Aunque  tanto  los prototipos como los tutores que DB3mnugn  puede 
generar  no  son completos,  si sirven para dar una  idea  general 
y  acertada  a los usuarios de las cualidades del sistema.  En  el 
futuro   lo   extenderemos  para  cada  vez   cubrir   mejor   los 
requerimientos   de   prototipos  y  tutores  que   afrontan   los 
analistas/programadores.

El generador tambin puede ser configurado para que no incluya del 
todo  las  pantallas  de ayuda,  obtenindose as un  sistema  ms 
compacto, pues requerira menos memoria para correr.

El   DB3mnugn   no   es  una   herramienta   para   sustituir   al 
analista/programador,  sino que le complementa en su trabajo. Como 
ocurre  muchas  veces en sistemas de computacin,  un  mal  diseo 
produce  un  mal sistema,  independientemente de las  herramientas 
usadas,  del proveedor del equipo, o de las cualidades del equipo. 
El  usar  el DB3mnugn no implica eliminar etapas  del  anlisis  y 
diseo  de  sistemas,   sino  acortar  la  implementacin  de  los 
programas,   o   ayudar  a  cumplir  las  mismas  etapas  con  ms 
efectividad en un tiempo ms corto.


4. Escogencia del DBase III
===========================

DBase  III  es  una herramienta muy til  para  el  desarrollo  de 
sistemas,  lo que est demostrado por su amplio uso. Pero no es la 
nica herramienta existente y tiene serias restricciones.

Desde  principios del ao 1987 he dirigido el proyecto  denominado 
"Implantacin  del  Sistema  de  Informacin  de  la   Escuela  de 
Ciencias de la Comutacin e Informtica",  bajo  el auspicio de la 
Vicerrectora  de Accin Social de la Universidad de  Costa  Rica. 
Una   de  las  primeras  fases  de  este  proyecto  fue   estudiar 
detenidamente diferentes herramientas para implementar el sistema. 
Comenzamos  usando el Turbo Pascal,  pues deseamos que el  sistema 
producido  sea muy portable.  Uno de los objetivos del proyecto es 
entregarle a las diferentes escuelas de la Universidad el  sistema 
como una alternativa ms para realizar su trabajo  administrativo. 
Como  la  UCR  tiene  una diversidad bastante  grande  de  equipo, 
despus  de  varias discusiones decid usar  el  lenguaje  Pascal,  
para  el que se disponen compiladores  en prcticamente todos  los 
computadores,  por  lo  que  portar  el sistema  sera  una  labor 
manejable.

Cuatro  estudiantes  de  tercero y cuarto ao  de  la  carrera  de 
Ciencias   de   la   Computacin  e   Informtica   me   ayudaron,  
inviertiendo  sus  300 horas de trabajo comunal  en  el  proyecto. 
Disearon  una  parte del  sistema  y  luego la implementaron   en  
Turbo  Pascal.   Produjeron  aproximadamente 3500 lneas de cdigo  
Pascal.   En  el  cuadro  adjunto  incluyo  la  distribucin   por  
funciones de  este cdigo.
                  Aplicacin           # Lneas    %
          +----------------------------+-------+-------+
          | Mens                      |   642 |  18%  |
          +----------------------------+-------+-------+
          | Pantallas de entrada       |   428 |  12%  |
          +----------------------------+-------+-------+
          | Pantallas de Salida        |   350 |  10%  |
          +----------------------------+-------+-------+
          | Mantenimiento de Archivos  | 1.315 |  37%  |
          +----------------------------+-------+-------+
          | Lgica del sistema         |   412 |  12%  |
          +----------------------------+-------+-------+
          | Reportes                   |   --- |   -   |
          +----------------------------+-------+-------+
          | Validacin de Datos        |   405 |  11%  |
          +----------------------------+-------+-------+

                      Uso del cdigo Pascal

Al   examinar  ese  cuadro me di cuenta de que  mis estudiantes se 
pasaron  la  mayor  parte del tiempo programando rutinas  que   ya 
estn incluidas en paquetes como DBase III.  Tan imbuidas  estaban 
en esa tarea,  que no tuvieron tiempo de programar lo que  deban, 
pues  debieron  usar  sus  esfuerzos en crear  una  biblioteca  de 
rutinas que luego usaron al programar el sistema.  Es ms, todava 
deban programar funciones para manipular archivos.

Por  ejemplo,  mis  estudiantes hicieron un  paquete  completo  de 
manejo  de  cajas y lneas en la pantalla.  De esta  forma  pueden 
borrar  una  seccin  de  la  pantalla,   dibujar  una   caja,   o 
sobreponerla  a otra.  El efecto logrado es muy agradable,  y  los 
mens  de  este  sistema  son  impresionantes.   Pero  yo  hubiera 
preferido   que   el   sistema  entregado   fuera   aunque   menos 
deslumbrante, ms completo y eficaz.

Adems, mis estudiantes agotaron las capacidades del Turbo Pascal.  
Los  programas  tiene  pocos  comentarios,   pues  el   incluirlos 
siginificaba  dejar  por  fuera cdigo  ejecutable,  debido  a  la 
reducida  capacidad  del editor incorporado en Turbo  Pascal.  Por 
supuesto existen formas de circunvalar esta dificultad, pero todas 
implican sacrificar la portabilidad del sistema.

Cabe  destacar que estas dificultades se presentan al  implementar 
cualquier  sistema administrativo.  De hecho,  los proveedores  de 
programas  de computacin ofrecen diversos programas producto para 
facilitar el diseo del dilogo hombre-mquina.  Estos generadores 
permiten al programador pintar la pantalla,  y producen el  cdigo 
en  el formato requerido por el sistema husped.  Paradjicamente, 
todava no existe en el mercado un generador de mens como el  que 
aqu describo.  Para complementar estos productos tambin existen, 
a su debido costo,  bibliotecas de programas para manejar ventanas 
y mens con facilidad.

Como  no  disponamos de estas herramientas,  el usar  Pascal  era 
contraproducente:  el  sistema  que  mis  estudiantes  programaron 
estaba   incompleto.   Era  un  desperdicio  de  esfuerzo   seguir 
reinventando la rueda. Por las consideraciones anteriores decid a 
adoptar un lenguaje nuevo.

Las  posibilidades  restantes eran bsicamente  tres:  DBase  III, 
RBase  5000  y  Basic.  No consider otros  lenguajes  simplemente 
porque no dispongo de compiladores para ellos.  Adems, la mayora 
usa  uno  de  estos tres.  Tanto DBase III  como  RBase  5000  han 
recibido   crticas  muy  positivas  por  diferentes  crticos  de 
computacin,  lo que justifica su uso.  Para casi todos, estos dos 
son  los mejor de lo mejor,  en ambientes de  micro  computadores. 
Desech  el  Basic  por ser un lenguaje arcaico que  brinda  pocas 
facilidades de  entrada/salida:  Basic es simplemente mucho   peor 
que Pascal en todo sentido.

Tanto DBase III como RBase 5000 tienen muchas facilidades,  aunque 
un tanto complejas,  para entrada/salida y manejo de archivos.  El 
generador de reportes de RBase 5000  es realmente impresionante, y 
el  sistema para generacin de aplicaciones EXPRESS incluido en el 
paquete es muy bueno.   Tiene, sin embargo, un gran inconveniente: 
RBase  5000  no tiene un buen compilador,  lo que implica  que  es 
lento  y que no puede usarse en mquinas sin disco duro.  Por  eso 
creo  que el DBase III es una mejor alternativa.  Adems en  RBase 
5000  no  pueden  anidarse ms de 9  niveles  de  intrucciones  de 
control (como el While,  Case, etc.), lo que dificulta mucho crear 
estructuras jerrquicas de mens.  Esta restricciones no se dan en 
el DBase III.

DBase III tiene un buen compilador,  el Clipper de Nantucket,  muy 
conocido en nuestro medio.  DBase III no es tan impresionante como 
el  RBase  5000  en  el  rea  de  generacin  de  reportes  o  de 
aplicaciones,  pero  su uso extenso en el pas,  que  sustenta  su 
aplicabilidad,  y  su  capacidad  en el manejo de  archivos  y  de 
pantallas  de  entrada/salida,   lo hacen  la  mejor  alternativa. 
Adems,  el  DBase  III es casi un estndar en ambientes de  micro  
computadores.

Sin embargo, DBase III tiene algunos defectos realmente graves:

1-   Al disear una pantalla de entrada/salida el programador debe     
     especificar las coordenadas dentro de la pantalla en que cada     
     campo debe situarse.

2-   Aunque  DBase III tiene todas las  construcciones  requeridas     
     para  hacer  programacin estructurada,  no  permite  el  uso     
     cmodo de mdulos,  pues los archivos de procedimientos estn     
     limitados a contener no ms de 32 subrutinas.  (El RBase 5000     
     no  es mejor en este rubro).  Esto implica que el programador 
     no  puede  estructurar su cdigo en mdulos,  y  adems  debe 
     cuidarse de no agotar el mximo de 256 variables activas  que 
     el sistema tiene.

3-   DBase   III   no   cuenta  con  las   facilidades   altamente 
     sofisticadas para la definicin de interfaces, las cuales han 
     sido implementadas en lenguajes como Modula-2.
4-   DBase  III no compilado es relativamente lento.  Generalmente     
     las  quejas  respecto a velocidad se dan despus de  usar  un     
     sistema  cierto  tiempo.   Adems,  el   compilador   Clipper  
     produce cdigo objeto de tamaos inmensos, llegando a 400k en 
     algunos casos.

El  primer  problema se subsana usando el generador  de  pantallas 
incluido  en el paquete,  mediante el comando  MODIFY  SCREEN.  Yo 
prefiero el viejo DFORMAT,  que era incluido con viejas  versiones 
del  DBase  III (que creo tambin es  llamado  SED).  Todos  estos 
paquetes  permiten al programador "pintar" la pantalla de  entrada 
salida,  con sus campos,  rtulos y cajas.  Cuando el diseo  est 
terminado  entonces  el generador de pantallas produce  el  cdigo 
DBase  III  requerido para  desplegarla.  Estos   comandos   deben  
entonces ser incluidos en el programa respectivo.

No  afirmo  que estos tres generadores son  excelentes,  pero   en  
mucho  alivian la labor de programacin.  Considero imprescindible 
usarlos al desarrollar aplicaciones.

La  segunda  objecin realmente no tiene  solucin,  a  menos  que 
trabajemos  sin usar el interpretador DBase III,  usando solamente 
el compilador Clipper que si permite definir mdulos.  El  enfoque 
adoptado al usar DB3mnugn deja al programador en plena libertad de 
usar todas las capacidades del DBase III,  pues el cdigo generado 
no hace uso de subrutinas,  permitiendo al programador usarlas con 
plena  flexibilidad.  Por esta misma razn,  la jerarqua de mens 
puede  tener  una altura arbitraria.  El  programador  debe  tener 
cuidado  de  respetar todas las restricciones del DBase  III;  por 
ejemplo, no debe mantener demasiados archivos abiertos, que es una 
de las principales incomodidades del DBase III.

Como el  generador  de mens puede incluir archivos de cdigo   en 
el  programa  principal,   entonces  la  modularidad  del  sistema 
se mantiene,  en parte.  Siempre es posible dividir el programa en 
partes acatando las restricciones del DBase III, pues el generador 
no  impone  ninguna  restriccin  al  respecto.  Sin  embargo,  el 
programador  debe  respetar algunas convenciones que el  generador 
usa,  evitando modificar algunas variables de control usadas  para 
administrar los mens.

Al usar mens el programador se concentra en slo una parte de  su 
programa:  la correspondiente a cada item de men. Esto le ayuda a 
dividir de forma natural su programa. Adicionalmente, el generador 
de  mens  puede indicarle las partes del programa que todava  no 
estn completas (el DB3mnugn genera un mensaje cuando no encuentra 
una  parte del sistema).  El uso del generador de mens  ayuda  al 
programador a implementar por mdulos su sistema.

El  precio  de crear una estructura coherente de mens no  es  muy 
grande, aunque la cantidad de cdigo  generado si lo es (del orden 
de  las  1000 lneas  para una aplicacin con 7 mens de  5  items 
cada uno).   Cabe decir,  sin embargo,  que al programar los mens 
sin  el  generador  es  difcil que  pueda  obtenerse  cdigo  ms 
compacto, y consistente.

La  tercera  objecin  surge de que DBase III no  cuenta  con  las 
facilidades ya presentes en otros ambientes de  programacin,  que 
permiten la definicin clara de las interfaces entre mdulos de un 
sistema.  Esta  es una desagradable restriccin,  que difcilmente 
ser eliminada en el mediano plazo.  Sin embargo, en las versiones 
ms  recientes  del DBase III es posible usar  procedimientos  con 
argumentos, y variables locales (llamadas privadas).

La cuarta objecin se soluciona compilando el programa DBase  III, 
con lo que se obtiene un incremento de hasta un orden de  magnitud 
en  la  velocidad de ejecucin.  Sin embargo,  el  cdigo   objeto 
generado por el compilador puede ser muy grande;  pero creo que en 
estos  momentos  ya  sto  no es  problema:  la  mayora   de  los 
computadores personales tiene 512k o ms de memoria,  y las que no 
lo  tienen  pueden  conseguirlo con una  inversin   relativamente 
pequea: del orden de los 5.000 colones.

Adems,  es  posible  ser cuidadoso al compilar el  programa  para 
evitar que el cdigo  objeto sea muy grande.  Ms an,  casi todos 
los  compiladores  para DBase III,  el  Clipper  incluido,  pueden 
producir cdigo por sobre-carga (overlays) con relativa facilidad. 
De  nuevo,  es  misin  del  programador  el  realizar  todas  las 
interafaces necesarias, pues este generador ni las realiza, ni las 
limita.

Redondeando,  DBase  III es la mejor eleccin.  Puede usarse  para 
programar   sistemas  bastante  complejos,   pues  tiene   grandes 
facilidades  para manejo de archivos y para entrada/salida.   Como 
tiene  un  buen compilador,  el producto final es un  programa  de 
rpida   ejecucin,   y  tiene la ventaja adicional de  que  puede  
usarse para crear sistemas para mquinas que no tienen disco duro, 
aunque es necesario que s tengan suficiente memoria:  512k por lo 
menos.  Aunque  existen  algunas restricciones,   en  general  son  
soportables si se usa una herramienta como el DB3mnugn.


5. El Generador de Mens DB3mnugn
=================================

Un men tiene 5 componentes:

1-  El ttulo del men
2-  La lista de items
3-  Botn de eleccin
4-  Pantallas de ayuda
5-  Decoraciones varias

Para definir un men realmente basta definir los puntos 1,  2 y 4. 
Es ms,  las pantallas de ayuda pueden incluirse despus de que el 
sistema ha sido diseado (aunque eso no es lo ms conveniente). El 
generador de mens recibe entonces  de entrada un archivo con  las 
siguientes especificaciones:
Sistema Contable: CIA Ejemplo
m 1   1 1   trans.hlp      Proceso de Transacciones
c 2   1 3   inclmv.prg          Incluir un slo asiento
c 2   2 3   inclas.prg          Incluir varios asientos
c 2   3 4   balmv.prg           Balancear asientos
c 2   4 ?   aplmv.prg           Aplicar asientos
a 2   ? ?   abre.prg            Abrir archivos
a 2   ? ?   limp.prg            Limpiar nmeros de cuenta
d 2   ? ?   cerrdb.prg          Cerrar archivos
m 1   8 ?   cons.hlp       Consultas
c 2   1 2   leacta.prg          Lea nmero de cuenta
c 2   2 ?   despcta.prg         Despliegue cuenta
m 1   4 ?   rep.hlp        Reportes
c 1   9 ?   borr.prg       Borrar un registro

Las siguientes dos figuras muestran dos de los mens generados:

+---------------------------------------------------------------+
|               +-------------------------------+               |
|men: \        | Sistema Contable: CIA Ejemplo |       23/07/87|
|               |         Men Principal        |               |
|               +-------------------------------+               |
|                                                               |
|               +-------------------------------+               |
|               | A.  Proceso de Transacciones  |               |
|               | B.  Consultas                 |               |
|               | C.  Reportes                  |               |
|               | D.  Borrar un registro        |               |
|               +-------------------------------+               |
|                                                               |
|                                                               |
|    +----------+ +----------+             +-----------+        |
|    | 0->Salir | | ?->Ayuda |             | Opcin: A |        |
|    +----------+ +----------+             +-----------+        |
+---------------------------------------------------------------+

+---------------------------------------------------------------+
|               +-------------------------------+               |
|men: \A       | Sistema Contable: CIA Ejemplo |       23/07/87|
|               |    Proceso de Transacciones   |               |
|               +-------------------------------+               |
|                                                               |
|                                                               |
|                +-----------------------------+                |
|                | A.  Incluir un slo asiento |                |
|                | B.  Incluir varios asientos |                |
|                | C.  Balancear asientos      |                |
|                | D.  Aplicar asientos        |                |
|                +-----------------------------+                |
|                                                               |
|                                                               |
|    +----------+ +----------+             +-----------+        |
|    | 0->Salir | | ?->Ayuda |             | Opcin: A |        |
|    +----------+ +----------+             +-----------+        |
+---------------------------------------------------------------+

Los  dos mens generados son agradables a la vista,  y  todos  los 
rtulos estn centrados.  Para pedir ayuda basta pulsar la tecla ? 
y para salir del men el nmero 0. En todos los mens generados se 
incluyen   de  la misma forma estas  dos opciones  (el   generador 
permite  redefinir estas dos teclas).  Si el usuario no pulsa  una 
opcin  vlida  (entre  A  y D en el Men Principal  y  en  el  de  
Procesamiento  de  Transacciones), entonces  el  sistema  responde 
sonando  la campana del computador,  y contina esperando por  una 
nueva opcin.  Adems,  tambin se despliega la fecha del da y el 
nombre  del men (\ para el principal,  y \A para la opcin A  del 
men principal,   en analoga a los caminos de archivos del  DOS).  
Los   mens  generados  cumplen entonces  con  los   cinco  puntos 
descritos al principio de esta seccin, y son consistentes.

La descripcin de estos dos mens  dada al generador no puede  ser 
ms  concisa:  se hace describiendo cada uno de los items del men 
en  una lnea,  dividida en seis columnas de  informacin.    Cada 
columna est separada de la siguiente por blancos.  Despus de  la 
quinta  columna,  o  sea  al final,  se  encuentra  el   texto   a 
desplegar por cada item.

En la primera columna se especifican las calidades de cada item de 
los mens  mediante un  cdigo: "m"  para mens,  "c" para  cdigo 
ejecutable, "a" para cdigo a ejecutar antes de desplegar el  men 
y "d" para cdigo a ejecutar despus de salir del men.

La   segunda columna indica el nivel del item.   Todo item  de  un 
men  debe  tener un nivel ms alto que el nivel del men  al  que 
est subordinado.  El cdigo m indica que el item es un men,  por 
lo  que  seguramente  ese item estar seguido  por  sus  subitems. 
Dentro  de un  men,  todos sus subitems tienen el mismo nmero de 
nivel.   Slo  los mens pueden tener subitems;   para los   otros 
tipos  de  items deben usarse archivos conteniendo  cdigo  fuente 
DBase III, como se explica ms adelante.

En el ejemplo anterior el segundo item (Proceso de Transacciones), 
que es un item del men principal y tiene nivel 1,  es seguido por 
el primero de sus subitems (Incluir un slo asiento),  de nivel 2. 
El  nivel  del  siguiente item cambia cuando  terminan  todos  los 
subitems  de  un  men,   como  es  el  caso  al  llegar  al  item 
(Consultas),  de nivel 1, o cuando un subitem es a su vez un men, 
como sera el caso de (Lea nmero de cuenta),  nivel 2.  El primer 
rengln es el nombre del sistema,  y el generador asume que es  el 
nico item de men de nivel 0, por lo que no debe especificarse.

En el ejemplo he indentado los subitems de cada men,  pero eso no 
es  realmente  necesario,  pues el generador ignora  los  espacios 
blancos  adicionales.  El especificar el nivel de cada item  puede 
parecer  engorroso,  y pareciera que indentar los subitems de cada 
men es mejor.  Pero cuando una aplicacin tiene muchos mens,  es 
difcil mantener la consistencia de la indentacin (recordemos que 
la  mayora  de  las  pantallas  tienen no ms  de  25  lneas  de 
despliegue,  y  que los editores de texto generalmente no  proveen 
ayudas para verificar la indentacin de lneas).

La  tercera  columna es un nombre nico para el  item  dentro  del 
men.   Este   nombre  es muy importante pues permite  cambiar  el 
orden  de  los subitems de un men sin mayores  consecuencias.  Al 
hacer  este  cambio usando otros generadores es necesario  recrear 
todo el men,  junto con todos sus subitems.  Para este  generador 
ese  no es  ese  el caso,   pues el nombre simblico de cada  item  
permite  moverlo   a otra posicin  con  libertad.   El  generador 
transforma  el  nombre   simblico de cada item en una  una  letra 
mayscula consecutiva empezando  por la A. Si la opcin de retorno 
asociada  a  un  item no es el nombre de  ningn  item  del  men, 
entonces  el sistema genera un 0,  que es la letra para salir  del 
men.

La cuarta columna indica el item de retorno. En todos los sistemas 
es usual ejecutar ms de un item en cada  men.  Entonces,  existe 
una  o  varias secuencias de uso de items del menu.   Mediante  el 
item  de  retorno  es  posible describir una (o tal vez  ms)   de  
estas  secuencias,   de  forma que al salir de un item  la  opcin  
siguiente ofrecida  al usuario por omisin es la que sigue en   la  
secuencia.  As,  el usuario no tiene que seleccionar la siguiente 
opcin del men pues le basta pulsar la tecla <Entrada>.

Por  ejemplo,  en el men (Proceso de Transacciones) la  secuencia 
ms  usual es la siguiente:  (Incluir un slo  asiento,  Balancear 
asientos;  Aplicar  asientos;  Salida).  Esta secuencia se expresa 
mediante  el  nombre  del item en la  cuarta  columna.  El  cdigo 
generado  entonces  tendr  como  opcin por  omisin  el  item  C 
(Balancear  asientos)  despus de ejecutar el item A  (Incluir  un 
slo asiento),  D (Aplicar asientos) despus de ejecutar el C, y 0 
(Salida  del men) despus del D.  Note que la opcin  de  retorno 
para el item D es ?,  que no es el nombre simblico de ningn item 
del men (Proceso de Transacciones).

La  opcin por omisin que el sistema asume al entrar a un men es 
siempre la primera, opcin A. Si el usuario no quisiera aceptar la 
opcin  por  omisin  ofrecida,   le  bastara  pulsar  la   letra 
correspondiente a otra opcin.  Por ejemplo,  si al entrar al men 
el  usuario  desea  comenzar  por  la  opcin  B  (Incluir  varios 
asientos),  en  lugar  de  teclear <Entrada> para  seleccionar  la 
opcin A, deber teclear una B.

En la quinta columna debe incluirse el nombre de un archivo. En el 
caso   de los items que son mens,  este archivo debe contener  el 
texto  a desplegar en las pantallas de ayuda del men.  Si el item 
no es men,   entonces el archivo debe contener  cdigo que   debe  
incluirse  dentro del programa para ejecutar  la  accin  descrita  
por   el item.   El generador en ambos casos copia estos  archivos 
dentro del programa principal,   en el caso de que existan.  Si no 
fuera  ese  el caso,   entonces genera un mensaje  indicndole  al 
programador   de  la  omisin.    Esto  permite   programar    por 
incrementos el sistema.

Los  archivos de ayuda para mens contienen texto que es  incluido 
dentro  del programa principal.  Los bloques de ayuda se  escriben 
usando cualquier editor de texto.  Este texto es complementado con 
lneas  de  ayuda  para cada uno de los items  del  men,  que  se 
obtienen  de  cada  uno de los  archivos  correspondientes  a  los 
subitems de cdigo del men. Es posible indicarle al generador que 
no incluya en el programa las pantallas de ayuda,  para evitar que 
el programa objeto resultante sea inmenso.

Es  importante  destacar que la ayuda especfica para cada uno  de 
los items se encuentra precisamente en el archivo que  corresponde 
a  cada  item,  de  modo  que no se  duplica  en  varios  archivos 
informacin sobre los items.  Si un item es movido en la jerarqua 
de mens, automticamente lo sern tambin sus lneas de ayuda, lo 
que permite reorganizar todo el sistema con un mnimo de esfuerzo. 
Esto  es muy importante para el desarrollo de prototipos,  en  los 
que  es  fcil  generar diferentes visiones del  sistema  para  el 
usuario rpidamente.

Entonces  a  cada item corresponde un archivo.  Para los mens  el 
archivo contiene el texto a desplegar cuando en el men el usuario 
seleccione  la  opcin de ayuda.  Para los subitems del  men,  el 
archivo  contiene  tanto el cdigo DBase III a ejecutar como  unas 
lneas  para  explicar  en  detalle  el  significado  del  subitem 
correspondiente.  Si  el  cdigo del item es a  o  d,  el  archivo 
correspondiente  debe  contener  cdigo a ser ejecutado  antes  de 
entrar o despus de salir al men, respectivamente. En estos casos 
el  sistema asume que los archivos correspondientes  no  contienen 
lneas de ayuda.

Como  los  archivos de cdigo a ser ejecutado al salir de un  men 
generalmente  contiene  acciones que   pueden   ser  irrevocables,  
entonces  es  posible  indicarle  al  generador   que  incluya  un  
mensaje  en que  se pregunte al  usuario  si realmente desea dejar 
el men.  Puede tambin generarse el sistema sin este mensaje, que 
es conveniente cuando los usuarios ya conocen bien el sistema.

Finalmente, es necesario mencionar que los archivos se incluyen en 
el programa en el orden en que aparecen  y,  como es el caso  para 
todos  los  archivos incluidos,  pueden a su vez incluir  a  otros 
archivos (ie., la inclusin es recursiva). Para incluir un archivo 
basta  que  la  primera palabra de un rengln sea *include  (a  al 
usanza  de  la mayora de los sistemas),  seguida del  nombre  del 
archivo a incluir.  Las lneas de ayuda en un archivo de cdigo se 
identifican  porque  su primera palabra es  *doc.  Si  el  archivo 
correspondiente  a un item de ayuda contiene lneas precedidas por 
la palabra *doc, entonces esas lneas se incluyen como descripcin 
detallada  en el men del que ese item es parte.  Esto  ltimo  es 
tambin vlido para submens: todas las lneas precedidas por *doc 
en  un archivo correspondiente a un item tipo m,  se incluyen como 
descripcin detallada del item en el men al que pertenece,  y  no 
se incluyen en la pantalla de ayuda del submen.

Para  usar  el DB3mnugn efectivamente,  el analista  debe  primero 
definir la estructura de mens del sistema.  Despus puede usar un 
programa   como   el  DFORMAT  para  generar  las   pantallas   de 
entrada/salida  del  sistema,  y  consultarlas  de  nuevo  con  el 
usuario.  La  etapa  final en la implementacin del sistema  sera 
escribir el cdigo correspondiente a la lgica del  sistema.  Para 
los  reportes  puede  usarse ya sea el generador de  reportes  del 
DBase III,  o alguno de los generadores de reportes disponibles en 
el mercado.

Al  principio  puede ser un poco difcil visualizar cmo  usar  el 
DB3mnugn,  pero  con  una pequea dosis de prctica es  muy  fcil 
visualizar  toda la jerarqua de mens,  y entonces el disear  la 
aplicacin  se  transforma  en  crear la concha de  mens  que  la 
contendr.  Esto  ayuda  a estructurar  el  diseo.  Otra  ventaja 
significativa  es que un sistema muy complejo queda  esquematizado 
en su estructura de mens.  Por ejemplo,  si la aplicacin tuviera 
tres  niveles de mens,  cada uno de 7 items,  el total de items a 
definir sera 73, que en lneas es 343, que caben en 6 pginas de 
60 lneas. Una aplicacin de ese tamao es realmente muy grande.


6. Ventajas Comparativas del DB3mnugn
=====================================

Es  necesario comparar el uso del DB3mnugn con otras  herramientas 
disponibles  en nuestro medio,  como el APPSGEN del DBase III y el 
EXPRESS del RBase 5000.

A  primera vista parece que los tres sistemas compiten  entre  si, 
aunque  realmente  no  es as.  El EXPRESS y el  APPSGEN  compiten 
directamente  entre  si,   pues  son  sistemas  interactivos  para 
programar  una  aplicacin completa.  Ambos permiten  definir  una 
estructura de mens,  e incluir acciones o archivos de cdigo para 
completar la aplicacin.  Desde ambos es posible entrar al  editor 
de  reportes  y  de pantallas,  o al de etiquetas para  listas  de 
correo. Aunque el DB3mnugn tiene algunos puntos en comn con estos 
generadores, en realidad los complementa.

El  EXPRESS de RBase 5000 permite generar  aplicaciones  completas 
interactivamente.  Esto  es  posible definiendo los  mens  de  la 
aplicaciones,  seleccionando las acciones para cada item de  men, 
incluyendo llamados al generador de reportes,  o incluyendo cdigo 
en la aplicacin generada.  Sin embargo,   las  acciones  en   los  
items   de  men  corresponden  a diferentes comandos del sistema, 
como EDIT o BROWSE,  que no tienen mucha  aplicabilidad  en  todos 
los sistemas.

El EXPRESS es ms poderoso que el APPSGEN, pues brinda un ambiente 
para generar la aplicacin, mientras que este ltimo se acerca ms 
a  ser un sistema dirijido por comandos,  en donde el  programador 
tiene ms oportunidad de equivocarse.  El RBase 5000 es un sistema 
ms  poderoso  que el DBase III,  lo que tambin se refleja en  su 
respectivo  generador de aplicaciones.  Por  ejemplo,  el  EXPRESS 
incorpora el incluir pantallas de ayuda de forma natural, mientras 
que en APPSGEN stas deben ser programadas explcitamente. Tambin 
cuenta con un generador de reportes realmente excelente,  mientras 
que  el  del  DBase  III  es  realmente  trivial,  y  para  muchas 
aplicaciones, insuficiente.
El  poder  real  del  EXPRESS es la  capacidad  de  generar  mens  
interactivamente,  junto con sus pantallas de ayuda. De hecho,  al 
desecharlo  para  despus trabajar con DBase III le  incorpor  al 
DB3mnugn las ideas del RBase 5000.  Para eso escrib el  generador 
de mens y he creado una metodologa de trabajo  alrededor de  l, 
a  fin  de  lograr una implementacin de  sistemas  ms  rpida  y 
correcta.

El  problema  principal  con el EXPRESS y el  APPSGEN  es  que  no 
facilitan el diseo de prototipos.  Cuando el programador comienza 
a  usarlos,  es  porque  ya  tiene  completamente  clara  toda  la 
estructura  del  sistema.  El  generador ayuda a pegar  todos  los 
pedazos, que deben haber sido claramente definidos de antemano. Es 
incmodo cambiar una aplicacin.  Aunque es posible,  para hacerlo 
es  necesario  recorrer varios mens,  y recordar  claramente  los 
nombres  de archivos en que el cdigo o las pantallas de ayuda  se 
encuentran.  Despus de un rato,  el disco duro se llena de muchas 
versiones  diferentes  de  la  aplicacin.   El  programador  debe 
entonces ser muy cuidadoso al hacer cambios, pues fcilmente puede 
confundirse, y dar al trasto con horas de trabajo.

Con  todos  los  generadores es posible crear  una  estructura  de 
mens.  Para  hacerlo  con  el  APPSGEN  es  necesario  una  nueva 
aplicacin  para cada item de men,  lo que limita severamente  el 
nmero  de  niveles  de mens que  pueden  definirse.  Cada  nueva 
aplicacin debe programarse como una subrutina,  por lo que poco a 
poco se va llegando ya sea al mximo nmero de archivos abiertos o 
de  procedimientos en un archivo de subrutinas.  Algo similar pasa 
con el RBase 5000.

Otro problema grande se presenta al cambiar de posicin un item de 
un  men,  ya sea usando el APPSGEN o el EXPRESS,  pues  no  estn 
concebidos para efectuar esta operacin fcilmente.  Para  hacerlo 
hay que borrar el item completo y recrearlo de nuevo en otro lado. 
Es  muy complicado si el item a su vez es un men,  pues  entonces 
hay  que  rehacer al item,  y a todos sus subitems.  Todo esto  se 
complica  ms  si  se quiere trasladar el item  a  otro  men.  En 
contrarste,  con el DB3mnugn basta mover con un editor el item  (y 
todos los subitems, que le siguen), y talvez cambiar los nmero de 
nivel  si  es  necesario.  Despus el generador lo  reagrupa  todo 
automticamente.

El  DB3mnugn  no  brinda ningn tipo de apoyo para  el  diseo  de 
pantallas,  o  para  programar cada  reporte.  Tampoco  ofrece  un 
ambiente  interactivo  para definir la  aplicacin.  Slo  genera 
mens  y pantallas de ayuda,  pero esto lo hace bien.  Es  posible 
cambiar rpidamente la posicin de un item en un men, o trasladar 
una jerarqua completa de mens de una lado a otro fcilmente.

Adicionalmente,  usando la misma entrada,  este generador es capaz 
de  producir  un programa de entrenamiento para el  novato,  o  un 
programa  totalmente  funcional que no tenga pantallas  de  ayuda. 
Permite  crear la jerarqua de mens junto con todas sus pantallas 
de ayuda cmodamente.  La definicin de los mens se hace de forma 
natural,  y  todos  los componentes  estn  integrados. 

La ventaja principal del DB3mnugn es que permite al programador  o 
analista  crear  un prototipo de la aplicacin  rpidamente,  para 
luego  discutirla  con el usuario.  Una vez que los  mens  de  la 
aplicacin  han  sido definidos,  esta concha puede ser llenada  a 
conveniencia.   El   prototipo   producido   por   DB3mnugn   debe 
implementarse  por  partes,  ya  sea de arriba hacia  abajo  o  en 
cualquier otra forma.

El  DB3mnugn  puede ser mejorado de muchas  formas.  Por  ejemplo, 
sera  bueno  que tuviera una interfaz interactiva que  permitiera 
editar  cmodamente todos los mens.  Adems,  podra tratarse  de 
incluirle  algunas  de las funciones que el  EXPRESS  tiene,  como 
generacin de pantallas y reportes,  o una estructura formal  para 
programar   la  aplicacin.   Tambin  sera  interesante  incluir 
opciones  para desplegar los items de mens de diferentes  formas. 
Por  ejemplo,  desplegar todos los items que estn al mismo  nivel 
juntos,  desplegar  todos los items de un men.  En fin,  luego de 
usar el sistema por un rato, cualquier programador puede encontrar 
muchas   mejoras  deseables.   Sin  embargo,   todos   estos   son 
condimentos,  pues  la  parte central del sistema ya se  encuentra 
programada.

Lo correcto entonces es usar mi generador para hacer los mens,  y 
despus  completar  el  sistema usando otras  herramientas  si  es 
necesario.

Del  buen uso de una herramienta depende en gran parte el  aumento 
de  la productividad.  En el caso de este generador de  mens,  el 
diseador  debe usarlo para crear primero un  prototipo,  y  luego 
para  implementar  su  aplicacin.  Esta herramienta  debe  usarse 
dentro  de una sana aplicacin de las diferentes  metodologas  de 
implantancin  de  sistemas  de  computacin,   y  su  efectividad 
depender  en gran parte de la pericia del analista/programador  a 
cargo de la implementacin.


7. Estructura del Programa Generado
===================================

En un lenguaje que permita el manejo completo de bloques lo lgico 
es   que   cada  men  sea  programado   como   un   procedimiento 
autocontenido.  La primera parte del procedimiento desplegara  el 
men,  y  en la segunda se incluira un llamado a cada uno de  los 
procedimientos   correspondientes   a   cada   item   del    men. 
En Pascal el cdigo se vera as:

type
   ItemLista = record
     n: string;                        { nombre del item        }
     i: array['A'..'G'] of ItemLista^; { puntero a los subitems }
     h: ayuda^;              { puntero a las pantallas de ayuda }
   end; {ItemLista};
procedure menu_ABCC(items: ItemLista);
{ implementa el item \ABCC del Sistema Contable: CIA Ejemplo }
var
   opc, ult: char; salir: boolean;
begin
antes_ABCC; { cdigo a ejecutar antes de desplegar el men }
opc := 'A';   ult := 'A';     { opcin inicial por omisin }
salir := false;
while not salir do begin
   despliegue_menu(items);
   opcion(opc);  { lea la opcin elegida por el usuario }
   ult := opc;
   case opc of
   'A': menu_ABCCA(items.i['A']^); opc := 'B'; { siguiente item }
   'B': .....;                     opc := 'C';
         .
         .
   'H': .....; opc := 'A';
   '0': if esta_seguro(items) then salir := true;
   '?': despliegue_ayuda(h); opc := ult;
   else
      Beep; opc := ult; { recuerda opcin anterior }
end;
despues_ABCC;
end; {menu_ABCC}

Los procedimientos antes_XXX()  y despues_XXX() corresponden a  la 
concatenacin de todos los archivos a ejecutar antes y despus del 
men. El procedimiento despliegue() toma la informacin  contenida 
en  item  y  despliega   la  pantalla  correspondiente  al   men.  
"opcion"  se  encarga de  leer la  siguiente opcin  del usuario, 
permitindole  seleccionar la opcin  actual al teclear <Entrada>. 
despliegue_ayuda()  se encarga de desplegar todas las pantallas de 
ayuda para el men. Finalmente, la funcin esta_seguro()  pregunta 
al usuario si realmente desea dejar el men.

Como   DBase  III tiene restricciones para el uso de   subrutinas,  
en lugar  de  usar un procedimiento para cada  subitem  de   men,  
es  necesario  copiar  el  cdigo  correspondiente.   El  programa 
resultante es  muy grande pero tiene una estructura  perfectamente  
definida,  que sigue en mucho al patrn descrito en Pascal.   Cada 
men  tiene asociado el siguiente bloque de cdigo DBase III:

ult4 = 'A'
opc4 = 'A'
sal4 = .F.
DO WHILE .not. sal4
   CLEAR
   @  2, 0 SAY "Men: \ABCD"
ENDDO

Para no usar subrutinas,  el generador anida todo el cdigo de  un 
submen   dentro  de  la  opcin  correspondiente  en   el   men. 
Esquemticamente:

DO WHILE   Men \
|
|    +--- Opcin 'A'
|    +--- Opcin 'B'
|    +--- Opcin 'C' Men \C
|         Cdigo a ejecutar antes del men \C
|         DO WHILE Submenu \C
|         |
|         |    +--- Opcin 'A'
|         |    +--- Opcin 'B'
|         |    +--- Opcin 'C'
|         |    +--- Opcin 'D'
|         |    +--- Ayuda  '?'
|         |    +--- Salir de \C?
|         +--------
|         Cdigo a ejecutar al dejar men \C
|    +--- Opcin 'D'
|    +--- Opcin 'E'
|    +--- Ayuda  '?'
|    +--- Salir de \?
|--------

La  estructura del programa es realmente muy sencilla.   El cdigo 
correspondiente  a  las  acciones  a  ejecutar  antes  del    men 
simplemente aparece antes de el cdigo para desplegar el  men,  y 
ocurre  similarmente con el cdigo de las acciones a  ejecutar  al 
dejar  el men.  El cdigo para desplegar las pantallas  de  ayuda 
tambin  aparece incluido bajo la opcin correspondiente  en  cada 
men.


8. Detalles Adicionales del Generador
=====================================

Para correr DB3mnugn basta llamarlo desde el indicador de comandos 
del  MS-DOS,  o se puede tambin correr usando el verbo RUN  desde 
DBase III.

La  primera accin del generador es leer el archivo  DB3mnugn.CFG, 
en  el  que se definen en cada lnea cada uno  de  los  siguientes 
parmetros:

Parmetro Omisin Explicacin

entrada     s        Nombre del archivo de entrada
salida      t.prg    Nombre del archivo de salida
menu-ayuda  no       Incluya pantallas de ayuda del men
item-ayuda  no       Incluya las lneas de ayuda de cada item
preg-salir  no       Cdigo para preguntar al salir del men
tutor       no       Genere un tutor en vez de la aplicacin

Generalmente  para  usar el sistema se carga un  editor  residente 
como  SideKick,  en  el  que  se edita el  archivo  de  entrada  a 
DB3mnugn. Despus se corre el DBase III, desde donde se ejecuta el 
generador,  por  medio del comando RUN.  Para hacer cambios en  la 
jerarqua de mens basta llamar al SideKick para editar el archivo 
de entrada.  Luego puede generarse de nuevo el programa, que queda 
por omisin en el archivo t.prg,  y correrlo inmediatamente con el 
comando "do t" del DBase III.

El  cdigo  generado  por  DB3mnugn  no  aparece  indentado.  Para 
indentarlo basta correr el programa DB3indnt, que tambin busca un 
archivo  de configuracin llamando DB3indnt.CFG,  que contiene  el 
nombre  de los archivos de entrada y de salida.  Las opciones  por 
omisin para este programa son t.prg para la entrada, y s.prg para 
la salida.

Para  la  pantalla  de  ayuda de cada  men  el  generador  acepta 
cualquier  nmero de lneas,  y genera cdigo para desplegarlas en 
panatallas de 18 lneas cada una.  Para los items de cada men, el 
generador  acepta  hasta  18 lneas,  que  se  despliegan  en  una 
pantalla por cada item.  Al correr la aplicacin, tanto las ayudas 
de  items  como de mens se despliegan al seleccionar el botn  de 
ayuda en el men.

Para controlar los mens en cada nivel,  el generador hace uso  de 
varias variables (ultX,  opcX,  salX, etc. donde X es el nivel del 
men).  El  programador debe cuidarse de no usar estas  variables, 
pues de hacerlo cambiara el comportamiento del sistema.

Dada  la forma del cdigo generado por DB3mnugn,  es  recomendable 
compilar la aplicacin generada,  pues de otra manera el tiempo de 
respuesta se puede hacer muy grande.

El  generar  una aplicacin completa toma un poco de  tiempo  (del 
orden  de  minutos  para aplicaciones  grandes),  por  lo  que  es 
recomendable  aislar  cada  parte y depurarla en el  ambiente  del 
generador.  Luego  simplemente  puede integrarse al  resto  de  la 
aplicacin copiando las lneas de men en el archivo de definicin 
de la aplicacin completa.

Los  nombres de campos usados en las primeras columnas del archivo 
en que se define la aplicacin pueden tener una longitud hasta  de 
35 caracteres.  Sin embargo,  para sistemas pequeos es ms cmodo 
usar nombres de un slo caracter.

El generador crea los archivos DB3mnugn.LOG y DB3mnugn.ERR, en los 
que  se  detallan las acciones realizadas,  y se incluyen  algunos 
mensajes  de error.  Estos ltimos no son todo lo completo que  se 
puede, dado que DB3mnung es todava un prototipo.

Los  programas  mencionados en este artculo,  junto  con  algunos 
ejemplos y una copia de este artculo,  pueden obtenerse  enviando 
un diskette de 360k, formateado, a la siguiente direccin:

                         Sistema DB3mnugn
                    Escuela de Ciencias de la
                    Computacin e Informtica
                    Universidad de Costa Rica
                      San Pedro, Costa Rica


     Todas estas  implementaciones estn  disponibles en  Internet
por medio de ftp annimo en el directorio:

     http://www.di-mare.com/adolfo/p/src/DB3mnugn.zip

     Los derechos de autor  estn reservados  a nombre  del autor,
Adolfo Di Mare.


9. Conclusiones
===============


He  descrito un sistema para generar una jerarqua de  mens,  que 
puede  ser  usado  para documentar un sistema y  para  ensear  al 
novato a usarlo. Pero la principal aplicacin de este generador es 
ayudar al analista/programador a definir,  preferiblemente junto a 
su usuario, la forma que el sistema final tendr. El sistema ayuda 
a   la   particin  del  problema  en  mdulos,   y   permite   la 
implementacin por incrementos del programa final.

Las ventajas principales de usar DB3mnugn son las siguientes:

1-   Permite el desarrollo de prototipos, de forma natural.

2-   Permite el desarrollo de tutores, con mucha facilidad.

3-   Presenta una interfaz estndar para los sistemas.

4-   El sistema queda esquematizado en su estructura de mens.

5-   Facilita la descomposicin en mdulos de la aplicacin.

6-   El generador detecta los mdulos no programados del sistema.

7-   Ayuda a acomodar un sistema genrico a cada usuario.

Este  generador  es una herramienta de gran utilidad tanto  en  el 
diseo  como en el mantenimiento de sistemas de aplicacin  usando 
DBase III.

El  sistema  descrito  de hecho est siendo usado  para  programar 
sistemas  de mediana complejidad en nuestro medio.  Representa  un 
primer esfuerzo por incursionar en el campo de la alta  tecnologa 
aplicable  a  nuestra realidad nacional.  En un corto plazo  otros 
esfuerzos  como  este  fructificarn,   redundando  en  riqueza  y 
competitividad para nuestro pas en el campo de la computacin.


10. Agradecimientos
===================


Las  estudiantes Guiselle Arias,  Marianela Tenorio,  Margarita  y 
Rosa  Iris  Sols tuvieron la paciencia de programar  una  versin 
inicial  del  sistema  de  estudiantes  de  la  ECCI,  en  que  he 
ejercitado este programa.

El  MSc  Ronald Argello y el Dr Vladimir Lara  sugirieron  varios 
cambios  interesantes.  Adems,  tuvieron la delicadeza de leer el 
manuscrito original.

Junto a la escuela de Ciencias de la Computacin e Informtica, la 
Vicerrectora de Investigacin aprob mi proyecto de investigacin 
en Bases de Datos y del Conocimiento,  dentro del programa  PIBDC, 
lo que me ha dado el tiempo necesario para completar este trabajo. 
Espero  que  ese  esfuerzo de la Universidad se  concrete  en  ms 
productos directamente relevantes a nuestra realidad nacional.

Finalmente,  el MSc Ral Alvarado,  Director de la ECCI,  tuvo  la 
confianza  de permitirme desarrollar el sistema de informacin  de 
la  Escuela,  lo que me ha permitido probar las ideas que aqu  he 
discutido.

11. Lecturas Recomendadas
=========================

[ASHT-86] Ashton-Tate; "Manuales del DBase III Plus";  Ashton-Tate 
          Publishing Company, 1986.

          Los manuales del DBase III.  Desgraciadamente estn  mal 
          estructurados, y en conjunto suman ms de 1000  pginas.  
          Es  necesario leerlas todas para  usar todo el poder del 
          paquete.

[CURT-82] Curtice, Robert  M., Paul E.   Jones Jr.; "Logical  Data 
          Base Design"; Van Nostrand Reinhold Company; 1982.

          Un buen  libro que  expone una  metodologa coherente  y 
          completa  para  el  diseo   de  bases  de  datos.    Un 
          complemento necesario al libro de Tom De Marco.

[DATE-86] Date,  C.J.; "Introduccin  a los  sistemas de  bases de 
          datos"; Addison-Wesley Iberoamericana; 1986.

          En mi opinin,  este sigue siendo  el mejor texto  sobre 
          bases de datos.  Cubre todos los aspectos relevantes,  y 
          tiene muy buenos ejemplos.

[DEMA-79] De   Marco,   Tom;  "Structured   Analysis  and   System 
          Specification"; Prentice-Hall, Inc.; 1979.

          El texto definitivo para anlisis de sistemas, en el que 
          la  construccin  de  sistemas  se  presenta  como   una 
          actividad profesional, y  no  como  un  arte  sujeto  al 
          capricho del analista.

[MICR-85] MicroRim; "Manuales del RBase 5000"; MicroRim; 1985.

          Los manuales del RBase 5000 estn mejor organizados  que 
          los del DBase III,  aunque siempre es necesario  leerlos 
          todos para usar  el  sistema  en  todo  su  poder.   Sin 
          embargo,  estn bien estructurados  y es fcil encontrar 
          detalles del sistema cuando se necesitan.

[WIRT-83] Wirth, Niklaus;  "Programming  in  Modula-2";  Springer- 
          Verlag; 1983.

          Modula-2 es  el  paso  siguiente  en  la  tecnologa  de 
          lenguajes de  programacin.  Este  novedoso lenguaje  es 
          simplemente  una  obra  maestra,  y  seguramente  en  el 
          mediano plazo ser la  herramienta base para la  mayora 
          de los sistemas.
