Una introducción a la programación orientada a objetos en 4D: Clases

Traducido automáticamente de Deepl

Muchos de ustedes han estado pidiendo poder definir un tipo de objeto desde que el tipo Objeto estuvo disponible. Gracias a la notación de objeto, muchos de ustedes sueñan con tener funciones de objeto. No sueñes más y saluda a las clases en la base de datos de proyectos de 4D v18 R3. En esta entrada del blog, presentamos uno de los conceptos más interesantes de la programación orientada a objetos… ¡junto con un ejemplo de base de datos y un vídeo extra!

Ejemplo con la clase «Persona

Nota: A partir de 4D v18 R3, todos los IDH estarán alojados en GitHub. Puede clonar el IDH o descargar directamente el archivo Zip. Revise este párrafo para más detalles.

¿Qué es una clase?

Una clase es un tipo de datos definido por el usuario que permite definir el comportamiento de un objeto. Contiene sus propias funciones miembro a las que se puede acceder y utilizar cuando se crea una instancia de la clase.

Cómo crear una clase

Puede crear una clase desde el menú Nuevo de la barra de herramientas o desde el diálogo del Explorador. Ahora que se muestra el editor de clases, puede crear el constructor y las funciones.

¿Cómo se crean las funciones de una clase?

Para crear una función, debe utilizar la palabra clave Function seguida del nombre de la función. Luego, puedes pasar parámetros (como con los métodos).

Function methodName
( ; ) :="Hola "+ C_TEXT$0$1
$0$1

¿Qué es el almacén de clases?

Ya conoces el comando ds (que te permite acceder al datastore). Ahora, utilizando la misma lógica, tienes el comando cs que devuelve el almacén de clases. Todas las clases que crees son visibles y están disponibles en el almacén de clases.

Para crear un objeto que sea una instancia de una clase, se utiliza el comando cs y la función miembro new.

C_OBJECT($o)
$o :=cs.myClass.new()

¿Qué es un constructor?

Un constructor se utiliza para crear e instanciar un objeto con atributos por defecto. Se llama automáticamente cuando se inicializa el objeto.

En el editor, simplemente escribe Class constructor. Puedes pasar parámetros a tu constructor para inicializar ciertas variables, igual que puedes hacer con un método usando $1, $2, etc.

Para la clase

Class constructor
( ) . := C_LONGINT$1
Thisvariable$1

Para el método que instancie un objeto de la clase, pasa el parámetro a la nueva función miembro:

C_OBJECT($o)
$o :=cs.Class1.new(8)

Ejemplo

Veamos un ejemplo concreto con una clase «Persona». Se crea

  • un constructor,
  • una función getFullName,
  • una función getAge.

Este es el contenido de mi clase:

Class constructor
( ) ( ) ( ) . := . := . := ( ) := . +" "+ ( . ) ( ) :=( - . )/365.25 C_TEXT$1 // FirstName
C_TEXT$2 // LastName
C_DATE$3 // Birthdate
ThisfirstName$1
ThislastName$2
Thisbirthdate$3

Function getFullName
C_TEXT$0
$0ThisfirstNameUppercaseThislastName

Function getAge
C_LONGINT$0
$0Current dateThisbirthdate

Ahora, en un método, creo un objeto «Persona». Luego, leo los atributos y ejecuto las funciones.

C_OBJECT($o)
$o :=cs.Person.new("John"; "Doe";!1956-10-27!) // instantiate the object

$firstname :=$o.firstName // return John
$lastname :=$o.lastName // return Doe
$fullName :=$o.getFullName() // return John DOE

$age:=$o.getAge() // return 63

¿Y ahora qué?

En la próxima entrada del blog, hablaremos de la noción de herencia entre clases.

Vanessa Talbot
• Propietario de producto - Vanessa Talbot llegó al equipo de 4D Program en junio de 2014. Como Propietario de producto, está a cargo de escribir las historias de los usuarios y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Desde su llegada, ha trabajado en la definición de funcionalidades claves en 4D. Ha trabajado en la mayoría de las nuevas funcionalidades de multi hilo apropiativo y también en un tema muy complejo: la nueva arquitectura para la aplicación engined. Vanessa es licenciada por Telecom Saint-Etienne. Comenzó su carrera en el Instituto de Investigación Criminal como desarrolladora del departamento audiovisual. También ha trabajado en medios de comunicación y en el ámbito médico como experta en soporte técnico, producción y documentación de nuevas funcionalidades.