The METHOD clause is used in object-oriented COBOL to define class methods that specify the behavior and functionality of objects. It enables encapsulation, inheritance, and polymorphism in COBOL applications, providing modern object-oriented programming capabilities.
The METHOD clause enables object-oriented programming in COBOL.
The METHOD clause is defined within class definitions in the PROCEDURE DIVISION, specifying the behavior and functionality of class methods.
12345678910111213141516171819202122232425262728293031323334353637* Basic METHOD clause syntax METHOD-ID. method-name [USING parameter-list]. * Examples METHOD-ID. CALCULATE-AREA USING LENGTH, WIDTH. METHOD-ID. GET-BALANCE. METHOD-ID. UPDATE-STATUS USING NEW-STATUS. * Complete example CLASS-ID. BANK-ACCOUNT. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 ACCOUNT-BALANCE PIC 9(10)V99. 01 ACCOUNT-STATUS PIC X(10). PROCEDURE DIVISION. METHOD-ID. DEPOSIT USING AMOUNT. ADD AMOUNT TO ACCOUNT-BALANCE MOVE "ACTIVE" TO ACCOUNT-STATUS END METHOD. METHOD-ID. WITHDRAW USING AMOUNT. IF ACCOUNT-BALANCE >= AMOUNT SUBTRACT AMOUNT FROM ACCOUNT-BALANCE MOVE "ACTIVE" TO ACCOUNT-STATUS ELSE MOVE "INSUFFICIENT" TO ACCOUNT-STATUS END-IF END METHOD. METHOD-ID. GET-BALANCE. * Return current balance * Implementation here END METHOD.
Methods are defined within class definitions using METHOD-ID.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152* Complete object-oriented COBOL example CLASS-ID. CUSTOMER. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 CUSTOMER-DATA. 05 CUSTOMER-ID PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-EMAIL PIC X(50). 05 CUSTOMER-STATUS PIC X(10). 05 CUSTOMER-BALANCE PIC 9(8)V99. LINKAGE SECTION. 01 PARAMETER-AREA. 05 INPUT-PARAM PIC X(30). 05 OUTPUT-PARAM PIC X(50). PROCEDURE DIVISION. METHOD-ID. INITIALIZE-CUSTOMER USING CUST-ID, CUST-NAME, CUST-EMAIL. MOVE CUST-ID TO CUSTOMER-ID MOVE CUST-NAME TO CUSTOMER-NAME MOVE CUST-EMAIL TO CUSTOMER-EMAIL MOVE "ACTIVE" TO CUSTOMER-STATUS MOVE ZERO TO CUSTOMER-BALANCE END METHOD. METHOD-ID. UPDATE-BALANCE USING NEW-BALANCE. MOVE NEW-BALANCE TO CUSTOMER-BALANCE IF CUSTOMER-BALANCE < 0 MOVE "OVERDRAWN" TO CUSTOMER-STATUS ELSE MOVE "ACTIVE" TO CUSTOMER-STATUS END-IF END METHOD. METHOD-ID. GET-CUSTOMER-INFO RETURNING CUST-INFO. MOVE CUSTOMER-DATA TO CUST-INFO END METHOD. METHOD-ID. VALIDATE-EMAIL. * Email validation logic here IF CUSTOMER-EMAIL CONTAINS "@" MOVE "VALID" TO CUSTOMER-STATUS ELSE MOVE "INVALID" TO CUSTOMER-STATUS END-IF END METHOD. END CLASS.
This example shows a complete class with multiple methods.
12345678910111213141516171819202122232425262728293031323334* Method invocation examples IDENTIFICATION DIVISION. PROGRAM-ID. METHOD-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 CUSTOMER-OBJECT OBJECT REFERENCE CUSTOMER. 01 CUST-ID PIC 9(6) VALUE 123456. 01 CUST-NAME PIC X(30) VALUE "John Doe". 01 CUST-EMAIL PIC X(50) VALUE "john@example.com". 01 NEW-BALANCE PIC 9(8)V99 VALUE 1000.00. 01 CUST-INFO PIC X(100). PROCEDURE DIVISION. MAIN-LOGIC. * Create customer object INVOKE CUSTOMER "NEW" RETURNING CUSTOMER-OBJECT * Initialize customer INVOKE CUSTOMER-OBJECT "INITIALIZE-CUSTOMER" USING CUST-ID, CUST-NAME, CUST-EMAIL * Update balance INVOKE CUSTOMER-OBJECT "UPDATE-BALANCE" USING NEW-BALANCE * Get customer info INVOKE CUSTOMER-OBJECT "GET-CUSTOMER-INFO" RETURNING CUST-INFO * Validate email INVOKE CUSTOMER-OBJECT "VALIDATE-EMAIL" STOP RUN.
Methods are invoked using the INVOKE statement with object references.
The METHOD clause is essential in various scenarios where object-oriented programming is needed for better code organization and maintainability.
123456789101112131415161718192021222324252627282930313233343536373839404142434445* Business object modeling with methods CLASS-ID. BANK-ACCOUNT. DATA DIVISION. WORKING-STORAGE SECTION. 01 ACCOUNT-DATA. 05 ACCOUNT-NUMBER PIC 9(10). 05 ACCOUNT-TYPE PIC X(10). 05 ACCOUNT-BALANCE PIC 9(10)V99. 05 ACCOUNT-STATUS PIC X(10). 05 LAST-TRANSACTION PIC 9(8). PROCEDURE DIVISION. METHOD-ID. OPEN-ACCOUNT USING ACC-NUM, ACC-TYPE, INITIAL-DEPOSIT. MOVE ACC-NUM TO ACCOUNT-NUMBER MOVE ACC-TYPE TO ACCOUNT-TYPE MOVE INITIAL-DEPOSIT TO ACCOUNT-BALANCE MOVE "ACTIVE" TO ACCOUNT-STATUS MOVE FUNCTION CURRENT-DATE TO LAST-TRANSACTION END METHOD. METHOD-ID. DEPOSIT USING AMOUNT. IF ACCOUNT-STATUS = "ACTIVE" ADD AMOUNT TO ACCOUNT-BALANCE MOVE FUNCTION CURRENT-DATE TO LAST-TRANSACTION END-IF END METHOD. METHOD-ID. WITHDRAW USING AMOUNT RETURNING SUCCESS-FLAG. IF ACCOUNT-STATUS = "ACTIVE" AND ACCOUNT-BALANCE >= AMOUNT SUBTRACT AMOUNT FROM ACCOUNT-BALANCE MOVE FUNCTION CURRENT-DATE TO LAST-TRANSACTION MOVE "Y" TO SUCCESS-FLAG ELSE MOVE "N" TO SUCCESS-FLAG END-IF END METHOD. METHOD-ID. GET-STATEMENT RETURNING STATEMENT-DATA. * Generate account statement * Implementation here END METHOD. END CLASS.
Business objects use methods to encapsulate business logic and data.
123456789101112131415161718192021222324252627282930313233343536373839404142* Data validation with methods CLASS-ID. DATA-VALIDATOR. DATA DIVISION. WORKING-STORAGE SECTION. 01 VALIDATION-RULES. 05 MIN-LENGTH PIC 9(2) VALUE 3. 05 MAX-LENGTH PIC 9(2) VALUE 50. 05 ALLOWED-CHARS PIC X(62) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789". PROCEDURE DIVISION. METHOD-ID. VALIDATE-EMAIL USING EMAIL-ADDRESS RETURNING IS-VALID. * Email validation logic IF EMAIL-ADDRESS CONTAINS "@" AND EMAIL-ADDRESS CONTAINS "." MOVE "Y" TO IS-VALID ELSE MOVE "N" TO IS-VALID END-IF END METHOD. METHOD-ID. VALIDATE-PHONE USING PHONE-NUMBER RETURNING IS-VALID. * Phone number validation IF PHONE-NUMBER IS NUMERIC AND LENGTH OF PHONE-NUMBER = 10 MOVE "Y" TO IS-VALID ELSE MOVE "N" TO IS-VALID END-IF END METHOD. METHOD-ID. VALIDATE-NAME USING NAME-VALUE RETURNING IS-VALID. * Name validation IF LENGTH OF NAME-VALUE >= MIN-LENGTH AND LENGTH OF NAME-VALUE <= MAX-LENGTH MOVE "Y" TO IS-VALID ELSE MOVE "N" TO IS-VALID END-IF END METHOD. END CLASS.
Data validation uses methods to encapsulate validation logic.
1234567891011121314151617181920212223242526272829303132333435363738* Inheritance and polymorphism with methods CLASS-ID. EMPLOYEE. DATA DIVISION. WORKING-STORAGE SECTION. 01 EMPLOYEE-DATA. 05 EMPLOYEE-ID PIC 9(6). 05 EMPLOYEE-NAME PIC X(30). 05 BASE-SALARY PIC 9(8)V99. PROCEDURE DIVISION. METHOD-ID. CALCULATE-SALARY RETURNING TOTAL-SALARY. MOVE BASE-SALARY TO TOTAL-SALARY END METHOD. END CLASS. CLASS-ID. MANAGER INHERITS FROM EMPLOYEE. DATA DIVISION. WORKING-STORAGE SECTION. 01 MANAGER-DATA. 05 BONUS-AMOUNT PIC 9(8)V99. PROCEDURE DIVISION. METHOD-ID. CALCULATE-SALARY RETURNING TOTAL-SALARY. * Override parent method INVOKE SUPER "CALCULATE-SALARY" RETURNING TOTAL-SALARY ADD BONUS-AMOUNT TO TOTAL-SALARY END METHOD. METHOD-ID. SET-BONUS USING BONUS. MOVE BONUS TO BONUS-AMOUNT END METHOD. END CLASS.
Inheritance allows subclasses to override parent methods.
Following these best practices ensures effective use of the METHOD clause in object-oriented COBOL applications.
Pattern | Description | Example |
---|---|---|
Getter/Setter | Access and modify object data | GET-BALANCE, SET-BALANCE |
Constructor | Initialize object state | INITIALIZE-ACCOUNT |
Validator | Validate data or state | VALIDATE-EMAIL |
Processor | Process data or perform operations | CALCULATE-INTEREST |
Formatter | Format data for display | FORMAT-STATEMENT |
Use Case | METHOD Suitability | Reasoning |
---|---|---|
Object-oriented design | Excellent | Core feature of OO programming |
Code reuse | Excellent | Enables inheritance and polymorphism |
Encapsulation | Excellent | Controls access to object data |
Simple procedures | Poor | Use traditional COBOL procedures |
Legacy systems | Poor | May not support OO features |
Usage | Syntax | Example |
---|---|---|
Basic method | METHOD-ID. method-name. | METHOD-ID. GET-BALANCE. |
Method with parameters | METHOD-ID. method-name USING param. | METHOD-ID. DEPOSIT USING AMOUNT. |
Method with return value | METHOD-ID. method-name RETURNING value. | METHOD-ID. CALCULATE RETURNING RESULT. |
Method invocation | INVOKE object "method" USING params | INVOKE ACCOUNT "DEPOSIT" USING 100 |
Constructor method | METHOD-ID. NEW. | METHOD-ID. NEW. |
1. What is the primary purpose of the METHOD clause in COBOL?
2. In which COBOL division is the METHOD clause typically defined?
3. How is the METHOD clause used in object-oriented COBOL?
4. Which of the following is a common use case for the METHOD clause?
5. How do you invoke a method defined with the METHOD clause?
Understanding object-oriented programming in COBOL.
Understanding class definitions in COBOL.
Understanding method invocation in COBOL.
Understanding inheritance in object-oriented COBOL.
Understanding data encapsulation in COBOL.