Dataclasses bieten Objektschnittstellen zu Datenbanktabellen. Alle Dataclasses in einer 4D Anwendung sind als Eigenschaft des Datastore ds verfügbar. Betrachten Sie beispielsweise die folgende Tabelle in der 4D Struktur.

Die Tabelle [Company] ist automatisch als eine Dataclass im Datastore ds verfügbar. Sie können schreiben:
C_OBJECT(compClass)
compClass:=ds.Company
Dieser Code weist compClass eine Referenz auf die Dataclass Company zu.
Ein Objekt Dataclass enthält:
- Attribute
- Verknüpfungsattribute
Die Dataclass bietet eine Abstraktion der physikalischen Datenbank und erlaubt den Umgang mit einem konzeptionellen Datenmodell. Die Dataclass ist die einzige Möglichkeit, den Datastore abzufragen. Eine Abfrage erfolgt aus einer einzigen Dataclass. Sie basiert auf Attributen und Verknüpfungsattributen der Dataclasses. Die Verknüpfungsattribute sind also das Mittel, um mehrere verknüpfte Tabellen in eine Abfrage einzubinden.
Attribute der Dataclass stehen als Eigenschaften ihrer jeweiligen Klassen zur Verfügung. Zum Beispiel:
nameAttribute:=ds.Company.name
revenuesAttribute:=ds.Company["revenues"]
Dieser Code ordnet nameAttribute und revenuesAttribute Referenzen auf die Attribute name und revenues der Klasse Company zu. Diese Syntax gibt KEINE Werte innerhalb des Attributs zurück, sondern Referenzen auf die Attribute selbst. Für Werte müssen Sie Entities durchlaufen.
Hinweis: Dataclass-Attribute sind Objekte, die Eigenschaften haben. Weitere Informationen dazu finden Sie im Abschnitt ORDA - DataClassAttribute.
Es gibt verschiedene Arten von Dataclass-Attributen: Storage, relatedEntity und relatedEntities. Attribute, die skalar sind (d.h. nur einen einzigen Wert liefern), unterstützen den standardmäßigen 4D Datentyp (Lange Ganzzahl, Text, Objekt, etc.).
- Ein Speicherattribut entspricht einem Feld in der 4D Datenbank und kann indiziert werden. Werte, die einem Speicherattribut zugeordnet sind, werden beim Sichern als Teil der Entity gespeichert. Beim Zugriff auf ein Speicherattribut kommt sein Wert direkt aus dem Datastore. Speicherattribute sind der grundlegendste Baustein einer Entity und werden durch Namen und Datentyp definiert.
- Ein Verknüpfungsattribut ermöglicht den Zugriff auf andere Entities. Verknüpfungsattribute können entweder eine einzelne Entity (oder keine Entity) oder eine Entity-Selection (0 bis N Entities) ergeben. Sie basieren auf "klassischen" Verknüpfungen in der relationalen Struktur, um einen direkten Zugriff auf verknüpfte Entities zu ermöglichen. Verknüpfungsattribute sind in ORDA direkt über ihren Namen verfügbar.
Betrachten Sie beispielsweise die folgende partielle Datenbankstruktur und die Verknüpfungseigenschaften:

Alle Speicherattribute sind automatisch verfügbar:
- in der Dataclass Project: "ID", "name" und "companyID"
- in der Dataclass Company: "ID", "name" und "discount"
Zusätzlich sind automatisch die folgenden Verknüpfungsattribute verfügbar:
- in der Dataclass Project: Attribut theClient vom Typ "relatedEntity"; für jedes Projekt (Client) gibt es mindestens eine Company
- in der Dataclass Company: Attribut companyProjects vom Typ "relatedEntities"; für jede Company gibt es eine beliebige Anzahl verknüpfter Projekte
Hinweis: Die Eigenschaft "Manuell" oder "Automatisch" von Verknüpfungen hat keine Auswirkung in ORDA.
Alle Attribute der Dataclass werden als Eigenschaften der Dataclass angezeigt:

Beachten Sie, dass diese Objekte Attribute beschreiben, aber keinen Zugriff auf Daten gewähren. Das Lesen oder Schreiben von Daten erfolgt über Entity-Objekte. Weitere Informationen dazu finden Sie im Abschnitt Entity Attribute verwenden.
Einige ORDA-Methoden akzeptieren String-Referenzen als Attributnamen und können auch Attribut-Referenzen akzeptieren. Betrachten Sie zum Beispiel folgendes:
localPeople:=ds.Employee.query("zipCode = 95113")
lastNames:=localPeople.toCollection("lastname")
Dieser Code definiert eine Entity-Selection von Personen im Postleitzahlbereich 95113. Er erzeugt dann eine Collection von Nachnamen. Anstelle eines String-Wertes in Form eines Attributs können Sie auch eine Attribut-Referenz verwenden:
lastNameAtt:=ds.Employee.lastname
localPeople:=ds.Employee.query("zipCode = 95113")
lastNames:=localPeople.toCollection(lastNameAtt)
Das Objekt Dataclass selbst kann nicht als Objekt kopiert werden:
$mydataclass:=OB Copy(ds.Employee)
Die Eigenschaften der Dataclass sind dagegen aufzählbar:
ARRAY TEXT($prop;0)
OB GET PROPERTY NAMES(ds.Employee;$prop)