| Procedure Division - SEARCH - WRITE |
| Compiler-directing Statements | |
This chapter describes the COBOL syntax that has been added to support
object orientation. Since all of this syntax is an extension to ANS X3.23 - 1985
that is specific to Micro Focus COBOL, the box around this chapter has been
omitted. For a full description of the object orientation facility, see OO
Programming with Object COBOL.
In addition to the Compiler directives which provide flagging and modify
the reserved word list, the following directives may impact either the syntax
or semantics described in this section.
-
Compiler directiveeLIGN - specifies the memory boundaries on which
data items of 01-level or 77-level are aligned.
-
IBMCOMP - turns on word-storage mode.
-
MAPNAME - impacts the handling of non-alphabetic characters in the
method-name.
-
MF-OO - enables the syntax used for OO
- IOOCTRL Compiler directiveeOCTRL - provides specific switches for OO
options. The settings can be enabled or disabled by use of the + and -
signs, respectively, preceding the option character. The default is
OOCTRL(-G-N-P+Q-W). The meaning of the options is:
+G |
Makes class data global for instances.
Note: The use of this option is not recommended. It is
provided for compatibility with earlier releases.
|
+N |
Enables the use of CLASS-OBJECT and END CLASS-OBJECT syntax. |
+P |
Makes parameter type information available to the Object COBOL
runtime system.
Note: Needed for messages sent to OLE and SOM.
|
+Q |
Disables the use of IN and OF any place that could possibly follow a
data name in the verb-signature of a Method Interface Definition.
Disables the use of any verb (see the section Categories of
Statements in the chapter Concepts of a COBOL Program) in the
verb-signature of a Method Interface Definition. |
-Q |
Enables the use of IN and OF in the verb-signature of a Method
Interface Definition. Disables the use of qualification in a
verb-signature that invokes a method.
Enables the use of verbs (see the section Categories of Statements
in the chapter Concepts of a COBOL Program) in the verb-signature
of a Method Interface Definition. |
+W |
Uses Working-Storage in the object and class object to mean
Object-Storage.
Note: Provides compatibility with the developing ISO COBOL
standard.
|
A Class describes an Object COBOL Class object and its instance objects.
It contains nested programs for class methods and instance methods.
General Format
Syntax Rules
- The words PROTECTED and RESTRICTED are equivalent.
- If the EXTERNAL clause is specified, neither the DATA nor the INHERITS
clause may be specified.
- If the WITH DATA phrase is specified in the INHERITS clause, the DATA IS
PRIVATE clause must not be specified explicitly or implicitly in the source
code for class-name-2.
- Class-name-2 must not be the same as class-name-1.
- Class-name-2 must not inherit from class-name-1 directly or indirectly.
- Class-name-1 in the END CLASS header must be identical to the
class-name-1 specified in the preceding CLASS-ID paragraph.
General Rules
- Class-name-1 identifies the class being declared.
- The ABSTRACT clause indicates that class-name-1 is an abstract class.
You cannot create an instance of an abstract class.
- The EXTERNAL phrase indicates that class-name-1 is an external class. No
code is produced.
- The RESTRICTED phrase enables subclasses to directly access data
inherited from class-name-1.
- The PRIVATE phrase prevents subclasses from directly accessing data
inherited from class-name-1.
- The INHERITS phrase specifies that class-name-2 is a parent class of
class-name-1.
- If the INHERITS phrase is not specified, class-name-1 forms a new root
in the classification scheme. There can be one or more roots in a
classification scheme.
- The WITH DATA phrase specifies that class-name-1 is able to access
directly data inherited from class-name-2.
A class extension enables you to add extra functionality to an object
COBOL class without changing the original source code.
The difference between extending a class with a class extension as opposed
to using inheritance is that the class extensions are inherited by all
existing subclasses. For example, if class A has a subclass, class B. (That
is, B INHERITS FROM A.) You can add methods to class A by subclassing it to
create subclass C. However, class B will not inherit the methods of class C,
because it is a subclass of A. If you extend class A with a class extension,
X, the effect at run-time is the same as if you had changed and recompiled
class A. Class B inherits all the extra methods in class X.
General Format
Syntax Rules
- Extension-name-1 must not be the same as class-name-1.
- Extension-name-1 in the END CLASS header must be identical to the
extension-name-1 specified in the preceding CLASS-ID paragraph.
- Class-name-1 must be the name of a class specified in the CLASS-CONTROL
paragraph.
- The Data Division of the class-body may contain an empty Object-Storage
Section. The only other sections that may be specified in the Data Division
of a Class Extension are the Working-Storage Section and the Linkage
Section.
- Statements in the class extension may reference data declared in
class-name-1 only when:
- the DATA IS PROTECTED or DATA IS RESTRICTED phrase is specified in the
CLASS-ID paragraph of class-name-1, and
- the WITH DATA phrase is specified in the CLASS-ID paragraph of the
class extension.
General Rules
- The EXTEND clause specifies a class extension. A class extension adds
methods to an object class. The methods specified in extension-name-1 are
inherited by all subclasses, existing and new, of class-name-1.
- During the execution of a run unit, a COBOL call statement to
extension-name-1 must be executed before any of the methods in the class
extension are invoked. This will register the methods in the class extension
with the OO runtime system.
The class body contains all the code which defines class data and class
methods.
General Format
Format 1
(Used when the Compiler directive OOCTRL(+N) is specified)
Note: This is the preferred syntax
Format 2
(Used when the Compiler directive OOCTRL(-N) is specified)
Syntax Rules
All Formats
- Class-name-3 must not be specified more than once in the CLASS-CONTROL
paragraph.
- Class-name-3 may be the same as the class-name specified in the CLASS-ID
paragraph.
- The Data Division may not contain a Linkage Section.
Format 1
- The Data Division may not contain an Object-Storage Section.
- Data items declared in the Data Division may be referenced from instance
methods and class methods.
Format 2
- Data items declared in the Local-Storage Section, Report Section, and
Screen Section may be referenced only from the statements in the procedure
division of this class, not from any methods.
- Data items declared in the File Section or Working-Storage Section can
be referenced from instance methods and class methods and from the Procedure
Division of this class.
- Data items declared in the Object-Storage Section may be referenced from
class methods.
General Rules
All Formats
- Class-name-3 is implicitly defined as USAGE IS OBJECT REFERENCE.
- Class-name-3 is the name of a class that may be used throughout the
scope of the containing Environment Division.
- External-name-1 specifies the external name of the file containing the
class.
- Method-1 is a class method.
- Only data items in the Object-Storage Section are inherited by
subclasses.
Format 1
- Data items are in their initial state at the start of the run unit and
remain in their last used state between method invocations.
Format 2
- The statements in the class procedure division are executed before the
first time any class method or instance method of this class is executed in
the run unit.
- When execution of the class procedure division begins, the contents of
the data items in the Local-Storage Section are undefined. This storage is
deallocated immediately after execution of the class procedure division.
- Data items declared in the File Section and Working-Storage Section
remain in their last used state between invocations of class and instance
methods.
Note: Working-Storage data is useful for class or instance
initialization data.
- Data items declared in the Object-Storage Section remain in their last
used state between invocations of class methods.
The class object is an object that acts as a creator of objects.
General Format
General Rules
- If a data-item is declared in the Object-Storage Section of a class
object, it is class data. Class data may be referenced only in class
methods. Class data can be inherited by subclasses.
- Data is in its initial state at the start of the run unit and remains in
its last used state between method invocations.
- Method-1 is a class method.
The object program contains the definition of data and methods for all
instances of the class.
General Format
General Rules
- If a data-item is declared in the Object-Storage Section of an object
program, it is instance data. Instance data may be referenced only in
instance methods.
- Data items are in their initial state at the start of the run unit and
remain in their last used state between method invocations.
- Method-1 is an instance method.
Format
Syntax Rules
- Method-name-1 in the END METHOD header must be identical to the
method-name-1 declared in the preceding METHOD-ID paragraph.
- Data declared in the Data Division of a method is accessible only within
that method.
- Quotation marks around method-name-1 are optional.
Note: They enable you to use reserved words as method-names and
to use non-COBOL characters.
- A method definition must be contained in a Class Definition.
- The format of the procedure division header for a method is the same as
the format 1 procedure division header for a program. The GIVING or
RETURNING data-name clause shown in the format 2 header may also be
specified. (See the section The PROCEDURE DIVISION Header for
details.)
General Rules
- Method-name-1 names the method declared by this method definition.
- Data declared in the Local-Storage Section of a method is allocated
separate storage for each invocation of the method and deallocated upon
return from the method. This data is in an undefined state each time the
method is invoked.
Note: It is recommended that data in a method be declared in
the Local-Storage Section because this prevents separate invocations of the
method from interfering with each other's data.
- Data and files declared in a method in sections other than the
Local-Storage Section or the Linkage Section are shared among all
invocations of the method and are in their last used state when the method
is invoked.
- Method-name-1 may be used in a method invocation with an object
identifier that references an object containing this method.
- If a RETURNING or GIVING phrase is specified in the procedure division
header of a method, the contents of the data item specified in that phrase
when the method terminates become the result of the method. This result is
placed in the identifier specified in the RETURNING or GIVING phrase of the
INVOKE statement.
A method interface definition defines the parameters for the method, how
they are passed, and any alternate syntax that can be used to invoke the
method.
Format
where verb-signature is:
Syntax Rules
- A method interface definition must be nested within an external class.
- Procedure-division-header is a format 2 procedure-division-header as
specified for a program, except that neither mnemonic-name nor the REPEATED
phrase may be specified. The INVOKED phrase, shown in the format above, may
optionally be included in the header just before the terminating period.
(See the section The PROCEDURE DIVISION Header for details.)
- When the FUNCTION phrase is specified in the verb-signature, the
RETURNING phrase must be specified in the procedure division header.
- Verb-1 must be a COBOL word that is neither a reserved word nor a
procedure-name.
- The words <OBJECT>, <SELF> and <THIS> are equivalent.
One of them must be present once and only once in each verb-signature.
- Data-name-3 must be preceded by "<" and followed by ">".
- Compulsory-word must be a COBOL word.
- Noise-word must be a COBOL word and must be preceded by "["
and followed by "]".
- Open-parenthesis and close-parenthesis are "(" and ")"
respectively.
Note : They enable you to define functions that look like
intrinsic functions, with parameters enclosed in parentheses.
- A verb-signature must not be a subset of another verb-signature.
General Rules
- When method-name-1 is invoked using verb-signature, <SELF> is
replaced with the object reference to the receiving object.
- Noise-words are for readability and are optional when the syntax is used
to invoke a method.
- If verb-1 is also declared as a data-name in a program, then any
reference to that word in that program will be to the data-name.
The Object-Storage Section is used to declare object data. A new usage,
OBJECT REFERENCE, is used to declare a reference to an object.
The Object-Storage Section is an optional section of the data division
that enables you to declare class object data and instance object data.
Format
Syntax Rules
- Data declared in the Object-Storage Section of the class object may only
be accessed in class methods.
- Data declared in the Object-Storage Section of an object-program may
only be accessed in instance methods.
- If DATA IS RESTRICTED or DATA IS PROTECTED is specified in the CLASS-ID
paragraph, data declared in the Object-Storage Section may be directly
accessed in a subclass. Otherwise, this data may only be accessed by
invoking methods.
- The syntax rules for data declared in the Object-Storage Section are the
same as those for the Linkage Section except you must not specify the
DEPENDING ON phrase on an OCCURS clause when the ODOSLIDE Compiler directive
is specified.
General Rules
- Data declared in the Object-Storage Section can be inherited by
subclasses.
- Each new instance object is allocated its own unique storage for data
items declared in the Object-Storage Section.
- When the Compiler directive OOCTRL(+W) is specified, the Working-Storage
Section is treated as the Object-Storage Section.
Data items declared with USAGE IS OBJECT REFERENCE are used for storing
references to objects.
General Format
Syntax Rules
- The REDEFINES clause must not be specified for a data item that
specifies the USAGE IS OBJECT REFERENCE clause.
- A data item whose declaration contains a USAGE IS OBJECT REFERENCE
clause must not be specified in a REDEFINES clause.
- An elementary data item declared with the USAGE IS OBJECT REFERENCE
clause must not contain a PICTURE clause.
- The USAGE IS OBJECT REFERENCE clause must not be specified in the data
description entry for a group item.
- The KEY IS clause must not be specified for a data-item that specifies
the USAGE IS OBJECT REFERENCE clause.
- If the VALUE clause is specified for a data-item that specifies the
USAGE IS OBJECT REFERENCE clause, the only valid value is NULL.
General Rules
- A data item whose declaration contains USAGE IS OBJECT REFERENCE
contains a reference to an object, which can be of any class.
- The size and format of a data item whose declaration contains USAGE IS
OBJECT REFERENCE is not necessarily the same for every object reference.
The Procedure Division for a method contains procedures to be executed.
The Procedure Division for an Object Definition and a Class Definition
contains the methods that may be invoked on the instance object or class
object, respectively.
You can compare two object references to see if they refer to the same
object.
General Format
Syntax Rules
- Only one operand in the comparison can be the figurative constant NULL.
General Rules
- The operands are equal if they identify the same object, otherwise they
are unequal.
The EXIT METHOD statement marks the logical end of an invoked method.
General Format
Syntax Rules
- An EXIT METHOD statement may only be specified in the Procedure Division
of a method.
General Rules
- The execution of an EXIT METHOD statement causes execution to continue
with the next executable statement following the INVOKE statement in the
invoking program or method. If a RETURNING phrase is present in the
containing method definition, the value in the data item referenced by the
RETURNING phrase will become the result of the method invocation.
The INVOKE statement causes a method to be invoked.
General Format
Syntax Rules
- Object-identifier-1 must be an object identifier.
- Identifier-1 must be a four-byte data item.
- Literal-1 must be alphanumeric and must be a valid method-name.
- Neither literal-1, literal-2, nor literal-3 may be a figurative
constant.
- Identifier-2 must be defined as an alphanumeric data item such that its
value can be a COBOL or non-COBOL method-name.
- Neither identifier-3, identifier-4, identifier-5, identifier-6,
identifier-7, nor identifier-8 can be a function-identifier.
- Integer-1 may be signed or zero.
- GIVING and RETURNING are equivalent.
- Identifier-9 must be 4 bytes in size.
- Identifier-10 must be defined as a data item in the Linkage Section with
a level number of 01 or 77.
- If the INVOKE statement specifies literal-1 (but not if it specifies
identifier-2), and if a method interface definition has been included in the
current compilation unit with a name that matches literal-1, then the
following items are validated during syntax checking:
- The number of parameters required
- The type of parameters
- The call convention
General Rules
- Object-identifier-1 and identifier-1 identify the object on which the
method is invoked.
- If the contents of the data item referenced by object-identifier-1 is a
class object, a class method is invoked; otherwise, an instance method is
invoked.
- Literal-1 or the content of the data item referenced by identifier-2 is
the name of the method to be invoked. If the method to be invoked is a COBOL
method, literal-1 or the content of the data item referenced by identifier-2
must contain the method-name contained in the METHOD-ID paragraph of the
invoked method. If the method to be invoked is not a COBOL method, the rules
for the formation of the method-name are dependent upon the domain involved.
- The AS phrase enables you to invoke methods on a COBOL data item. If
template-1 is specified, it is used as a class template. Creation of
templates is a function provided by objects in the supplied Class Library.
(See the book OO Programming with Object COBOL for
details.)
- When an INVOKE statement is executed, the method specified is made
available for execution and control is transferred to the invoked method.
After control is returned from the method, control is transferred to the end
of the INVOKE statement.
- The run unit is not aware of whether an invoked method is a COBOL method
or a non-COBOL method until the invoked method has been located, prior to
being made available for execution. The form of the method-name cannot be
used to determine whether the method is a COBOL method or not.
- The process of invoking a method or exiting from an invoked method does
not alter the status or positioning of a file associated with any external
file connector.
- If the method being invoked is a COBOL method, the USING phrase is
included in the INVOKE statement only if there is a USING phrase in the
Procedure Division header of the invoked method, in which case the number of
operands in each USING phrase must be identical. If a RETURNING phrase is
specified on the INVOKE statement, the Procedure Division header for the
invoked method must contain a RETURNING phrase.
- If the method being invoked is not a COBOL method, the USING phrase is
included in the INVOKE statement only if one or more parameters are declared
for the invoked method, in which case the number of operands in the USING
phrase must be identical to the number of parameters in the invoked method.
(Some implementations of languages other than COBOL may allow the number of
operands to be other than identical.)
Note : The COBOL language places no restrictions on the
alignment of the addresses of data items, whereas non-COBOL languages
typically do make assumptions about addresses and will fail in some way if
a misaligned data item is referenced. Alignment can be achieved by one or
more of the following actions:
- modifying group items to include additional filler items
- ensuring operands in the USING phrase are level 01 or level 77 data
items in conjunction with the ALIGN Compiler directive or
- use of the SYNCHRONIZED clause in conjunction with the IBMCOMP
Compiler directive
If a RETURNING phrase is specified on the INVOKE statement, the
non-COBOL method must return a result in the appropriate format.
- The sequence of appearance of the operands in the USING phrase of the
INVOKE statement and the USING phrase of the invoked method's Procedure
Division header determines the correspondence between the data items used by
the INVOKE statement and the invoked method. This correspondence is
positional and not by name equivalence; the first parameter in one USING
phrase corresponds to the first parameter in the other, the second to the
second, etc.
If a parameter is an index-name, no such correspondence is established.
Index-names in the invoked method and the invoking program or method always
refer to separate indices.
- The values of the parameters referenced in the USING phrase of the
INVOKE statement are made available to the invoked method at the time the
INVOKE statement is executed.
- The BY CONTENT, BY REFERENCE and BY VALUE phrases are transitive across
the parameters that follow them until another BY CONTENT, BY REFERENCE or BY
VALUE phrase is encountered.
If no BY CONTENT, BY REFERENCE or BY VALUE phrase is specified prior to
the first parameter, the BY REFERENCE phrase is assumed.
- If BY REFERENCE is specified explicitly or implicitly for identifier-3,
the invoked method operates as if the corresponding data item in the invoked
method occupies the same storage area as the data item in the invoking
program or method. The description of the data item in the invoked method
must describe the same number of character positions as described by the
description of the corresponding data item in the invoking program.
If the BY REFERENCE ADDRESS OF phrase is specified or implied then the
method operates as if an additional data item had been declared with USAGE
POINTER and that data item passed BY REFERENCE with a value acquired by a
SET data item TO ADDRESS OF identifier-4 statement.
If identifier-4 is in the Linkage Section and has a level number other
than 01 or 77 or is in the Working-Storage Section, it is equivalent to
passing the item BY CONTENT and the address of identifier-4 cannot be
modified by the invoked method. If the BY REFERENCE literal-2 phrase is
specified or implied then the method processes literal-2 as described for
literal-3.
- If the BY CONTENT phrase is specified or implied for a parameter, the
invoked method cannot change the value of this parameter as referenced in
the INVOKE statement's USING phrase, although the invoked method may change
the value of the data item referenced by the corresponding data-name in the
invoked method's Procedure Division header. The data description of each
parameter in the BY CONTENT phrase of the INVOKE statement must be the same,
meaning no conversion or extension or truncation, as the data description of
the corresponding parameter in the USING phrase of the PROCEDURE DIVISION
header.
If the BY CONTENT phrase is specified or implied for a parameter, the
object program operates as if an additional data item had been declared and
this additional data item used as the parameter in a BY REFERENCE phrase.
If identifier-5 is specified then both the implied data description of the
additional data item and its contents are identical to that of
identifier-5. If literal-3 is specified then the implied data description
of the additional item is equivalent to an alphanumeric data item with the
same size as literal-3 and with its contents set to the value of literal-3.
If LENGTH OF identifier-6 is specified then the data description of the
additional item is equivalent to PIC S9(9) USAGE BINARY and its contents
set to the number of bytes of storage allocated to identifier-6.
- If the BY VALUE phrase is specified or implied for a parameter, the
invoked method cannot change the value of this parameter as referenced in
the INVOKE statement's USING phrase, although the invoked method may change
the value of the data item referenced by the corresponding data-name in the
invoked method's Procedure Division header. The method operates,
conceptually, as if an additional data item had been declared in a system
area (typically "the stack"), available to non-COBOL languages for
passing parameters and that this additional data item occupies the same
storage area as the data item in the invoked method. If identifier-7 is
specified then both the implied data description of the additional data item
and its contents are identical to that of identifier-7. If integer-1 is
specified then the implied data description of the additional item is
equivalent to a signed numeric item USAGE COMP-5 that occupies the number of
bytes of storage specified by the value of integer-2, if specified, or 4
bytes otherwise.
- If LENGTH OF identifier-8 is specified then the data description of the
additional item is equivalent to PIC S9(9) USAGE BINARY and its contents set
to the number of bytes of storage allocated to identifier-8. Each parameter
in the BY VALUE phrase of the INVOKE statement has a conceptual additional
data item and a corresponding parameter declared in the USING phrase of the
Procedure Division header in the invoked method. The data description of
each such parameter in the invoked method must be the same, meaning no
conversion or extension or truncation, as the data description of the
corresponding conceptual additional data item. In addition, the implied size
of the conceptual data item must not exceed the maximum size of the system
area (typically 4 bytes) otherwise the system may become catastrophically
corrupt.
If the method being invoked is a COBOL method, each parameter in the BY
VALUE phrase of the INVOKE statement must have a corresponding parameter in
the USING phrase of the Procedure Division header that also has the BY
VALUE phrase specified or implied.
If the method being invoked is non-COBOL, the details of when you need
to use the BY VALUE phrase are dependent upon the domain involved.
- If identifier-9 is specified, its description must match that of the
data item specified in the RETURNING phrase of the procedure division header
of the invoked method. The result of the method is assigned to identifier-9,
using the rules for the SET statement if identifier-9 is usage object
reference or usage index, and the rules for the MOVE statement otherwise.
When control returns to the invoking program or method, identifier-9
contains the return value.
- If identifier-10 is specified, the invoked method must return a value
with explicit or implicit USAGE POINTER. The result of the method is
assigned to identifier-10 using the rules for the SET statement.
- Invoked methods may contain INVOKE statements. An invoked method may
execute an INVOKE statement that directly or indirectly invokes the invoking
method.
The SET statement is used to assign object references.
General Format
Syntax Rules
- Object-identifier-1 and object-identifier-2 must be usage object
reference.
General Rules
- The SET statement takes the object reference for the object identified
by object-identifier-2 and places it into the storage associated with each
object-identifier-1 in the order specified.
Copyright © 1998 Micro Focus Limited. All rights reserved.
This document and the proprietary marks and names
used herein are protected by international law.
| Procedure Division - SEARCH - WRITE |
| Compiler-directing Statements | |