Introduzione alla programmazione orientata agli oggetti in 4D: Classi

Tradotto automaticamente da Deepl

Molti di voi hanno chiesto di poter definire un tipo di oggetto da quando il tipo Object è diventato disponibile. Grazie alla notazione a oggetti, molti di voi sognano di avere funzioni a oggetti. Non sognate più e salutate le classi nel database del progetto 4D v18 R3! In questo post introduciamo uno dei concetti più interessanti della programmazione orientata agli oggetti… insieme a un esempio di database e a un video bonus!

Esempio con la classe “Persona

Nota: a partire da 4D v18 R3, tutte le HDI saranno ospitate su GitHub. È possibile clonare l’HDI o scaricare direttamente il file Zip. Consultate questo paragrafo per i dettagli.

Cos’è una classe?

Una classe è un tipo di dati definito dall’utente che consente di definire il comportamento di un oggetto. Contiene le proprie funzioni membro a cui si può accedere e che possono essere utilizzate quando viene creata un’istanza della classe.

Come creare una classe

È possibile creare una classe dal menu Nuovo della barra degli strumenti o dalla finestra di dialogo Esplora risorse. Ora che l’editor di classe è visualizzato, è possibile creare il costruttore e le funzioni.

Come si creano le funzioni della classe?

Per creare una funzione, è necessario utilizzare la parola chiave Function seguita dal nome della funzione. Poi, si possono passare dei parametri (come per i metodi).

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

Che cos’è il negozio di classi?

Conoscete già il comando ds (che consente di accedere al datastore). Ora, utilizzando la stessa logica, si ha il comando cs che restituisce l’archivio delle classi. Tutte le classi create sono visibili e disponibili nell’archivio delle classi.

Per creare un oggetto che sia un’istanza di una classe, si usa il comando cs e la funzione membro new.

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

Che cos’è un costruttore?

Un costruttore viene utilizzato per creare e istanziare un oggetto con attributi predefiniti. Viene chiamato automaticamente quando l’oggetto viene inizializzato.

Nell’editor, è sufficiente scrivere Class constructor. Si possono passare dei parametri al costruttore per inizializzare alcune variabili, proprio come si può fare con un metodo, usando $1, $2, ecc.

Per la classe:

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

Per il metodo che istanzia un oggetto della classe, passare il parametro alla nuova funzione membro:

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

Esempio

Vediamo un esempio concreto con la classe “Persona”. Creo:

  • un costruttore,
  • una funzione getFullName,
  • una funzione getAge.

Ecco il contenuto della mia classe:

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

Ora, in un metodo, creo un oggetto “Persona”. Poi, leggo gli attributi ed eseguo le funzioni.

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

Cosa succede ora?

Nel prossimo post del blog, discuteremo la nozione di ereditarietà tra classi.

Vanessa Talbot
- Product Owner - Vanessa Talbot è entrata a far parte del team di 4D Program nel giugno 2014. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente. Ha lavorato sulla maggior parte delle nuove funzionalità di multi-threading preemptive e anche su un argomento molto complesso: la nuova architettura per le applicazioni con motore. Vanessa si è laureata presso Telecom Saint-Etienne. Ha iniziato la sua carriera presso il Criminal Research Institute come sviluppatrice per il dipartimento audiovisivo. Ha lavorato anche nei settori dei media e della medicina come esperta di supporto tecnico, produzione e documentazione di nuove funzionalità.