Objektorientierte Programmierung in 4D: Verwalten der Klassenvererbung

In einem früheren Blogbeitrag haben wir ein sehr wichtiges Konzept der objektorientierten Programmierung vorgestellt: Klassen. Jetzt werden wir ein weiteres Kernkonzept durchgehen: Vererbung, der Mechanismus, der es einer Klasse ermöglicht, das Verhalten einer anderen Klasse zu übernehmen.

Beispiel einer Datenbank

Erinnern Sie sich an das Beispiel aus dem letzten Blogbeitrag mit der Klasse „Person“? Stellen wir uns eine Schule vor und wir wollen Schüler und Lehrer verwalten. Beide sind Personen, aber mit unterschiedlichen Eigenschaften. Wir erstellen also eine Klasse „Lehrer“ und eine Klasse „Schüler“, und beide Klassen erben Eigenschaften von der Klasse „Person“.

Wie kann man eine Klasse von einer anderen erben?

Ein neues Class extends Schlüsselwort ist jetzt verfügbar, um die Vererbung zu erleichtern. In unserem Schulbeispiel erstellen wir eine Klasse „Student“, die von der Klasse „Person“ erbt.

Class Extends Person

Und der Konstruktor?

Dann wird für den Konstruktor (wenn Sie keinen speziellen Konstruktor für die Klasse „Schüler“ definiert haben) automatisch der Konstruktor der Klasse „Person“ aufgerufen.

Sie können auch einen Konstruktor außer Kraft setzen. Zum Beispiel im Fall von „Student“: Ein Schüler hat einen Namen, einen Nachnamen und ein Geburtsdatum wie eine Person, aber ein Schüler hat auch eine Klasse und eine Schule. In diesem Fall können Sie den Befehl new Super Befehl verwenden, mit dem Sie den Konstruktor der Elternklasse aufrufen können. Im Konstruktor „Student“ können Sie dann den spezifischen Code für Note und Schule hinzufügen.

Class constructor
C_TEXT( ) ( ) ( ) ( ) ( ) ( ; ; ) $1 // FirstName
C_TEXT$2 // LastName
C_DATE$3 // Birthdate
C_TEXT$4 // SchoolName
C_TEXT$5 // Grade
Super$1$2$3 // Call the "Person" constructor
This
.SchoolName:= $4
This . :=Grade$5

Und die Funktionen?

Sie können spezifische Funktionen für die Klasse „Student“ hinzufügen, von denen aus Sie eine Funktion der übergeordneten Klasse („Person“) aufrufen können.

Im folgenden Beispiel haben wir eine Funktion, die eine Zeichenkette mit dem Namen, der Klasse und der Schule des Schülers zurückgibt. In der Klasse „Person“ haben wir bereits eine Funktion, die den vollständigen Namen einer Person zurückgibt. Wir rufen also diese Funktion getFullName auf und fügen die für einen Schüler spezifischen Informationen hinzu.

Function getIdentity
C_TEXT( ) := . ()+", "+ . +" Note in "+ .$0
$0SupergetFullNameThisGradeThisSchoolName

In einer Methode instanziieren wir eine Instanz der Klasse „Student“. Wir rufen die Funktion getFullName von der übergeordneten Klasse „Person“ auf. Dann rufen wir die Funktion getIdentity von der Klasse „Student“ aus auf. Wie Sie sehen können, gibt es keine Unterschiede zwischen den Funktionen getFullName und getIdentity.

C_OBJECT($s)
$s :=cs.Student.new("Joe"; "Doe";!2002-02-20!; "Waco High School"; "10th")

$name :=$s.getFullName()
//return John Doe
$identity :=$s.getIdentity() //return Joe DOE, 10th grade in Waco High School

Eine Live-Demonstration zum Zusammenfassen

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.