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!
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.