La programación modular es una técnica que divide un programa en partes más pequeñas y manejables llamadas módulos o subprogramas. Esta técnica facilita la comprensión, el desarrollo, la prueba y el mantenimiento del software. En COBOL, la modularidad se logra principalmente mediante el uso de subprogramas.

Objetivos de la Programación Modular

  • Reutilización de Código: Permite reutilizar módulos en diferentes partes del programa o en otros programas.
  • Mantenimiento: Facilita la localización y corrección de errores.
  • Legibilidad: Mejora la claridad y comprensión del código.
  • Colaboración: Permite que varios programadores trabajen en diferentes módulos simultáneamente.

Estructura de un Programa Modular en COBOL

Un programa modular en COBOL generalmente consta de un programa principal y varios subprogramas. El programa principal coordina la ejecución y llama a los subprogramas según sea necesario.

Programa Principal

El programa principal es el punto de entrada del programa y contiene la lógica de control principal. Aquí se declaran y se inicializan las variables globales y se realizan las llamadas a los subprogramas.

Subprogramas

Los subprogramas son módulos independientes que realizan tareas específicas. Cada subprograma tiene su propia sección de datos y procedimientos.

Ejemplo de Programa Modular en COBOL

A continuación, se presenta un ejemplo de un programa modular en COBOL que calcula el área de un rectángulo y un círculo utilizando subprogramas.

Programa Principal

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MainProgram.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  RECTANGLE-LENGTH    PIC 9(5)V9(2).
       01  RECTANGLE-WIDTH     PIC 9(5)V9(2).
       01  RECTANGLE-AREA      PIC 9(7)V9(2).
       01  CIRCLE-RADIUS       PIC 9(5)V9(2).
       01  CIRCLE-AREA         PIC 9(7)V9(2).

       PROCEDURE DIVISION.
       MAIN-PARA.
           DISPLAY "Enter the length of the rectangle: ".
           ACCEPT RECTANGLE-LENGTH.
           DISPLAY "Enter the width of the rectangle: ".
           ACCEPT RECTANGLE-WIDTH.
           CALL 'CalculateRectangleArea' USING RECTANGLE-LENGTH RECTANGLE-WIDTH RECTANGLE-AREA.
           DISPLAY "The area of the rectangle is: " RECTANGLE-AREA.

           DISPLAY "Enter the radius of the circle: ".
           ACCEPT CIRCLE-RADIUS.
           CALL 'CalculateCircleArea' USING CIRCLE-RADIUS CIRCLE-AREA.
           DISPLAY "The area of the circle is: " CIRCLE-AREA.

           STOP RUN.

Subprograma para Calcular el Área del Rectángulo

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CalculateRectangleArea.
       DATA DIVISION.
       LINKAGE SECTION.
       01  L-RECTANGLE-LENGTH  PIC 9(5)V9(2).
       01  L-RECTANGLE-WIDTH   PIC 9(5)V9(2).
       01  L-RECTANGLE-AREA    PIC 9(7)V9(2).

       PROCEDURE DIVISION USING L-RECTANGLE-LENGTH L-RECTANGLE-WIDTH L-RECTANGLE-AREA.
           COMPUTE L-RECTANGLE-AREA = L-RECTANGLE-LENGTH * L-RECTANGLE-WIDTH.
           EXIT PROGRAM.

Subprograma para Calcular el Área del Círculo

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CalculateCircleArea.
       DATA DIVISION.
       LINKAGE SECTION.
       01  L-CIRCLE-RADIUS     PIC 9(5)V9(2).
       01  L-CIRCLE-AREA       PIC 9(7)V9(2).

       PROCEDURE DIVISION USING L-CIRCLE-RADIUS L-CIRCLE-AREA.
           COMPUTE L-CIRCLE-AREA = 3.14159 * L-CIRCLE-RADIUS * L-CIRCLE-RADIUS.
           EXIT PROGRAM.

Explicación del Código

  1. Programa Principal:

    • Solicita al usuario que ingrese las dimensiones del rectángulo y el radio del círculo.
    • Llama a los subprogramas CalculateRectangleArea y CalculateCircleArea para calcular las áreas correspondientes.
    • Muestra los resultados al usuario.
  2. Subprograma CalculateRectangleArea:

    • Recibe la longitud y el ancho del rectángulo como parámetros.
    • Calcula el área del rectángulo y la devuelve al programa principal.
  3. Subprograma CalculateCircleArea:

    • Recibe el radio del círculo como parámetro.
    • Calcula el área del círculo utilizando la fórmula πr² y la devuelve al programa principal.

Ejercicio Práctico

Ejercicio

Crea un programa modular en COBOL que calcule el área de un triángulo y un trapecio. El programa principal debe solicitar al usuario las dimensiones necesarias y llamar a los subprogramas CalculateTriangleArea y CalculateTrapezoidArea para realizar los cálculos.

Solución

Programa Principal

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MainProgram.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  TRIANGLE-BASE       PIC 9(5)V9(2).
       01  TRIANGLE-HEIGHT     PIC 9(5)V9(2).
       01  TRIANGLE-AREA       PIC 9(7)V9(2).
       01  TRAPEZOID-BASE1     PIC 9(5)V9(2).
       01  TRAPEZOID-BASE2     PIC 9(5)V9(2).
       01  TRAPEZOID-HEIGHT    PIC 9(5)V9(2).
       01  TRAPEZOID-AREA      PIC 9(7)V9(2).

       PROCEDURE DIVISION.
       MAIN-PARA.
           DISPLAY "Enter the base of the triangle: ".
           ACCEPT TRIANGLE-BASE.
           DISPLAY "Enter the height of the triangle: ".
           ACCEPT TRIANGLE-HEIGHT.
           CALL 'CalculateTriangleArea' USING TRIANGLE-BASE TRIANGLE-HEIGHT TRIANGLE-AREA.
           DISPLAY "The area of the triangle is: " TRIANGLE-AREA.

           DISPLAY "Enter the first base of the trapezoid: ".
           ACCEPT TRAPEZOID-BASE1.
           DISPLAY "Enter the second base of the trapezoid: ".
           ACCEPT TRAPEZOID-BASE2.
           DISPLAY "Enter the height of the trapezoid: ".
           ACCEPT TRAPEZOID-HEIGHT.
           CALL 'CalculateTrapezoidArea' USING TRAPEZOID-BASE1 TRAPEZOID-BASE2 TRAPEZOID-HEIGHT TRAPEZOID-AREA.
           DISPLAY "The area of the trapezoid is: " TRAPEZOID-AREA.

           STOP RUN.

Subprograma para Calcular el Área del Triángulo

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CalculateTriangleArea.
       DATA DIVISION.
       LINKAGE SECTION.
       01  L-TRIANGLE-BASE     PIC 9(5)V9(2).
       01  L-TRIANGLE-HEIGHT   PIC 9(5)V9(2).
       01  L-TRIANGLE-AREA     PIC 9(7)V9(2).

       PROCEDURE DIVISION USING L-TRIANGLE-BASE L-TRIANGLE-HEIGHT L-TRIANGLE-AREA.
           COMPUTE L-TRIANGLE-AREA = (L-TRIANGLE-BASE * L-TRIANGLE-HEIGHT) / 2.
           EXIT PROGRAM.

Subprograma para Calcular el Área del Trapecio

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CalculateTrapezoidArea.
       DATA DIVISION.
       LINKAGE SECTION.
       01  L-TRAPEZOID-BASE1   PIC 9(5)V9(2).
       01  L-TRAPEZOID-BASE2   PIC 9(5)V9(2).
       01  L-TRAPEZOID-HEIGHT  PIC 9(5)V9(2).
       01  L-TRAPEZOID-AREA    PIC 9(7)V9(2).

       PROCEDURE DIVISION USING L-TRAPEZOID-BASE1 L-TRAPEZOID-BASE2 L-TRAPEZOID-HEIGHT L-TRAPEZOID-AREA.
           COMPUTE L-TRAPEZOID-AREA = ((L-TRAPEZOID-BASE1 + L-TRAPEZOID-BASE2) / 2) * L-TRAPEZOID-HEIGHT.
           EXIT PROGRAM.

Conclusión

En esta lección, hemos aprendido sobre las técnicas de programación modular en COBOL. Hemos visto cómo dividir un programa en módulos más pequeños y manejables mediante el uso de subprogramas. La modularidad mejora la reutilización del código, facilita el mantenimiento y mejora la legibilidad del programa. Además, hemos practicado creando un programa modular que calcula áreas de diferentes figuras geométricas.

En el siguiente módulo, exploraremos el manejo de errores y técnicas de depuración en COBOL, lo cual es crucial para desarrollar programas robustos y confiables.

© Copyright 2024. Todos los derechos reservados