La programació modular és una tècnica que permet dividir un programa gran en parts més petites i manejables, anomenades mòduls o subprogrames. Aquesta tècnica facilita la gestió, manteniment i depuració del codi, així com la seva reutilització. En aquest tema, explorarem les tècniques de programació modular en COBOL.

Objectius

  • Comprendre els avantatges de la programació modular.
  • Aprendre a crear i utilitzar subprogrames en COBOL.
  • Conèixer les tècniques per passar paràmetres entre subprogrames.
  • Aplicar les millors pràctiques en la programació modular.

Avantatges de la Programació Modular

  • Mantenibilitat: Els mòduls més petits són més fàcils de mantenir i actualitzar.
  • Reutilització: Els mòduls poden ser reutilitzats en diferents parts del programa o en altres programes.
  • Depuració: Els errors són més fàcils de localitzar i corregir en mòduls més petits.
  • Col·laboració: Facilita el treball en equip, ja que diferents programadors poden treballar en diferents mòduls simultàniament.

Creació de Subprogrames en COBOL

Definició d'un Subprograma

Un subprograma en COBOL es defineix en una secció separada del programa principal. Aquí teniu un exemple bàsic:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAINPROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUMBER1 PIC 9(2) VALUE 10.
       01 WS-NUMBER2 PIC 9(2) VALUE 20.
       01 WS-RESULT  PIC 9(2).

       PROCEDURE DIVISION.
           CALL 'SUBPROGRAM' USING WS-NUMBER1 WS-NUMBER2 WS-RESULT.
           DISPLAY 'Result: ' WS-RESULT.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBPROGRAM.
       DATA DIVISION.
       LINKAGE SECTION.
       01 LK-NUMBER1 PIC 9(2).
       01 LK-NUMBER2 PIC 9(2).
       01 LK-RESULT  PIC 9(2).

       PROCEDURE DIVISION USING LK-NUMBER1 LK-NUMBER2 LK-RESULT.
           COMPUTE LK-RESULT = LK-NUMBER1 + LK-NUMBER2.
           EXIT PROGRAM.

Explicació del Codi

  1. Programa Principal (MAINPROGRAM):

    • Declara les variables WS-NUMBER1, WS-NUMBER2 i WS-RESULT en la secció de treball.
    • Utilitza la sentència CALL per cridar el subprograma SUBPROGRAM i passa les variables com a paràmetres.
    • Mostra el resultat retornat pel subprograma.
  2. Subprograma (SUBPROGRAM):

    • Declara les variables de connexió LK-NUMBER1, LK-NUMBER2 i LK-RESULT en la secció de connexió.
    • Defineix la divisió de procediment amb els paràmetres d'entrada USING.
    • Realitza el càlcul i assigna el resultat a LK-RESULT.
    • Utilitza EXIT PROGRAM per tornar al programa principal.

Passant Paràmetres entre Subprogrames

Els paràmetres es passen entre el programa principal i els subprogrames mitjançant la secció de connexió (LINKAGE SECTION) i la sentència USING. És important assegurar-se que els tipus de dades i les longituds dels paràmetres coincideixin entre el programa principal i el subprograma.

Exemple de Passant Paràmetres per Referència

En COBOL, els paràmetres es passen per referència, el que significa que el subprograma pot modificar els valors de les variables passades des del programa principal.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAINPROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUMBER1 PIC 9(2) VALUE 10.
       01 WS-NUMBER2 PIC 9(2) VALUE 20.
       01 WS-RESULT  PIC 9(2).

       PROCEDURE DIVISION.
           CALL 'SUBPROGRAM' USING WS-NUMBER1 WS-NUMBER2 WS-RESULT.
           DISPLAY 'Result: ' WS-RESULT.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBPROGRAM.
       DATA DIVISION.
       LINKAGE SECTION.
       01 LK-NUMBER1 PIC 9(2).
       01 LK-NUMBER2 PIC 9(2).
       01 LK-RESULT  PIC 9(2).

       PROCEDURE DIVISION USING LK-NUMBER1 LK-NUMBER2 LK-RESULT.
           COMPUTE LK-RESULT = LK-NUMBER1 + LK-NUMBER2.
           EXIT PROGRAM.

Millors Pràctiques en Programació Modular

  • Nomenclatura Clara: Utilitza noms descriptius per als subprogrames i les variables.
  • Documentació: Documenta cada subprograma amb comentaris que expliquin la seva funció i els seus paràmetres.
  • Modularitat: Divideix el codi en mòduls lògics i independents.
  • Reutilització: Escriu subprogrames que puguin ser reutilitzats en diferents parts del programa o en altres projectes.
  • Proves: Prova cada subprograma de manera independent abans d'integrar-lo en el programa principal.

Exercici Pràctic

Enunciat

Crea un programa COBOL que calculi la suma, resta, multiplicació i divisió de dos nombres. Utilitza subprogrames per a cada operació aritmètica.

Solució

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAINPROGRAM.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUMBER1 PIC 9(2) VALUE 10.
       01 WS-NUMBER2 PIC 9(2) VALUE 5.
       01 WS-RESULT  PIC 9(2).

       PROCEDURE DIVISION.
           CALL 'ADD-SUBPROGRAM' USING WS-NUMBER1 WS-NUMBER2 WS-RESULT.
           DISPLAY 'Sum: ' WS-RESULT.
           CALL 'SUBTRACT-SUBPROGRAM' USING WS-NUMBER1 WS-NUMBER2 WS-RESULT.
           DISPLAY 'Difference: ' WS-RESULT.
           CALL 'MULTIPLY-SUBPROGRAM' USING WS-NUMBER1 WS-NUMBER2 WS-RESULT.
           DISPLAY 'Product: ' WS-RESULT.
           CALL 'DIVIDE-SUBPROGRAM' USING WS-NUMBER1 WS-NUMBER2 WS-RESULT.
           DISPLAY 'Quotient: ' WS-RESULT.
           STOP RUN.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ADD-SUBPROGRAM.
       DATA DIVISION.
       LINKAGE SECTION.
       01 LK-NUMBER1 PIC 9(2).
       01 LK-NUMBER2 PIC 9(2).
       01 LK-RESULT  PIC 9(2).

       PROCEDURE DIVISION USING LK-NUMBER1 LK-NUMBER2 LK-RESULT.
           COMPUTE LK-RESULT = LK-NUMBER1 + LK-NUMBER2.
           EXIT PROGRAM.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBTRACT-SUBPROGRAM.
       DATA DIVISION.
       LINKAGE SECTION.
       01 LK-NUMBER1 PIC 9(2).
       01 LK-NUMBER2 PIC 9(2).
       01 LK-RESULT  PIC 9(2).

       PROCEDURE DIVISION USING LK-NUMBER1 LK-NUMBER2 LK-RESULT.
           COMPUTE LK-RESULT = LK-NUMBER1 - LK-NUMBER2.
           EXIT PROGRAM.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MULTIPLY-SUBPROGRAM.
       DATA DIVISION.
       LINKAGE SECTION.
       01 LK-NUMBER1 PIC 9(2).
       01 LK-NUMBER2 PIC 9(2).
       01 LK-RESULT  PIC 9(2).

       PROCEDURE DIVISION USING LK-NUMBER1 LK-NUMBER2 LK-RESULT.
           COMPUTE LK-RESULT = LK-NUMBER1 * LK-NUMBER2.
           EXIT PROGRAM.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. DIVIDE-SUBPROGRAM.
       DATA DIVISION.
       LINKAGE SECTION.
       01 LK-NUMBER1 PIC 9(2).
       01 LK-NUMBER2 PIC 9(2).
       01 LK-RESULT  PIC 9(2).

       PROCEDURE DIVISION USING LK-NUMBER1 LK-NUMBER2 LK-RESULT.
           IF LK-NUMBER2 NOT = 0
               COMPUTE LK-RESULT = LK-NUMBER1 / LK-NUMBER2
           ELSE
               MOVE 0 TO LK-RESULT.
           EXIT PROGRAM.

Explicació del Codi

  • Programa Principal (MAINPROGRAM): Crida quatre subprogrames diferents per realitzar les operacions aritmètiques i mostra els resultats.
  • Subprogrames (ADD-SUBPROGRAM, SUBTRACT-SUBPROGRAM, MULTIPLY-SUBPROGRAM, DIVIDE-SUBPROGRAM): Cada subprograma realitza una operació aritmètica específica i retorna el resultat al programa principal.

Conclusió

La programació modular en COBOL permet dividir un programa en parts més petites i manejables, facilitant la seva gestió, manteniment i depuració. Mitjançant l'ús de subprogrames i la tècnica de passar paràmetres, podem crear codi més clar, reutilitzable i fàcil de mantenir. Practicar aquestes tècniques és essencial per convertir-se en un programador COBOL eficient i efectiu.

© Copyright 2024. Tots els drets reservats