The INTERFACE-ID clause is used in object-oriented COBOL to define interfaces that specify contracts for classes. Interfaces define a set of methods and properties that implementing classes must provide, enabling polymorphic behavior and promoting loose coupling between components.
Interfaces define contracts that implementing classes must fulfill.
The INTERFACE-ID clause follows specific syntax patterns for defining interfaces in object-oriented COBOL.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950* Basic INTERFACE-ID clause syntax INTERFACE-ID interface-name [INHERITS parent-interface-name] [FACTORY] [OBJECT] [ENVIRONMENT DIVISION] [DATA DIVISION] [PROCEDURE DIVISION] END INTERFACE interface-name. * Examples INTERFACE-ID IDATABASE-OPERATIONS FACTORY. INTERFACE-ID IPAYMENT-PROCESSOR INHERITS IBASE-PROCESSOR FACTORY. * Complete example INTERFACE-ID IDATABASE-INTERFACE FACTORY. DATA DIVISION. 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-INTERFACE.
INTERFACE-ID defines the interface name and structure.
Component | Purpose | Example |
---|---|---|
INTERFACE-ID | Define interface name | INTERFACE-ID IPAYMENT-INTERFACE |
METHOD-ID | Define method signatures | METHOD-ID PROCESS-PAYMENT |
INHERITS | Inherit from parent interface | INHERITS IBASE-INTERFACE |
END INTERFACE | End interface definition | END INTERFACE IPAYMENT-INTERFACE |
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152* Interface inheritance example INTERFACE-ID IBASE-OPERATIONS FACTORY. 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 CLEANUP. DATA DIVISION. PROCEDURE DIVISION. END METHOD CLEANUP. END INTERFACE IBASE-OPERATIONS. INTERFACE-ID IDATABASE-OPERATIONS INHERITS IBASE-OPERATIONS FACTORY. 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-OPERATIONS.
Interfaces can inherit from other interfaces to create hierarchies.
INTERFACE-ID is commonly used in specific scenarios where interface-based programming and contract definition are needed.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112* Service layer interface definition INTERFACE-ID IDATABASE-SERVICE FACTORY. 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. METHOD-ID EXECUTE-UPDATE. DATA DIVISION. LINKAGE SECTION. 01 UPDATE-STRING PIC X(500). 01 ROWS-AFFECTED PIC 9(5). PROCEDURE DIVISION USING UPDATE-STRING RETURNING ROWS-AFFECTED. END METHOD EXECUTE-UPDATE. 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. METHOD-ID EXECUTE-UPDATE. DATA DIVISION. LINKAGE SECTION. 01 UPDATE-STRING PIC X(500). 01 ROWS-AFFECTED PIC 9(5). PROCEDURE DIVISION USING UPDATE-STRING RETURNING ROWS-AFFECTED. IF IS-CONNECTED = 'Y' PERFORM ORACLE-EXECUTE-UPDATE ELSE MOVE 0 TO ROWS-AFFECTED END-IF EXIT METHOD. END METHOD EXECUTE-UPDATE. END CLASS ORACLE-DATABASE-SERVICE.
Service layer interfaces define contracts for different implementations.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586* Plugin architecture interface definition INTERFACE-ID IPLUGIN-INTERFACE FACTORY. 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.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798* Payment processing interface hierarchy INTERFACE-ID IPAYMENT-INTERFACE FACTORY. 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. END METHOD PROCESS-PAYMENT. METHOD-ID VALIDATE-PAYMENT. DATA DIVISION. LINKAGE SECTION. 01 PAYMENT-DATA PIC X(200). 01 IS-VALID PIC X. PROCEDURE DIVISION USING PAYMENT-DATA RETURNING IS-VALID. END METHOD VALIDATE-PAYMENT. END INTERFACE IPAYMENT-INTERFACE. INTERFACE-ID ICARD-PAYMENT-INTERFACE INHERITS IPAYMENT-INTERFACE FACTORY. PROCEDURE DIVISION. METHOD-ID AUTHORIZE-CARD. DATA DIVISION. LINKAGE SECTION. 01 CARD-NUMBER PIC X(16). 01 EXPIRY-DATE PIC X(5). 01 CVV PIC X(3). 01 AUTHORIZATION-CODE PIC X(10). PROCEDURE DIVISION USING CARD-NUMBER, EXPIRY-DATE, CVV RETURNING AUTHORIZATION-CODE. END METHOD AUTHORIZE-CARD. END INTERFACE ICARD-PAYMENT-INTERFACE. CLASS-ID CREDIT-CARD-PROCESSOR IMPLEMENTS ICARD-PAYMENT-INTERFACE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 PROCESSOR-STATUS PIC X(10). 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 CREDIT-CARD-PROCESSING IF PROCESSING-SUCCESSFUL MOVE 0 TO RETURN-CODE ELSE MOVE 1 TO RETURN-CODE END-IF EXIT METHOD. END METHOD PROCESS-PAYMENT. METHOD-ID VALIDATE-PAYMENT. DATA DIVISION. LINKAGE SECTION. 01 PAYMENT-DATA PIC X(200). 01 IS-VALID PIC X. PROCEDURE DIVISION USING PAYMENT-DATA RETURNING IS-VALID. PERFORM VALIDATE-CREDIT-CARD EXIT METHOD. END METHOD VALIDATE-PAYMENT. METHOD-ID AUTHORIZE-CARD. DATA DIVISION. LINKAGE SECTION. 01 CARD-NUMBER PIC X(16). 01 EXPIRY-DATE PIC X(5). 01 CVV PIC X(3). 01 AUTHORIZATION-CODE PIC X(10). PROCEDURE DIVISION USING CARD-NUMBER, EXPIRY-DATE, CVV RETURNING AUTHORIZATION-CODE. PERFORM AUTHORIZE-CREDIT-CARD EXIT METHOD. END METHOD AUTHORIZE-CARD. END CLASS CREDIT-CARD-PROCESSOR.
Interface hierarchies enable specialized payment processing.
Following these best practices ensures effective use of the INTERFACE-ID clause for interface-based programming.
Pitfall | Problem | Solution |
---|---|---|
Large interfaces | Difficult to implement | Keep interfaces small and focused |
Vague contracts | Unclear requirements | Define clear method signatures |
Interface bloat | Too many methods | Use interface segregation |
Poor naming | Confusing interface names | Use descriptive names |
No documentation | Unclear contracts | Document all interfaces |
Use Case | INTERFACE-ID 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 |
---|---|---|
Basic interface | INTERFACE-ID interface-name | INTERFACE-ID IPAYMENT-INTERFACE |
Interface inheritance | INTERFACE-ID interface-name INHERITS parent | INTERFACE-ID ICHILD INHERITS IPARENT |
Method definition | METHOD-ID method-name | METHOD-ID PROCESS-PAYMENT |
Interface implementation | IMPLEMENTS interface-name | IMPLEMENTS IPAYMENT-INTERFACE |
End interface | END INTERFACE interface-name | END INTERFACE IPAYMENT-INTERFACE |
1. What is the primary purpose of the INTERFACE-ID clause in COBOL?
2. What is the relationship between interfaces and classes?
3. Can interfaces inherit from other interfaces?
4. Which of the following is a benefit of using interfaces?
5. What happens if a class implements an interface but doesn't provide all required methods?