Las clases de datos ofrecen interfaces de objetos a las tablas de la base. Todas las clases de datos en una aplicación 4D están disponibles como una propiedad del almacén de datos ds. Por ejemplo, considere la siguiente tabla en la estructura 4D.

La tabla [Company] está automáticamente disponible como una clase de datos en el almacén de datos ds. Puede escribir:
C_OBJECT(compClass)
compClass:=ds.Company
Este código asigna a compClass una referencia a la clase de datos Company.
Un objeto clase de datos puede contener:
- atributos
- atributos de relación
La clase de datos ofrece una abstracción de la base física y permite manejar un modelo conceptual de datos. La clase de datos es el único medio para consultar el almacén de datos. Una búsqueda se hace desde una sola clase de datos. Las búsquedas se basan en atributos y nombres de atributo de relación de las clases de datos. Entonces los atributos de relación son los medios para involucrar varias tablas enlazadas en una búsqueda.
Los atributos de clase de datos están disponibles como propiedades de sus clases respectivas. Por ejemplo:
nameAttribute:=ds.Company.name
revenuesAttribute:=ds.Company["revenues"]
Este código asigna a nameAttribute y revenuesAttribute referencias a los atributos name y revenues de la clase Company. Esta sintaxis NO devuelve valores contenidos dentro del atributo, sino que devuelve referencias a los mismos atributos. Para manejar valores, debe pasar por Entidades.
Nota: los atributos de clase de datos son objetos que tienen propiedades, detallados en la sección ORDA - DataClassAttribute.
Los atributos de clase de datos vienen en varios tipos: almacenamiento, entidadRelacionada y entidadRelacionadas. Los atributos que son escalares (es decir, ofrecen un único valor) admiten el tipo de datos 4D estándar (entero largo, texto, objeto, etc.).
- Un atributo de almacenamiento es equivalente a un campo en la base 4D y puede ser indexado. Los valores asignados a un atributo de almacenamiento se almacenan como parte de la entidad cuando se guardan. Cuando se accede a un atributo de almacenamiento, su valor proviene directamente del almacén de datos. Los atributos de almacenamiento son el elemento básico más básico de una entidad y se definen por nombre y tipo de datos.
- Un atributo de relación ofrece acceso a otras entidades. Los atributos de relación pueden dar como resultado una sola entidad (o ninguna entidad) o una selección de entidad (de 0 a N entidades). Los atributos de relación se basan en relaciones "clásicas" en la estructura relacional para ofrecer acceso directo a la entidad relacionada o entidades relacionadas. Los atributos de relación están directamente disponibles en ORDA usando sus nombres.
Por ejemplo, considere la siguiente estructura de base de datos parcial y las propiedades de relación:

Todos los atributos de almacenamiento estarán disponibles automáticamente:
- en la clase de datos Project: "ID", "name" y "companyID"
- en la clase de datos Company: "ID", "name" y "discount"
Además, los siguientes atributos de relación también estarán disponibles automáticamente:
- en la clase de datos Project: el atributo theClient, del tipo "relatedEntity"; hay como máximo una compañía para cada proyecto (el cliente)
- en la clase de datos Company: atributo companyProjects, del tipo "relatedEntities"; para cada empresa hay una cantidad de proyectos relacionados.
Nota: la propiedad Manual o automática de una relación de base no tiene ningún efecto en ORDA.
Todos los atributos de clase de datos están expuestos como propiedades de la clase de datos:

Tenga en cuenta que estos objetos describen atributos, pero no dan acceso a los datos. Leer o escribir datos se hace a través de objetos de entidad. Para más información sobre cómo usar los atributos relacionados en las entidades, consulteUtilizar atributos entidad.
Algunos métodos ORDA aceptan referencias de cadenas como nombres de atributos y también pueden aceptar referencias de atributos. Por ejemplo, considere lo siguiente:
localPeople:=ds.Employee.query("zipCode = 95113")
lastNames:=localPeople.toCollection("lastname")
Este código define una selección de entidades de personas en el código postal 95113. Luego produce una colección de apellidos. En lugar de un valor de cadena que representa un atributo, también puede usar una referencia de atributo como esta:
lastNameAtt:=ds.Employee.lastname
localPeople:=ds.Employee.query("zipCode = 95113")
lastNames:=localPeople.toCollection(lastNameAtt)
El objeto clase de datos en sí no se puede copiar como un objeto:
$mydataclass:=OB Copy(ds.Employee)
Las propiedades clase de datos son sin embargo enumerables:
ARRAY TEXT($prop;0)
OB GET PROPERTY NAMES(ds.Employee;$prop)