Capítulo 9
Objetivos
Después de completar este capítulo usted será capaz de: • Listar varios lenguajes de programación comunes para el
mainframe.
• Explicar la diferencia entre un lenguaje compilado y uno interpretado.
• Crear un CLIST ó REXX simple.
• Elegir la organización adecuada de un data set para una aplicación online.
• Comparar las ventajas de un lenguaje de alto nivel con las de un lenguaje ensamblador.
Introducción a los Lenguajes de
Programación
• Un lenguaje de programación es la forma en la que
el humano se comunica con una computadora.
• Las computadoras sólo entienden el lenguaje de
máquina.
• Los humanos escriben programas en lenguajes de
programación, que luego son convertidos a lenguaje
de máquina para que la computadora los procese.
• Los lenguajes de programación han evolucionado
de lenguaje de máquina a lenguajes más naturales
para los humanos.
Clasificación de los Lenguajes de
Programación
• 1°generación
– Lenguaje de máquina
– Código directo de máquina (bits y bytes)
• 2°generación
– Lenguaje ensamblador – Específico al hardware – Debe ser ensamblado
– Instrucciones de máquina simbólicas más estructuras de datos correspondientes a los registros de la
• 3°generación
– Lenguajes procedurales, conocidos como lenguajes de alto nivel (High-Level Languages – HLL– )
– Ejemplo: COBOL, Basic y C.
– Deben ser compilados antes de su ejecución
– Normalmente son portables a otras plataformas al recompilarlos
• 4°generación – 4GL
– Lenguajes no procedurales – Generadores de reportes
– Lenguajes de consultas (Query languages) – Ejemplo: SQL
• Lenguajes de programación visuales – Utilizan el mouse e íconos
– Ejemplo: Visual Basic, Visual C++
• Lenguajes de marcado de hipertexto – Son usados para crear páginas web – Ejemplo: HTML, XML
• Lenguajes orientados a objetos – Ejemplo: Python, Java
• Otros Lenguajes
– Ejemplo: Para aplicaciones en 3D
• Lenguajes de script
– Ejemplo: REXX, CLIST
¿Qué lenguaje de programación usar
en z/OS?
• Hay que tomar en cuenta las siguientes
consideraciones:
– ¿Qué tipo de aplicación?
– ¿Cuáles son los requerimientos de tiempo de respuesta?
– ¿Cuáles son las limitaciones de presupuesto para desarrollo y soporte?
– ¿Cuáles son las limitaciones de tiempo del proyecto? – ¿Se necesita escribir algunas de las subrutinas en
diferentes lenguajes por sus fortalezas sobre el lenguaje elegido para toda la aplicación?
Utilizando Lenguaje Ensamblador en z/OS
• Lenguaje ensamblador
– No usado para el desarrollo de aplicaciones normalmente
– Específico a la máquina
• Usado cuando:
– Se requiere un control del programa a nivel bits y bytes
– Se accesan bloques de control del sistema
– Se necesita eficiencia en la ejecución (desempeño) – Se requieren subrutinas de alto desempeño que
Utilizando Lenguaje Ensamblador en z/OS
• El lenguaje ensamblador está hecho de enunciados que representan:
– Instrucciones – Comentarios
• Los enunciados de instrucción se dividen en tres grupos:
– Instrucciones de máquina: Es la representación simbólica del lenguaje de máquina
– Instrucciones de ensamblador: Es una solicitud al ensamblador para que haga una operación durante el ensamble de un
módulo, por ejemplo, definir constantes, reservar areas de memoria y definir el final del módulo
– Macro instrucciones: Es una solicitud al programa ensamblador para procesar una secuencia predefinida de instrucciones
Utilizando Lenguaje Ensamblador en z/OS
Mensajes y Listas
Ensamblador de alto nivel (HLASM)
Binder ó Linker Enunciados fuente
del lenguaje ensamblador
Versión del programa en
lenguaje de máquina
• Common Business-Oriented Language
(COBOL)
• Es un lenguaje de programación muy
similar al inglés
• Utilizado para aplicaciones orientadas a
negocio
Proceso de pasar de un programa HLL
a un módulo ejecutable
Código fuente del HLL
Compilador HLL
Mensajes y Listas
Binder ó Linker
Versión del programa en
lenguaje de máquina
Formato de programa COBOL
• Un programa COBOL se agrupa en las
siguientes cuatro divisiones:
– IDENTIFICATION DIVISION Esta división contiene la información para identificar el programa.
– ENVIRONMENT DIVISION Describe las
características de las fuentes de datos de entrada-salida usadas por el programa.
– DATA DIVISION Todas las variables (datos ó
archivos) usadas por el programa se deben definir en esta división.
Relación entre los programas HLL y JCL
//MYJOB JOB
//STEP1 EXEC PROGRAM
...
OPEN FILE=INPUT1
OPEN FILE=OUTPUT1
READ FILE=INPUT1
...
WRITE FILE=OUTPUT1
...
CLOSE FILE=INPUT1
CLOSE FILE=OUTPUT1
/*
//INPUT1 DD DSN=MY.INPUT,DISP=SHR
Programa
JCL para el JOB
DDNAME DSNAME
Usando PL/I en z/OS
• Lenguaje de programación de alto nivel
HLL de propósito general
• Ideal para:
– Programación de sistemas
– Aplicaciones comerciales
– Aplicaciones de ingeniería
– Aplicaciones de cálculo científico
• Menos detallado que COBOL
Usando C/C++ en z/OS
• C es un lenguaje de programación multi-propósito
• Ideal para:
– Código a nivel sistema – Procesamiento de texto – Gráficas, etc.
• Contiene un conjunto de enunciados conciso, con
funcionalidad agregada a través de su librería
• C es altamente consistente a través de diferentes
plataformas
Utilizando Java en z/OS
• Java es un lenguaje de programación
orientado a objetos
• Enterprise COBOL y Enterprise PL/I
proveen interfaces a programas escritos
en Java
• Java Native Interface (JNI) permite a tu
programa llamar a otros programas
escritos en otros lenguajes.
Usando CLISTs en z/OS
• CLIST command list, son listas de comandos TSO/E • El lenguaje CLIST es interpretado (no necesita ser
compilado ni link-editado)
• CLISTs son fáciles de escribir y probar. • Lenguajes CLIST y REXX:
– Dos lenguajes de comandos disponibles en TSO/E
• El lenguaje de programación CLIST es usado para: – Realizar tareas de rutina
– Invocar otros CLISTs
– Invocar aplicaciones escritas en otros lenguajes
Usando REXX en z/OS
• Restructured Extended Executor (REXX) language es un lenguaje
procedural.
• REXX es un lenguaje interpretado y compilado (Puedes elegir compilarlos antes de ejecutarlo para reducir el tiempo de procesamiento)
• REXX es un lenguaje de funciones más completas que CLIST
• REXX es usado para:
– Realizar tareas de rutina – Invocar otros REXX
– Invocar aplicaciones escritas en otros lenguajes
• Compilados versus interpretados:
– Esta decisión se toma en la fase de diseño
– Usualmente la decisión de usar un lenguaje interpretado se basa en:
• Restricciones de tiempo en la fase de desarrollo • Facilidad de cambios futuros al programa
• El desempeño en lenguajes interpretados es menor
• Ambos, compilados e interpretados tienen sus fortalezas y debilidades.
• No hay una respuesta simple a cuál es mejor, depende de la aplicación.
• En una sola aplicación, se pueden usar varios lenguajes de programación.
Ventajas de los Lenguajes Compilados
• Ensamblador, COBOL, PL/I, C/C++ son traducidos ejecutando el código fuente a través de un compilador • Esto resulta en un código muy eficiente que puede ser
ejecutado cualquier número de veces
• Frecuentemente, el tiempo de la traducción sólo se usa una vez, cuando el programa fuente se compila,
después sólo se carga el módulo y se ejecuta. • Los programas compilados son más eficientes • Los lenguajes interpretados son analizados,
interpretados y ejecutados cada vez que el programa se ejecuta, incrementando el costo de ejecución del
Ventajas de los Lenguajes Interpretados
• Un lenguaje interpretado es relativamente
fácil de codificar, probar y modificar
• Bueno para soluciones de una sola vez
• Bueno para prototipos de desarrollo de
aplicaciones
• Muy adaptable
¿Qué es el entorno de Lenguajes de z/OS?
• Metas de desarrollo de aplicaciones:
– Modularizar y compartir código
– Desarrollar aplicaciones en un front-end basado en PC
• El z/OS Language Environment es un producto que
provee un ambiente común para todos los lenguajes
de alto nivel:
– Establece un lenguaje de desarrollo común y ambiente de ejecución para los programadores de aplicaciones en z/OS – Consolida en una librería común, eliminando la necesidad de
Ventajas del Entorno de Lenguajes de z/OS
• Establece un entorno común de ejecución para todos los HLLs
• Combina servicios esenciales de ejecución, como
rutinas para manejo de mensajes de ejecución, manejo de condiciones, y manejo de almacenamiento
• Todos estos servicios están disponibles a través de un conjunto de interfaces que son consistentes entre todos los lenguajes de programación
• Puedes utilizar un ambiente de ejecución para tus
aplicaciones, sin importar el lenguaje de programación de la aplicación
Componentes del Entorno de Lenguajes
Librería Específica del Lenguaje C/C++ Librería Específica del Lenguaje COBOL Librería Específica del Lenguaje FORTRAN Librería Específica del Lenguaje PL/IInterfaz del Entorno de Lenguages, servicios comunes y rutinas de soporte Librería
Específica del Lenguaje