Clases compartidas

¿Quiere una forma simplificada de utilizar objetos compartidos, siguiendo la sintaxis clásica de los objetos y llamando automáticamente a use/end use cuando sea necesario?

Abróchese el cinturón; ¡aquí vienen las clases compartidas!

Creación y gestión de clases compartidas

Con 4D 20 R5, hemos añadido un nuevo concepto: las clases compartidas.

Las clases compartidas sólo pueden utilizarse para crear objetos compartidos y, como tales, simplifican su uso. Para crear una clase compartida, basta con añadir la palabra clave shared a su constructor:

//class SharedClass

shared Class constructor()

Las clases compartidas no pueden utilizarse para crear objetos estándar: cada vez que llame a new() para crear un nuevo objeto de esta clase, será un objeto compartido.

Extensión PARa las funciones de clase

La palabra clave shared también puede utilizarse para las funciones de clase, indicando que esta función modifica el objeto. No es necesario llamar a use y end use dentro de la función, ya que se llaman automáticamente cuando se llama y se sale de la función. Esto es obviamente válido para el constructor singleton.

shared Function myFunction()

This.attribute:="whatever"

Por supuesto, debe tener cuidado cuando utilice la palabra clave shared para funciones que no la necesitan para evitar bloquear otros procesos que intenten usar el objeto.

El uso apropiado de clases y funciones compartidas debería permitirle manipular sus objetos compartidos como si fueran objetos normales, simplificando su código.

Consideraciones sobre la herencia

Un último punto con el que debe tener cuidado es que las clases no compartidas pueden heredar de clases compartidas, pero las clases compartidas no pueden heredar de clases no compartidas. Por lo tanto, planifique su modelo objeto en consecuencia.

Ejemplo

Supongamos que tiene que realizar un cálculo largo, y prefiere utilizar un worker para evitar bloquear sus procesos importantes. Pero, obviamente, necesita recuperar el resultado del cálculo en algún momento. Utilicemos esta clase CalculationResult:

// class CalculationResult

shared Class constructor()
	
  This.isFinished:=False
	
Function makeCalculation()

  ...
  This.finished:=True
	
shared Function set finished($finished : Boolean)
	
  This.isFinished:=$finished
	
shared Function get finished()->$finished : Boolean
	
  $finished:=This.isFinished

Para usarla, sólo tiene que hacer:

$calculation:=cs.CalculationResult.new()
CALL WORKER("AnyWorker"; Formula($calculation.makeCalculation()))

While (Not($calculation.isFinished))
  //Code that will be executed while the calculation is in progress
End while 

Espero que las clases compartidas le ayuden a utilizar objetos compartidos en su aplicación. Si tiene alguna pregunta, no dude en llevarla al foro de 4D.

Nicolas Brachfogel
• Propietario de producto y Desarrollador Senior - Nicolas Brachfogel se unió a 4D en 2017 como Senior Developer (4D Server y networking). Como Product Owner para gestionar el lanzamiento de Apple Silicon, está a cargo de escribir historias de usuario y traducirlas en especificaciones funcionales, así como asegurarse de que las implementaciones de las funcionalidades satisfagan las necesidades del cliente. Diplomado por el Instituto Superior de Informática Aplicada (INSIA), Nicolas comenzó su carrera como desarrollador de software en 2001. Tras varios años codificando en Java y C++, pasó a especializarse en el desarrollo cliente-servidor para empresas de videojuegos. Como desarrollador/arquitecto de servidores, trabajó con éxito en las arquitecturas de servidores de muchos juegos (Dofus Arena, Drakerz, Trivial Pursuit Go!).