Antes de crear un objeto de una clase es necesario declarar una variable referenciada con la referencia a la clase. Una vez que se ha declarado la referencia <obj> a la clase <class>, se puede crear el objeto usando la sentencia CREATE OBJECT <cref>. Esta sentencia crea una instancia de la clase <class>, y la variable referenciada <cref> contiene la referencia al objeto.
Los programas sólo pueden acceder a los componentes de las instancias usando las referencias de las variables referenciadas. La sintaxis es la siguiente, siendo ref la variable referenciada:
− Para acceder al atributo attr: ref->attr.
− Para llamar al método meth: CALL METHOD ref->meth.
Para los componentes estáticos (independientes de instancia, sólo dependientes de clase) se puede usar tanto el nombre de la clase como la variable referenciada. También es posible acceder a los componentes estáticos de una clase antes de que un objeto de la clase haya sido creado. La sintaxis, siendo class la clase es la siguiente:
− Para acceder al atributo estático attr: class->attr.
− Para llamar al método estático meth: CALL METHOD class->meth.
Dentro de una clase se puede acceder también a los componentes individuales mediante la referencia a sí mismo ME:
− Para acceder al atributo attr en la propia clase: me->attr.
− Para llamar al método meth en la propia clase: CALL METHOD me->meth.
CREAR MAS DE UNA INSTANCIA DE UNA CLASE
En un programa se pueden crear cualquier número de objetos de una misma clase. Estos objetos son completamente independientes unos de otros. Cada uno tiene su propia identidad dentro del programa y sus propios atributos. Cada sentencia CREATE OBJECT genera un nuevo objeto, cuya identidad está completamente definida por su referencia al objeto.
Asignar referencias
Se pueden asignar referencias a distintas variables referenciadas usando la sentencia MOVE. De esta manera se puede tener las referencias en varias variables referenciadas apuntando al mismo objeto.
Cuando se asigna una referencia a una variable referenciada distinta, sus tipos deben ser compatibles.
Cuando se usa la sentencia MOVE o el operador de asignación = para asignar variables referenciadas, el sistema debe ser capaz de reconocer en el chequeo de la sintaxis si la asignación va a ser posible. Esto mismo se aplica cuando se pasan variables referenciadas como parámetros a procedimientos.
Si escribimos la sentencia cref1 = cref2, las dos referencias tienen que tener el mismo tipo, esto es, tienen que referirse a la misma clase, o bien la clase de cref1 tiene que ser la clase predefinida como vacía, OBJECT.
La clase OBJECT no tiene componentes y tiene la misma función para las variables referenciadas que el tipo de datos ANY para las variables normales.
Las variables referenciadas con el tipo OBJECT pueden funcionar como contenedoras para pasar referencias. De cualquier manera, nunca pueden ser usadas para acceder a objetos.