Story Transcript
COBOL: HISTORIA Y USO (Traducción de un texto de www.csic.ul.ie)¿QUÉ ES COBOL? Introducción COBOL es un lenguaje de programación de primer nivel desarrollado por el Comité CODASYL (Conference on Data Systems Languages, Conferencia sobre lenguajes de sistemas de datos) en 1960. Desde entonces, la responsabilidad de desarrollar nuevos estándares COBOL ha sido asumida por el Instituto ANSI de estándares americanos. Se han producido estándares ANSI para COBOL en 1968, 1974 y 1985. Actualmente se está produciendo un nuevo estándar de COBOL que introducirá la programación orientada a objetos, y será lanzado en los próximos años. COBOL es un acrónimo de Common Business Oriented Language, lenguaje orientado a negocios. Tal como su propio nombre indica, este lenguaje se diseñó para desarrollar aplicaciones de negocios, típicamente orientadas a archivos. No fue ideado para crear aplicaciones para sistemas, es decir, no podríamos, por ejemplo, crear un sistema operativo o un compilador utilizando COBOL. Expansión de COBOL Durante casi 4 décadas, COBOL ha sido el lenguaje de programación dominante en el campo del diseño de aplicaciones para negocios. Durante todo este tiempo ha visto nacer otros lenguajes como PL1, Algo68, Pascal, Modula, ADA, C y C++. Todos estos lenguajes han encontrado su sitio pero ninguno ha conseguido desplazar a COBOL. Actualmente existen, no obstante, dos lenguajes que le hacen una seria competencia: Java y Visual Basic. La expansión mundial de COBOL ha sido seguida por el grupo Gartner Group: • En 1997, estimaron que existían aproximadamente unos 300 billones de líneas de código en todo el mundo, de las cuales el 80% estaban escritas en COBOL y el 20% restante en todos los otros lenguajes. • En 1999 informaron de que el 50% de las nuevas aplicaciones importantes de misión crítica seguían estando diseñadas en COBOL. • Para 2002 preveían que existieran dos millones de programadores de COBOL a lo largo de todo el mundo comparados con el millón de programadores de Java, o el millón de programadores de C++. • Se calcula que en 2004/2005 aún el 15% de las aplicaciones importantes estén diseñadas en COBOL, y que el 80% del total tengan extensiones a librerías u otros recursos diseñados en COBOL. El éxito de COBOL La mayoría se sorprende cuando se da cuenta de que las cifras se inclinan claramente a favor de COBOL en el dominio del mercado. El entorno de algunos lenguajes trataría de convencernos de que la mayoría de la producción en el mundo se hace en Java, C, C++ o Visual Basic y que solo un pequeño porcentaje está hecha en COBOL, pero la realidad es bien distinta. Una de las razones para esta concepción errónea radica en la diferencia entre el software vertical y el horizontal:
1
En el mercado del software vertical, las aplicaciones requieren de millones de dólares de inversión para su producción, están dirigidas a empresas concretas, rigen las reglas de esa compañía, y existe un pequeño número de copias funcionando en todo el mundo. Un ejemplo es el sistema DoD MRP II, que funciona en grandes servidores en determinados puntos geográficos de EE.UU., y sirve para organizar componentes de equipos con inventarios por valor de alrededor de 28 billones de dólares. En el mercado del software horizontal, las aplicaciones pueden costar millones de dólares en ser desarrolladas, pero existen cientos de miles, incluso millones de copias funcionando en todo el mundo. Estas aplicaciones suelen tener alta reputación, durar poco tiempo y tener un coste relativamente bajo por cada copia. Como ejemplo tenemos la suite ofimática de Microsoft, Office (Word, Excel, Access, PowerPoint, etc.). Debido a la naturaleza competitiva de este mercado, y teniendo en cuenta la importancia de velocidad, tamaño y eficiencia, se utilizan lenguajes como C o C++ para crear las aplicaciones. Características de aplicaciones hechas en COBOL Como hemos visto con el DoD MRP II, las aplicaciones hechas con COBOL suelen ser de gran tamaño. La mayoría contienen mas de un millón de líneas de código − y las tiendas tienen programas de más de seis millones de líneas de código que no consideran inusualmente grandes. Las aplicaciones en COBOL también tienen una larga duración temporal. Las inversiones millonarias se realizan cerciorándose de que un programa no se quedará anticuado con la aparición de un nuevo lenguaje u otro programa. Como consecuencia, nos encontramos con que existen aplicaciones que llevan utilizándose durante períodos de entre 10 y 30 años. En esto también cuenta la cantidad de programas en COBOL que sufrieron el problema del año 2000 frente a las que lo hicieron y estaban hechas con C o C++ (doce millones frente a 375 mil), ya que hace veinte años, los programadores no se plantearon el problema del milenio. Las aplicaciones hechas en COBOL frecuentemente se usan en áreas críticas de negocios. Por ejemplo, el 95% de los datos de las aplicaciones de finanzas y seguros son procesados mediante COBOL. Las serias consecuencias legales y financieras que implicarían fallos en los programas son razones para el pánico creado con la llegada del efecto 2000. Las aplicaciones hechas en COBOL suelen mover y utilizar grandes cantidades de datos. No es raro hablar de archivos de bases de datos de terabytes de peso. Características que contribuyen al éxito de COBOL • COBOL es un lenguaje autodocumentado Una de las metas en la creación de COBOL era que fuera posible para agentes no programadores como supervisores, administradores y usuarios, poder revisar el código sin conocer el lenguaje. Como resultado, COBOL contendría muchos elementos estructurales ingleses, como verbos, instrucciones, secciones y divisiones. De todas maneras, ésta meta no fue conseguida en su totalidad; los administradores y los usuarios no leen programas en COBOL, dado que son demasiado complejos para ser entendidos por mucha gente de negocios, a pesar de la familiaridad de los elementos sintácticos. Pero el intento ha tenido un efecto relativo, y es que COBOL es actualmente el lenguaje autodocumentado más fácil de entender. • COBOL es simple COBOL es un lenguaje simple (no tiene punteros ni funciones o tipos definidos por el usuario) con un campo limitado de funcionalidad. Curiosamente y a pesar de sus limitaciones, COBOL ha demostrado estar muy bien dotado para el dominio de las aplicaciones para las que se creó (informática de negocios). La mayoría de los programas en COBOL operan en un dominio en que la complejidad reside más en la codificación de las reglas 2
de los negocios a los que se destina que en la sofisticación de las estructuras de datos o algoritmos requeridos. Y en estos casos, COBOL resuelve los problemas con instrucciones como SORT y SEARCH. • COBOL es portable El estándar COBOL no pertenece a ninguna marca concreta. El Comité ANSI COBOL legisla estándares de semántica y sintaxis que no son específicos de una marca. COBOL es virtualmente portable a cualquier tipo de máquina, desde Windows hasta UNIX pasando por VSE, OS/2, VMS, Unisys, DG, VM y MVS. • COBOL es mantenible COBOL tiene una carrera de más de 30 años de mantenimiento de software, habilitación y producción de soporte a nivel de empresa. Los informes del problema del año 2000 revelaron que las aplicaciones en COBOL eran mucho más baratas de reparar que la gran mayoría de los otros lenguajes. Una de las razones de la facilidad de mantenimiento de las aplicaciones COBOL ha sido ya citada: su facilidad de interpretación y legibilidad. Otra razón es la rígida estructura jerárquica de que dispone. LO BÁSICO DE COBOL Idiosincrasias de COBOL COBOL es uno de los lenguajes más antiguos que aún se mantiene en uso. Como consecuencia, tiene unas idiosincrasias que los programadores acostumbrados a otros lenguajes pueden encontrar irritantes. Cuando COBOL se diseñó, a finales de los 50, una de las metas que se propusieron era hacerlo lo más parecido posible al idioma inglés. Como resultado, COBOL utiliza conceptos estructurales asociados a texto inglés como por ejemplo sección, párrafo e instrucción. Dispone también de una extensa lista de más de 300 palabras reservadas. COBOL tiende a parecer demasiado palabrero sobre todo cuando se compara con lenguajes como C. Cuando COBOL se diseñó, los programas aún se escribían y leían mediante tarjetas perforadas y formularios de codificado. Estos medios requerían un tipo de formato para los números entre otras cosas que aún las implementaciones actuales necesitan en ocasiones, aún a pesar de que su necesidad ya no exista. Aunque las versiones modernas de COBOL (COBOL 85 y OO−COBOL) han introducido muchas construcciones modernas para crear programas bien estructurados, mantienen elementos que, de usarse, dificultan y en ocasiones imposibilitan la creación de programas bien estructurados. Sintaxis de COBOL La sintaxis de COBOL está definida usando una notación particular que se suele llamar MetaLenguaje COBOL. En esta notación, las palabras en mayúsculas son siempre palabras reservadas. Si una palabra está subrayada, significa que es obligatoria su inclusión; si no lo están, pueden considerarse ruido o explicaciones con respecto a los demás comandos, para su legibilidad. Dado que COBOL trata de parecerse al idioma inglés, hay muchas de estas palabras ruido. Las palabras con mayúsculas y minúsculas representan nombres, y como tal, deben ser ideados por los propios programadores.
3
Cuando hay material encerrado entre llaves { }, se trata de opciones que deben elegirse de entre los elementos contenidos, como si de un conjunto algebraico se tratase. Cuando hay elementos encerrados entre corchetes [ ], indica que el material es opcional, y puede ser incluido u omitido según se requiera. Cuando se encuentran puntos suspensivos ... indica que el elemento sintáctico precedente puede ser repetido o continuado a voluntad del programador. Notas sobre diagramas sintácticos Para simplificar los diagramas sintácticos y reducir las reglas a explicar, en algunos diagramas se utilizan elementos operadores como sufijo (se utilizan como ejemplo, no forman parte del estándar COBOL); tenemos por ejemplo $i para un elemento alfanumérico, $il para un alfanumérico o un literal, #i para un elemento numérico, #il para uno numérico literal, y $#i para una combinación de ellos. Diagrama sintáctico de ejemplo En COBOL, evaluar una expresión aritmética, y asignar el resultado a una variable de datos se consigue mediante el comando COMPUTE. A continuación vemos el diagrama sintáctico de COMPUTE: COMPUTE {Result#i [ROUNDED]} ... = Expresión aritmética [{
ON SIZE ERROR ]}Instrucciones END NOT ON − COMPUTE SIZE ERROR
Este diagrama se interpretaría de la siguiente manera: Empezamos una instrucción COMPUTE con la palabra COMPUTE. Seguimos con el nombre de la variable numérica (o los nombres, véanse los puntos suspensivos) para recibir el resultado de la expresión. El sufijo #i tras la variable Result nos indica que se trata de un identificador numérico. Dado que los puntos suspensivos están colocados fuera de las llaves, interpretamos que cada resultado puede estar ROUNDED o no. En otras palabras, podríamos tener una instrucción como: COMPUTE Result1 ROUNDED, Result2 = ((9*9))+8)/5 donde Result1 tendría el valor 18, y Result2 tendría el valor 17.8. Los corchetes tras la Expresión Aritmética indican que los siguientes ítems son opcionales, pero si se usan deberemos elegir entre las frases ON SIZE ERROR y NOT ON SIZE ERROR. Como END−COMPUTE está encerrado entre llaves, solo se usará si se ha usado primero una de las dos frases anteriores. Construcción de nombres Todos los nombres definidos por el usuario como variables, párrafos, secciones o condiciones deben ser mnemónicos, y seguir estas reglas:
4
• Deben tener un número de caracteres superior o igual a 1, e inferior a 31. • Deben contener al menos 1 carácter alfabético. • No deben comenzar con un guión (−). • Deben estar compuestos de caracteres de la A a la Z (sin Ñ), números del 0 al 9, y el guión. • No deben tener espacios en blanco entre caracteres. • No se distinguen mayúsculas de minúsculas por lo que VAR es lo mismo que Var, y que var. Estructura de programas COBOL Los programas COBOL tienen estructura jerárquica. Cada elemento de la jerarquía puede tener uno o más elementos subordinados. La jerarquía es Divisiones, Secciones, Párrafos, Oraciones y Expresiones. Una División puede contener una o más Secciones, una Sección uno o más Párrafos, un Párrafo una o más Oraciones, y cada Oración una o más Expresiones. • División Es un bloque de código, normalmente contiene una o más secciones, y comienza donde se encuentra el nombre de la División, y termina con la siguiente División o con el fin del programa. • Sección Podemos aplicar la misma definición que en División. Los nombres de secciones pueden ser creados por el programador o venir ya definidos en el lenguaje. Un nombre de sección va seguido de SECTION y un punto: VerFacturas SECTION. FILE SECTION. • Párrafo Bloque de código... etc. El nombre del Párrafo va seguido solamente de punto. • Oraciones y Expresiones Una Oración está formada por una o más Expresiones y termina con un punto, como por ejemplo: MOVE .21 TO Ratio MOVE 1235.76 TO CosteProducto COMPUTE Total = CosteProducto * Ratio Una Oración consiste en un Verbo COBOL y uno o varios operandos: SUBSTRACT Tasas FROM Pagos GIVING PagoNeto LAS CUATRO DIVISIONES 5
Introducción En la parte superior de la jerarquía de COBOL se encuentran las 4 Divisiones. Éstas dividen un programa en distintos elementos estructurales. Algunas de las Divisiones pueden ser omitidas, pero la secuencia en que han de especificarse es fija, y es la que sigue: División de Identificación: Contiene información de programa División de Entorno: Contiene información del entorno División de Datos: Contiene descripciones de datos División de Procedimientos: Contiene los algoritmos del programa La División de Identificación Esta División contiene información acerca del programa que resulta útil para el programador y para el compilador. La mayoría de las entradas de esta División son para el programador, y el compilador sencillamente las trata como comentarios. La cláusula PROGRAM−ID es una excepción a esto. Todo programa en COBOL ha de tener la cláusula PROGRAM−ID, ya que el nombre especificado tras ella es usado en el proceso de linkado al linkar un número de subprogramas en una unidad, y por la instrucción CALL al transferir el control a un subprograma. La División de Identificación tiene la siguiente estructura: IDENTIFICATION DIVISION PROGRAM−ID. NombreDelPrograma. [AUTHOR. NombreDelAutor.] otras entradas La primera línea representa la cabecera de la División, y señal de comienzo del texto del programa. La segunda línea es un nombre de Párrafo que debe especificarse justo tras la cabecera de la División. El nombre NombreDelPrograma es creado por el programador y debe satisfacer las reglas de nombres de COBOL. La División de Entorno Esta División se utiliza para describir el entorno en que funcionará el programa. El propósito de esta División es aislar en un lugar todos los aspectos del programa que dependen de una máquina, dispositivo o secuencia de codificado específicas. La idea y la finalidad principales son la facilidad de modificación del programa cuando éste es llevado a otra máquina, o ha de ejecutarse con diferentes dispositivos periféricos.
6
En esta División, se asignan alias a los dispositivos externos, archivos, o secuencias de comandos. Otros detalles de entorno, como las secuencias de comparación, el símbolo de moneda, o el símbolo de la coma decimal, deben ser especificados aquí. La División de Datos Como su nombre indica, esta División contiene las descripciones de los datos que serán procesados por el programa. Hay dos Secciones principales: la de Archivos y la de Trabajo/Almacenamiento. Pueden añadirse otras Secciones, como la de Linkado (para subprogramas) y la de Informes (para programas generadores de informes). La Sección de Archivos se usa para describir los datos que se envían o se reciben de los periféricos de la máquina. La Sección de Trabajo/Almacenamiento se usa para describir variables del programa. Aquí tenemos la estructura de la División de Datos: DATA DIVISION. FILE SECTION. [
] [
entradas de la Seccion. WORKING−STORAGE SECTION entradas de la Seccion.
]
La División de Procedimientos Esta División contiene el código utilizado para manipular los datos descritos en la División anterior. Es aquí donde el programador describe su algoritmo. Esta División tiene una estructura jerárquica y se compone de Secciones, Párrafos, Oraciones y Expresiones. Solo la Sección es opcional; esta División ha de tener obligatoriamente un Párrafo, Oración y Expresión, y sus nombres han de seguir las reglas de nombres. Programa de ejemplo IDENTIFICATION DIVISION. PROGRAM−ID. Secuenciacion. AUTHOR. Carlos S Melon Fdez. DATA DIVISION. WORKING−STORAGE SECTION. 01 Num1 PIC 9 VALUE ZEROS.
7
01 Num2 PIC 9 VALUE ZEROS. 01 Resultado PIC 99 VALUE ZEROS. PROCEDURE DIVISION. CalculaResultado. ACCEPT Num1. ACCEPT Num2. MULTIPLY Num1 BY Num2 GIVING Resultado. DISPLAY El resultado es = , Resultado. STOP RUN. 1 8
8