Hola,
Los componentes de instancia existen por separado en cada instancia (objeto) de la clase y se refieren usando el selector de componente de instancia con '->'.
Los componentes estáticos solo existen una vez por clase y son válidos para todas las instancias de la clase. Se declaran con la palabra clave CLASS-
Los componentes estáticos se pueden usar sin siquiera crear una instancia de la clase y se refieren usando el selector de componente estático '=>'.
Ejemplo 1:
El programa contiene una clase C1 con el atributo estático: NUM. El método: M1 incrementa el atributo estático en 1 y muestra el valor cada vez que se llama.
En la parte principal START-OF-SELECTION, se crean dos objetos: OBJ1 y OBJ2 de la clase C1.
Primero, el atributo estático: NUM se cambia y se accede fuera de la clase usando el selector de componente de clase, '=>'.
Luego, ambos objetos OBJ1 y OBJ2 se utilizan para llamar al método: M1 que muestra el nuevo valor del atributo estático: NUM.
Que el valor del atributo estático se incremente cada vez que se llama al método M1 de diferentes objetos muestra que esta variable puede retener su valor durante todo el tiempo de ejecución.
informe ysubdel.
CLASS c1 DEFINITION.
SECCIÓN PÚBLICA.
CLASS-DATA: NUM TIPO I.
MÉTODOS: M1.
ENDCLASS.
CLASS c1 IMPLEMENTACIÓN.
MÉTODO m1.
num = num + 1.
write:/5 num.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
c1=>num = 3.
write:/5 c1=>num.
DATA: OREF1 TIPO REF A C1,
OREF2 TIPO REF A C1.
CREAR OBJETO: OREF1,
OREF2.
LLAMAR MÉTODO OREF1->M1.
LLAMAR MÉTODO OREF2->M1.
Ejemplo2:
Los métodos estáticos de una clase solo pueden usar atributos estáticos de esa clase. No pueden usar atributos de instancia. Pero, los métodos de instancia pueden usar ambos.
Desc:
Componente tipo estático/instancia
stnum Data estático
Instnum Data Instancia
Stmeth Método Estático
Instmeth Método Instancia
Tanto los métodos estáticos como de instancia intentan mostrar valores de los atributos estáticos e de instancia: STNUM e INSTNUM.
En la compilación, se generará un error que demostrará que el método estático STMETH no puede funcionar con el atributo de instancia INSTNUM.
INFORME YSUBDEL.
CLASS C1 DEFINITION.
SECCIÓN PÚBLICA.
CLASS-DATA: STNUM TIPO I VALOR 5.
DATA: INSTNUM TIPO I VALOR 6.
CLASS-METHODS: STMETH.
MÉTODOS: INSTMETH.
ENDCLASS.
CLASS C1 IMPLEMENTACIÓN.
MÉTODO: STMETH.
WRITE:/5 STNUM.
WRITE:/5 INSTNUM.
ENDMETHOD.
MÉTODO INSTMETH.
WRITE:/5 STNUM.
WRITE:/5 INSTNUM.
ENDMETHOD.
ENDCLASS.