Alters

COBOL: primeros pasos


Hola de nuevo,
Como comenté en entradas anteriores, voy a dar un pequeño paseo por el mundo Cobol. El hecho de que sea en Cobol es porque, ya que poseo el título de "Técnico Superior en Desarrollo de Aplicaciones Informáticas y Experto en COBOL", me gustaría transmitiros un poco de mi conocimiento en este buen lenguaje de programación.

Como las entradas anteriores, voy a dividir cada punto del curso en una entrada, para que sea más legible.

Sin más, empecemos

 - Primeros pasos
   * Algo de historia
   * ¿Por qué COBOL?
   * Aspectos a tener en cuenta
   * Visión global
      · Division
      · Section
      · Párrafo
      · Línea
      · Plantilla básica

Algo de historia:

COBOL fue un lenguaje de programación creado por "CODASYL", una comisión de varias entidades, entre la cual se encontraba el Departamento de Defensa de los Estados Unidos.
Vio la luz en el año 59, y ha sido sometido a diversas remodelaciones y adaptaciones. Actualmente hay versiones que incluyen soporte para "emular" OOP (programación orientada a objetos), incluso aspectos visuales. Se puede incluso programar webs con cobol.

Como anotación, decir que los conocimientos que tengo son de RM/COBOL-85. Éste fue el penúltimo estándar, aunque en el nuevo estándar (ANSI-COBOL) añadieron funciones matemáticas, por lo que con el 85 en realidad basta, ya que estas funciones matemáticas son relativamente avanzadas, y las podemos crear con código.

No me gusta aburrir mucho con la historia, así que este punto lo doy por zanjado con la siguiente conclusión: no se puede decir que COBOL es un lenguaje en desuso, y mucho menos que no es actual; ya que continuamente evoluciona. Es por eso que la historia de cobol todavía no está terminada.

¿Por qué COBOL?

Sencillo. Para explicar esto a grandes rasgos, usaré un fragmento de la wikipedia:

"Pese a que muchas personas creen que el lenguaje COBOL está en desuso, la realidad es que casi todos los sistemas que requieren gran capacidad de procesamiento por lotes (Batch), tanto las entidades bancarias como otras grandes empresas con sistemas mainframes utilizan COBOL. Esto permite garantizar la compatibilidad de los sistemas antiguos con los más modernos, así como tener la seguridad de que el lenguaje es perfectamente estable y probado. Según un informe de Gartner Group de 2005, el 75% de los datos generados por negocios son procesados por programas creados en COBOL, y en otro informe de 1997 estima que el 80% de los 300.000 millones de líneas de código existentes están creados en COBOL, escribiéndose 5.000 millones de líneas nuevas de COBOL cada año. Con todo eso, hoy por hoy, la programación en COBOL es uno de los negocios más rentables del mundo de la informática. En el resto de aplicaciones el COBOL ha caído en desuso, reemplazado por lenguajes más modernos o versátiles.
Pero no todo es así. Hoy (2012) siguen existiendo decenas de miles de usuarios Cobol e instituciones que siguen instruyendo este lenguaje dados los números informados. Cobol sigue estando soportado y sigue evolucionando permanentemente; esto principalmente por la cantidad de aplicaciones que hoy sigue funcionando y que superan en número a los demás lenguajes gracias a tanta difusión en el pasado. Esto sigue propiciando su continua evolución y, palabras del propio Bill Gates: "No sé qué lenguajes habrá en el futuro, pero seguro que Cobol estará todavía allí".2"

Si lo leéis completo, veréis que al año, 5.000 millones (sí, sí, 5.000.000.000, 5*10^9) de líneas se escriben cada año.

Otra razón es el conocimiento que tengo de este lenguaje. No todo el mundo sabe cobol, y me parecería algo egoísta no pasar mis conocimientos... es difícil encontrar alguien dispuesto a eso, a pasar conocimiento gratuito...

Más razones: velocidad de procesamiento, compatibilidad con casi cualquier sistema, curiosidad, gran capacidad de gestión de ficheros...

Aspectos a tener en cuenta:

Lo dicho anteriormente, uso estándar rm/cobol-85, y un consejo que quiero que os grabéis a fuego, si de verdad vais a seguir el cursillo.

COBOL está diseñado para trabajar sobre tarjetas perforadas, y esto da ciertas restricciones a la hora de programar:

  - Toda línea que no sea comentario debe empezar, por norma general, en el octavo espacio. Es decir, cada línea nueva, tendréis que pulsar siete espacios antes de escribir nada.
Luego veremos que hay más, entrando en la A-Zone y B-Zone.

 - Toda línea no puede pasar los 80 caracteres de ancho. Esto incluye ancho de variables (es decir, por ejemplo, una cadena de texto de más de 80 caracteres.

 - Se ha de tener siempre en cuenta las zonas de código.

 - El fin de sentencia no es el habitual (";"), sino el punto (".").

 - El sistema de codificación, al tratarse de un lenguaje tan viejo, cambia radicalmente.

Visión global:

Al igual que cualquier lenguaje (de programación o no), cobol se divide en vario elementos, de manera que los elementos grandes contienen los pequeños, y diversos pequeños pueden formar uno grande.

      · Division
      · Section
      · Párrafo
      · Línea
      · Plantilla básica

Division:

Una division (es inglés, por aquello del acento...) está formado por un conjunto de instrucciones, que empieza por una declaración.

En COBOL hay 4 division:

IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION

La primera se encarga de la identificación del programa (una de las instrucciones sirve para crear un nombre interno para cobol). También se puede añadir algún otro tipo de información, como algún comentario de documentación. La única instrucción obligatoria que requiere es la primera (la de identificación

La environment division trata los datos relacionados con el programa: I/O, tipo de caracteres... en esta sección podemos decirle qué tipo de caracteres usaremos, y especificar los archivos a los que accederá. Normalmente esta sección estará vacía, menos cuando accedamos a archivos.

La data division se usa para declarar variables y constantes. COBOL no trabaja con variables locales, solo con globales. Sin embargo esto se puede "apañar" con el flujo externo. En esta division estarán todas las variables y constantes que vayamos a usar en nuestro programa.

Finalmente, la procedure division es aquella en la que va el código puro.

Section:

Una section (sección, en castellano) es una parte de una division.
Una division puede no tener sections, o puede tener varias; de manera opuesta, una section no puede existir si no es dentro de una division.

Las section agrupan los datos de las division en grupos más concretos, como la SCREEN SECTION dentro de DATA DIVISON.

Párrafo:

Un párrafo es un grupo de instrucciones, siempre dentro de la PROCEDURE DIVISION, que se diferencia del resto de párrafos por un identificador.

Es posible (aunque no recomendable) crear una procedure sin párrafos, pero un párrafo siempre estará dentro de la procedure.

Usar párrafos sirve como método de estructuración. Llamar a un párrafo es como llamar a una función.

Línea:

Una línea es un conjunto de palabras finalizadas por punto. Todo está formado por líneas. Sin líneas no hay ni párrafo, ni section, ni division.

Las líneas están en todos los ámbitos.

Plantilla básica:

Como plantilla básica, entendiendo por ello una plantilla de texto que sirva para crear un programa básico (sin ficheros, ni flujo externo, ni pantallas) puede ser algo así:



       IDENTIFICATION DIVISION.
       PROGRAM-ID. ID.
       REMARKS. Comentarios varios.

       ENVIRONMENT DIVISION.
     
       DATA DIVISION.
       WORKING-STORAGE SECTION.
      *   Varialbes y constantes...

       PROCEDURE DIVISION .
      *    Sentencias...
           EXIT PROGRAM.

Revisemos rápidamente, por líneas:

1. Declara la IDENTIFICATION DIVISION
2. Creamos un id. el "ID" lo cambiamos por el que queramos (sin pasar de 8 caracteres)
3. Podemos añadir, opcionalmente, algún comentario. Esta línea es omisible.
4. Declaramos una ENVIRONMENT vacía.
5. Declaramos la DATA.
6. Iniciamos la WSS (Working-storage Section), donde van los datos dedicados a memoria
7. Declaramos la PROCEDURE
8. Salimos del programa

Finalmente, comentar que el EXIT PROGRAM hace que salga por completo del programa. Cuando veamos el flujo externo veremos otras sentencias que son diferentes. También remarcar el tema de los espacios: 7 par una línea, 6 y "*" para un comentario.

Los comentarios son todos de línea entera.

Añadir que he marcado los tokens (palabras reservadas) en negrita.

Por ahora, este es el fin de la primera parte del curso.

Hasta la próxima!