Рассмотрим введенную ранее групповую операцию Object(x), возвращающую OID всех объектов, данные о которых содержатся в R-переменной x. Например, выражение Object(t) вернет OID всех существующих в системе объектов класса t.
Пример. Предположим, что существует групповая переменная someSales ссылочного типа Sales. После выполнения операции
someSales := Object(Sales WHERE IsPayed = TRUE);
эта переменная будет содержать ссылки на объекты типа Sales, описывающие уже оплаченные продажи.
Вспомним, что ссылки разыменовываются, то есть любая операция, отличная от операций присваивания и сравнения, выполняется не над ссылкой, а над объектом, на который эта ссылка указывает. Это замечание справедливо и для операции обращения к компоненту объекта. Если существует ссылка o на объект класса t, то выражение o.a описывает обращение к компоненту a объекта (или объектов), на который указывает ссылка o. Соответственно, выражение reft.a можно рассматривать как имя R-переменной, значение которой представляет собой совокупность значений компонента a тех объектов типа t, ссылки на которые содержатся в переменной reft. Значение R-переменной reft.a вычисляется как t.a JOIN reft.
Отметим явную аналогию, которая существует между именем R-переменной t.a, содержащей совокупность значений компонентов a всех существующих в системе объектов типа t, и именем R-переменной reft.a, описывающим такую же совокупность для группы объектов, определяемой ссылкой reft (эта группа, возможно, состоит из одного объекта). Схемы этих переменных полностью совпадают. И в том, и другом случае подразумевается, что речь идет о совокупности значений компонента а некоторой группы объектов. Такая аналогия подразумевает, что эти переменные могут использоваться в одних и тех же операциях.
Пример. Уже описанная переменная someSales ссылочного типа Sales после операции
someSales := Object(someSales.SaleItems WHERE Price > 100);
будет содержать ссылки на объекты типа Sales, описывающие уже оплаченные продажи, содержащие строки продаж с ценой больше, чем 100.