Ver la Versión Completa : [Sintaxis] ¿Definir una tabla de referencias de objetos?
KTSnowy
5 de febrero de 2023, 02:22
¿Hay alguna manera de definir una tabla de referencias de objetos?
Estoy tratando de averiguar si es posible definir una tabla donde cada elemento tenga un uso de referencia de objeto.
Recientemente me pidieron que apareciera en una presentación en vivo para mostrar el compilador Otterkit y quería mostrar algo interesante sobre COBOL.
De acuerdo con el último estándar COBOL, la referencia del objeto de uso solo se puede definir en un elemento de datos de nivel 01 y las tablas no se pueden definir en elementos de datos de nivel 01. ¿Quizás un TYPEDEF funcionaría?
Estoy tratando de escribir algo como List<T> usando tablas y genéricos, pero este problema haría imposible hacer una lista genérica de objetos. ¿Me estoy perdiendo de algo? ¿Es posible definir una tabla de objetos?
JCantero
5 de febrero de 2023, 16:59
@KTSnowy, no entiendo muy bien tu propuesta.
Te refieres a una tabla con elementos diferentes ?
Algo como esto:
IDENTIFICATION DIVISION.
PROGRAM-ID. YOUR-PROGRAM-NAME.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 tabla OCCURS 999 times.
02 tipo pic x.
02 tipo1.
03 descripcion1 pic x(100).
02 tipo2 redefines tipo1.
03 importe2 pic 9(10).
02 tipo3 redefines tipo1.
03 importe3 pic s9(10)v99.
01 i pic 9(4).
01 tope pic 9(4).
PROCEDURE DIVISION.
MAIN-PROCEDURE.
move '1' to tipo(1)
move 'pepe' to descripcion1(1)
move '2' to tipo(2)
move 123 to importe2(2)
move '3' to tipo(3)
move 3.4 to importe3(3)
move '1' to tipo(4)
move 'pepa' to descripcion1(4)
move 4 to tope
perform test after varying i from 1 by 1 until i = 999
or i = tope
evaluate tipo(i)
when '1'
display descripcion1(i)
when '2'
display importe2(i)
when '3'
display importe3(i)
end-perform.
STOP RUN.
END PROGRAM YOUR-PROGRAM-NAME.
Yo esto lo utilizo bastante y si son muchos elementos utilizo un fichero para simular la tabla
KTSnowy
5 de febrero de 2023, 17:19
@JCantero, Me refiero a una tabla de referencias de objetos usando "USAGE OBJECT REFERENCE".
Algo como esto:
WORKING-STORAGE SECTION.
01 OBJECTS TYPEDEF STRONG.
02 OBJ USAGE OBJECT REFERENCE OCCURS X TIMES.
01 OBJECT-TABLE TYPE OBJECTS.
...
MOVE ClassName :: "New" TO OBJ OF OBJECT-TABLE (INDEX).
Pero no estoy seguro de si esto es sintácticamente correcto y si es posible definir una tabla de objetos como esta.
JCantero
5 de febrero de 2023, 17:51
@KTSnowy, no sabria decirte. Los compiladores de cobol que yo tengo no soportan objetos.
Kuk
6 de febrero de 2023, 10:07
@KTSnowy, pues si he entendido bien la pregunta, en Fujitsu COBOL tienes 2 posibilidades, puedes tener arrays de objetos genéricos o específicos:
WORKING-STORAGE SECTION.
01 misTextBox.
05 miTextBox occurs 3 times OBJECT REFERENCE AMixed-DCmTextbox-Main-with-DCfGroupItem-Main.
01 objetosGenericos.
05 misObjetos occurs 3 times OBJECT REFERENCE.
Otra cosa, en Cobol de toda la vida los campos "padre" no tienen tipado y son por defecto tomados como alfanuméricos:
01 campoPadre. *> este es aflanumérico
05 campoHijo1 PIC 9(9) COMP-5.
05 campoHijo2 PIC 9(4) COMP-5.
Esta filosofía no permitiría definir el tipado de objetos en el nivel 01 y que los niveles inferiores heredaran dicho tipado.
En cuanto a
MOVE ClassName :: "New" TO OBJ OF OBJECT-TABLE (INDEX).
lo que estamos haciendo es llamar a un método, y siendo estrictos, Cobol para ello tiene el verbo Invoke, o sea que yo lo veo más bien así:
INVOKE ClassName "New" RETURNING OBJ(INDEX) OF OBJECT-TABLE.
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.