Interfaces in COBOL
In COBOL, we don’t have interfaces in the same way as modern object-oriented languages. However, we can simulate some aspects of interfaces using data structures and procedures. Here’s an example that demonstrates a similar concept:
IDENTIFICATION DIVISION.
PROGRAM-ID. GEOMETRY-EXAMPLE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-PI PIC 9V9(5) VALUE 3.14159.
01 WS-RECT.
05 WS-RECT-WIDTH PIC 9(5)V99.
05 WS-RECT-HEIGHT PIC 9(5)V99.
01 WS-CIRCLE.
05 WS-CIRCLE-RADIUS PIC 9(5)V99.
01 WS-SHAPE-TYPE PIC X(10).
01 WS-AREA PIC 9(7)V99.
01 WS-PERIMETER PIC 9(7)V99.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
MOVE 3 TO WS-RECT-WIDTH.
MOVE 4 TO WS-RECT-HEIGHT.
MOVE "RECTANGLE" TO WS-SHAPE-TYPE.
PERFORM MEASURE-SHAPE.
MOVE 5 TO WS-CIRCLE-RADIUS.
MOVE "CIRCLE" TO WS-SHAPE-TYPE.
PERFORM MEASURE-SHAPE.
STOP RUN.
MEASURE-SHAPE.
IF WS-SHAPE-TYPE = "RECTANGLE"
PERFORM CALCULATE-RECT-AREA
PERFORM CALCULATE-RECT-PERIMETER
ELSE IF WS-SHAPE-TYPE = "CIRCLE"
PERFORM CALCULATE-CIRCLE-AREA
PERFORM CALCULATE-CIRCLE-PERIMETER
END-IF.
DISPLAY WS-SHAPE-TYPE " Area: " WS-AREA.
DISPLAY WS-SHAPE-TYPE " Perimeter: " WS-PERIMETER.
CALCULATE-RECT-AREA.
COMPUTE WS-AREA = WS-RECT-WIDTH * WS-RECT-HEIGHT.
CALCULATE-RECT-PERIMETER.
COMPUTE WS-PERIMETER = 2 * (WS-RECT-WIDTH + WS-RECT-HEIGHT).
CALCULATE-CIRCLE-AREA.
COMPUTE WS-AREA = WS-PI * WS-CIRCLE-RADIUS * WS-CIRCLE-RADIUS.
CALCULATE-CIRCLE-PERIMETER.
COMPUTE WS-PERIMETER = 2 * WS-PI * WS-CIRCLE-RADIUS.
In this COBOL program, we define data structures for rectangles and circles. We then use a MEASURE-SHAPE
procedure that acts similarly to the measure
function in the original example. It checks the shape type and calls the appropriate procedures to calculate area and perimeter.
The MAIN-PROCEDURE
demonstrates how to use these “geometry” concepts with both a rectangle and a circle.
To run this program, you would typically compile it and then execute the resulting binary. The exact commands depend on your COBOL compiler, but it might look something like this:
$ cobc -x geometry-example.cob
$ ./geometry-example
RECTANGLE Area: 000012.00
RECTANGLE Perimeter: 000014.00
CIRCLE Area: 000078.53
CIRCLE Perimeter: 000031.41
This example demonstrates how we can implement similar functionality to interfaces in COBOL, even though the language doesn’t have built-in support for this concept. We use data structures to represent different shapes and procedures to implement their “methods”.