Классика баз данных - статьи

       

в вычисляющем выражении используется глобальная


Отметим, что в вычисляющем выражении используется глобальная R-переменная типа GoodsMotion.
ALTER CLASS Warehouse REALIZE Address As STORED REALIZE ResourceItems AS SUMMARIZE ( SUMMARIZE (GoodsMotion WHERE ToWarehouse = this) BY Art ADD Sum(MovedItems.Pieces) AS SumPieces UNION SUMMARIZE (GoodsMotion WHERE ToWarehouse = this) BY Art ADD Sum(0-MovedItems.Pieces) AS SumPieces) BY Art ADD Sum(SumPieces) AS Pieces;
Как мы уже сказали, R-переменные позволяют получить ссылку на объект типа t на основании данных компонентов объектов этого типа. Из этого, в частности, следует, что для того, чтобы получить доступ к тому или иному объекту нет нужды хранить его OID. В свою очередь это означает, что при создании объекта не нужно сохранять его OID в ссылочной переменной, что позволяет использовать оператор new, создающий объект, как непроцедурную команду.
Замечание. Из этого, в частности, следует, что особенно важным становится использование конструкторов, позволяющих инициализировать компоненты объекта в процессе его создания (объект, созданный командой new без использования конструктора не будет содержать данных, позволяющих отличить его от других объектов того же класса).
Пример. Предположим, что у типа Article создан конструктор, принимающий в качестве параметра наименование артикула.
ALTER CLASS Article ADD Article( InArticle As STRING);
ALTER CLASS Article REALIZE Article AS BEGIN No := InArticle; END;
Создадим командой
new Article("art1");
новый объект класса Article. Отметим, что при этом мы не сохранили ссылку на этот объект. Однако она всегда может быть получена путем выборки из R-переменной типа Article. Например, объявленная в теле метода локальная переменная refArt ссылочного типа Article …
BEGIN … refArt Article; refArt := Object(Article WHERE No = "art1") … END
… инициализируется ссылкой на созданный ранее объект. Ограничение целостности GLOBALKEY, установленное ранее для поля No, гарантирует, что выборка по этому полю вернет ссылку на один единственный объект.

Содержание  Назад  Вперед