The IMPLEMENTS clause is used in object-oriented COBOL to specify that a class implements one or more interfaces. This clause enables polymorphism and ensures that the class provides all the methods and properties defined in the specified interfaces.
Classes implementing interfaces must provide all required method implementations.
The IMPLEMENTS clause follows specific syntax patterns for defining interface implementations in object-oriented COBOL.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253* Basic IMPLEMENTS clause syntax CLASS-ID class-name IMPLEMENTS interface-name-1, interface-name-2, ... [INHERITS parent-class-name] [FACTORY] [OBJECT] [ENVIRONMENT DIVISION] [DATA DIVISION] [PROCEDURE DIVISION] END CLASS class-name. * Examples CLASS-ID DATABASE-CONNECTION IMPLEMENTS IDATABASE-INTERFACE FACTORY. CLASS-ID FILE-MANAGER IMPLEMENTS IFILE-OPERATIONS, ILOGGING, ISERIALIZABLE FACTORY. * Complete example CLASS-ID PAYMENT-PROCESSOR IMPLEMENTS IPAYMENT-INTERFACE INHERITS BASE-PROCESSOR FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 PROCESSOR-STATUS PIC X(10). 01 TRANSACTION-COUNT PIC 9(5). OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID PROCESS-PAYMENT. DATA DIVISION. LINKAGE SECTION. 01 AMOUNT PIC 9(8)V99. 01 RETURN-CODE PIC 9(4). PROCEDURE DIVISION USING AMOUNT RETURNING RETURN-CODE. PERFORM VALIDATE-PAYMENT IF PAYMENT-VALID PERFORM PROCESS-TRANSACTION MOVE 0 TO RETURN-CODE ELSE MOVE 1 TO RETURN-CODE END-IF EXIT METHOD. END METHOD PROCESS-PAYMENT. END CLASS PAYMENT-PROCESSOR.
IMPLEMENTS specifies interfaces that a class must implement.
Clause | Purpose | Example |
---|---|---|
INTERFACE-ID | Define interface structure | INTERFACE-ID IPAYMENT-INTERFACE |
METHOD-ID | Define interface methods | METHOD-ID PROCESS-PAYMENT |
IMPLEMENTS | Specify interface implementation | IMPLEMENTS IPAYMENT-INTERFACE |
END INTERFACE | End interface definition | END INTERFACE IPAYMENT-INTERFACE |
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051* Implementing multiple interfaces CLASS-ID COMPREHENSIVE-SERVICE IMPLEMENTS IDATABASE-INTERFACE, ILOGGING-INTERFACE, ISECURITY-INTERFACE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 SERVICE-STATUS PIC X(10). 01 LOG-LEVEL PIC X(10). OBJECT SECTION. PROCEDURE DIVISION. * IDATABASE-INTERFACE methods METHOD-ID CONNECT. DATA DIVISION. LINKAGE SECTION. 01 CONNECTION-STRING PIC X(100). 01 RETURN-CODE PIC 9(4). PROCEDURE DIVISION USING CONNECTION-STRING RETURNING RETURN-CODE. PERFORM ESTABLISH-DB-CONNECTION EXIT METHOD. END METHOD CONNECT. * ILOGGING-INTERFACE methods METHOD-ID LOG-MESSAGE. DATA DIVISION. LINKAGE SECTION. 01 MESSAGE PIC X(200). 01 LEVEL PIC X(10). PROCEDURE DIVISION USING MESSAGE, LEVEL. PERFORM WRITE-TO-LOG EXIT METHOD. END METHOD LOG-MESSAGE. * ISECURITY-INTERFACE methods METHOD-ID AUTHENTICATE. DATA DIVISION. LINKAGE SECTION. 01 USERNAME PIC X(20). 01 PASSWORD PIC X(20). 01 IS-AUTHENTICATED PIC X. PROCEDURE DIVISION USING USERNAME, PASSWORD RETURNING IS-AUTHENTICATED. PERFORM VALIDATE-CREDENTIALS EXIT METHOD. END METHOD AUTHENTICATE. END CLASS COMPREHENSIVE-SERVICE.
Multiple interfaces can be implemented by separating them with commas.
IMPLEMENTS is commonly used in specific scenarios where interface-based programming and polymorphic behavior are needed.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485* Service layer with interface implementation INTERFACE-ID IDATABASE-SERVICE. PROCEDURE DIVISION. METHOD-ID CONNECT. DATA DIVISION. LINKAGE SECTION. 01 CONNECTION-STRING PIC X(100). 01 RETURN-CODE PIC 9(4). PROCEDURE DIVISION USING CONNECTION-STRING RETURNING RETURN-CODE. END METHOD CONNECT. METHOD-ID DISCONNECT. DATA DIVISION. PROCEDURE DIVISION. END METHOD DISCONNECT. METHOD-ID EXECUTE-QUERY. DATA DIVISION. LINKAGE SECTION. 01 QUERY-STRING PIC X(500). 01 RESULT-SET PIC X(1000). PROCEDURE DIVISION USING QUERY-STRING RETURNING RESULT-SET. END METHOD EXECUTE-QUERY. END INTERFACE IDATABASE-SERVICE. CLASS-ID ORACLE-DATABASE-SERVICE IMPLEMENTS IDATABASE-SERVICE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 ORACLE-CONNECTION PIC X(100). 01 IS-CONNECTED PIC X VALUE 'N'. OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID CONNECT. DATA DIVISION. LINKAGE SECTION. 01 CONNECTION-STRING PIC X(100). 01 RETURN-CODE PIC 9(4). PROCEDURE DIVISION USING CONNECTION-STRING RETURNING RETURN-CODE. MOVE CONNECTION-STRING TO ORACLE-CONNECTION PERFORM ORACLE-CONNECT IF CONNECTION-SUCCESSFUL MOVE 'Y' TO IS-CONNECTED MOVE 0 TO RETURN-CODE ELSE MOVE 1 TO RETURN-CODE END-IF EXIT METHOD. END METHOD CONNECT. METHOD-ID DISCONNECT. DATA DIVISION. PROCEDURE DIVISION. IF IS-CONNECTED = 'Y' PERFORM ORACLE-DISCONNECT MOVE 'N' TO IS-CONNECTED END-IF EXIT METHOD. END METHOD DISCONNECT. METHOD-ID EXECUTE-QUERY. DATA DIVISION. LINKAGE SECTION. 01 QUERY-STRING PIC X(500). 01 RESULT-SET PIC X(1000). PROCEDURE DIVISION USING QUERY-STRING RETURNING RESULT-SET. IF IS-CONNECTED = 'Y' PERFORM ORACLE-EXECUTE-QUERY ELSE MOVE 'NOT CONNECTED' TO RESULT-SET END-IF EXIT METHOD. END METHOD EXECUTE-QUERY. END CLASS ORACLE-DATABASE-SERVICE.
Service layers use interfaces to provide consistent APIs.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283* Plugin architecture with interface implementation INTERFACE-ID IPLUGIN-INTERFACE. PROCEDURE DIVISION. METHOD-ID INITIALIZE. DATA DIVISION. LINKAGE SECTION. 01 CONFIG-PARAMS PIC X(200). 01 RETURN-CODE PIC 9(4). PROCEDURE DIVISION USING CONFIG-PARAMS RETURNING RETURN-CODE. END METHOD INITIALIZE. METHOD-ID EXECUTE. DATA DIVISION. LINKAGE SECTION. 01 INPUT-DATA PIC X(500). 01 OUTPUT-DATA PIC X(500). PROCEDURE DIVISION USING INPUT-DATA RETURNING OUTPUT-DATA. END METHOD EXECUTE. METHOD-ID CLEANUP. DATA DIVISION. PROCEDURE DIVISION. END METHOD CLEANUP. END INTERFACE IPLUGIN-INTERFACE. CLASS-ID EMAIL-PLUGIN IMPLEMENTS IPLUGIN-INTERFACE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 SMTP-SERVER PIC X(50). 01 SMTP-PORT PIC 9(4). 01 IS-INITIALIZED PIC X VALUE 'N'. OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID INITIALIZE. DATA DIVISION. LINKAGE SECTION. 01 CONFIG-PARAMS PIC X(200). 01 RETURN-CODE PIC 9(4). PROCEDURE DIVISION USING CONFIG-PARAMS RETURNING RETURN-CODE. PERFORM PARSE-SMTP-CONFIG IF CONFIG-VALID MOVE 'Y' TO IS-INITIALIZED MOVE 0 TO RETURN-CODE ELSE MOVE 1 TO RETURN-CODE END-IF EXIT METHOD. END METHOD INITIALIZE. METHOD-ID EXECUTE. DATA DIVISION. LINKAGE SECTION. 01 INPUT-DATA PIC X(500). 01 OUTPUT-DATA PIC X(500). PROCEDURE DIVISION USING INPUT-DATA RETURNING OUTPUT-DATA. IF IS-INITIALIZED = 'Y' PERFORM SEND-EMAIL MOVE 'EMAIL SENT' TO OUTPUT-DATA ELSE MOVE 'PLUGIN NOT INITIALIZED' TO OUTPUT-DATA END-IF EXIT METHOD. END METHOD EXECUTE. METHOD-ID CLEANUP. DATA DIVISION. PROCEDURE DIVISION. MOVE 'N' TO IS-INITIALIZED EXIT METHOD. END METHOD CLEANUP. END CLASS EMAIL-PLUGIN.
Plugin architectures use interfaces for extensible functionality.
1234567891011121314151617181920212223242526272829303132* Polymorphic behavior with interface implementation IDENTIFICATION DIVISION. PROGRAM-ID INTERFACE-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 PAYMENT-PROCESSOR OBJECT REFERENCE IPAYMENT-INTERFACE. 01 CREDIT-CARD-PROC OBJECT REFERENCE CREDIT-CARD-PROCESSOR. 01 BANK-TRANSFER-PROC OBJECT REFERENCE BANK-TRANSFER-PROCESSOR. 01 AMOUNT PIC 9(8)V99 VALUE 100.50. 01 RESULT PIC 9(4). PROCEDURE DIVISION. * Create processor instances INVOKE CREDIT-CARD-PROCESSOR "NEW" RETURNING CREDIT-CARD-PROC INVOKE BANK-TRANSFER-PROCESSOR "NEW" RETURNING BANK-TRANSFER-PROC * Use credit card processor SET PAYMENT-PROCESSOR TO CREDIT-CARD-PROC INVOKE PAYMENT-PROCESSOR "PROCESS-PAYMENT" USING AMOUNT RETURNING RESULT DISPLAY 'Credit Card Result: ' RESULT * Switch to bank transfer processor SET PAYMENT-PROCESSOR TO BANK-TRANSFER-PROC INVOKE PAYMENT-PROCESSOR "PROCESS-PAYMENT" USING AMOUNT RETURNING RESULT DISPLAY 'Bank Transfer Result: ' RESULT STOP RUN. END PROGRAM INTERFACE-DEMO.
Polymorphic behavior allows objects to be treated as interface instances.
Following these best practices ensures effective use of the IMPLEMENTS clause for interface-based programming.
Pitfall | Problem | Solution |
---|---|---|
Incomplete implementation | Compilation errors | Implement all interface methods |
Signature mismatch | Method not recognized | Match interface method signatures exactly |
Large interfaces | Difficult to implement | Keep interfaces small and focused |
No error handling | Unreliable implementations | Implement proper error handling |
Poor documentation | Confusion about contracts | Document interface requirements |
Use Case | IMPLEMENTS Suitability | Reasoning |
---|---|---|
Service contracts | Excellent | Perfect for defining service APIs |
Plugin architectures | Excellent | Ideal for extensible systems |
Polymorphic behavior | Good | Enables polymorphic programming |
Simple inheritance | Poor | Use INHERITS instead |
Performance-critical code | Poor | Interface overhead may be too high |
Usage | Syntax | Example |
---|---|---|
Single interface | IMPLEMENTS interface-name | IMPLEMENTS IDATABASE-INTERFACE |
Multiple interfaces | IMPLEMENTS interface1, interface2 | IMPLEMENTS IFILE, ILOG, ISECURITY |
With inheritance | INHERITS parent IMPLEMENTS interface | INHERITS BASE IMPLEMENTS IINTERFACE |
Interface definition | INTERFACE-ID interface-name | INTERFACE-ID IPAYMENT-INTERFACE |
Method definition | METHOD-ID method-name | METHOD-ID PROCESS-PAYMENT |
1. What is the primary purpose of the IMPLEMENTS clause in COBOL?
2. What happens if a class implements an interface but doesn't provide all required methods?
3. How do you specify multiple interfaces in the IMPLEMENTS clause?
4. Which of the following is a benefit of using the IMPLEMENTS clause?
5. What is the relationship between IMPLEMENTS and INHERITS?