Eine Einführung in die objektorientierte Programmierung in 4D: Klassen

Viele von Ihnen haben sich gewünscht, einen Objekttyp definieren zu können, seit es den Typ Objekt gibt. Dank der Objektnotation träumen viele von Ihnen davon, Objektfunktionen zu haben. Träumen Sie nicht länger und sagen Sie Hallo zu den Klassen in der 4D v18 R3 Projektdatenbank! In diesem Blogbeitrag stellen wir Ihnen eines der interessantesten Konzepte der objektorientierten Programmierung vor … zusammen mit einem Datenbankbeispiel und einem Bonusvideo!

Beispiel mit „Person“-Klasse

Hinweis: Ab 4D v18 R3 werden alle HDIs auf GitHub gehostet. Sie können entweder den HDI klonen oder direkt die Zip-Datei herunterladen. Details dazu finden Sie in diesem Abschnitt.

Was ist eine Klasse?

Eine Klasse ist ein benutzerdefinierter Datentyp, mit dem Sie das Verhalten eines Objekts definieren können. Sie enthält ihre eigenen Mitgliedsfunktionen, auf die zugegriffen werden kann, wenn eine Instanz der Klasse erstellt wird.

Wie man eine Klasse erstellt

Sie können eine Klasse über das Menü Neu in der Symbolleiste oder über den Explorer-Dialog erstellen. Jetzt, wo der Klasseneditor angezeigt wird, können Sie den Konstruktor und die Funktionen erstellen.

Wie erstellt man Klassenfunktionen?

Um eine Funktion zu erstellen, müssen Sie das Schlüsselwort Function verwenden, gefolgt von dem Namen der Funktion. Anschließend können Sie (wie bei Methoden) Parameter übergeben.

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

Was ist die Klasse store?

Sie kennen bereits den Befehl ds (mit dem Sie auf den Datenspeicher zugreifen können). Mit der gleichen Logik können Sie nun den Befehl cs verwenden, der den Klassenspeicher zurückgibt. Alle Klassen, die Sie erstellen, sind im Klassenspeicher sichtbar und verfügbar.

Um ein Objekt zu erstellen, das eine Instanz einer Klasse ist, verwenden Sie den Befehl cs und die Mitgliedsfunktion new.

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

Was ist ein Konstruktor?

Ein Konstruktor wird verwendet, um ein Objekt mit Standardattributen zu erstellen und zu instanziieren. Er wird automatisch aufgerufen, wenn das Objekt initialisiert wird.

Schreiben Sie im Editor einfach Class constructor. Sie können Ihrem Konstruktor Parameter übergeben, um bestimmte Variablen zu initialisieren, so wie Sie es bei einer Methode mit $1, $2, etc. tun können.

Für die Klasse:

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

Für die Methode, die ein Objekt der Klasse instanziiert, übergeben Sie den Parameter an die neue Mitgliedsfunktion:

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

Beispiel

Schauen wir uns ein konkretes Beispiel mit einer Klasse „Person“ an. Ich erstelle:

  • einen Konstruktor,
  • eine getFullName Funktion,
  • eine getAge Funktion.

Hier ist der Inhalt meiner Klasse:

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

Jetzt erstelle ich in einer Methode ein Objekt „Person“. Dann lese ich die Attribute und führe die Funktionen aus.

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

Wie geht’s weiter?

Im nächsten Blogbeitrag werden wir den Begriff der Vererbung zwischen Klassen diskutieren.

Vanessa Talbot
Product Owner - Vanessa Talbot kam im Juni 2014 zum 4D Programmteam. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Seit ihrer Ankunft hat sie an der Definition der wichtigsten Funktionen in 4D gearbeitet. Sie hat an den meisten der neuen Funktionen für präemptives Multi-Threading gearbeitet und auch an einem sehr komplexen Thema: der neuen Architektur für erstellte Anwendungen. Vanessa hat einen Abschluss von der Telecom Saint-Etienne. Sie begann ihre Karriere am Criminal Research Institute als Entwicklerin für die audiovisuelle Abteilung. Sie hat auch in den Bereichen Medien und Medizin als Expertin für technischen Support, Produktion und die Dokumentation neuer Funktionen gearbeitet.