и другие реализации. Например, любой
Возможны и другие реализации. Например, любой компонент может быть реализован как операция, которая возвращает значение…
ALTER CLASS ... REALIZE Items ... AS SELECT ... ;
…или как алгоритмическая последовательность операций, возможно, выполняющих более сложные вычисление и/или изменяющих состояние системы:
ALTER CLASS Shipment … REALIZE DoShip(ShipmentDate DATETIME) BOOL AS BEGIN … END;
Реализацию можно менять в процессе наследования. Например, определим новый тип SALE, описывающий продажу. Естественно, продаваемый товар, так или иначе, должен отгружаться со склада, и поэтому тип SALE определяется как подтип типа SHIPMENT:
CREATE CLASS SALE EXTEND SHIPMENT { ... SaleItems SET OF { Article STRING; Pieces INTEGER; Price FLOAT; } }
Мы должны хранить информацию о каждом проданном товаре - поэтому компонент SaleItems реализуется нами как хранимый. ALTER CLASS SALE REALIZE SaleItems AS STORED;
Определенный же в родительском классе унаследованный компонент Items (он содержит данные об отгруженных количествах) переопределяется как вычисляемый, что отражает тот факт, что отгруженные количества в точности должны равняться количествам проданным: ALTER CLASS SALE REALIZE Items ... AS SELECT Article, Sum(Pieces) FROM SaleItems GROUP BY Article;
При этом создание класса наследника не влечет за собой необходимости изменять код, использующий спецификацию родительского класса (что присуще ОО-системам). Так, в нашем примере не придется изменять созданный ранее вид ShippedGoods. Это происходит из-за того, что при создании этого вида было использовано отношение Shipment.Items, которое впоследствии было переопределено. Фактически, это отношение содержит данные компонента, реализованного в одних объектах как хранимый, а в других - как вычисляемый (таким образом, само это отношение можно назвать полиморфным). Имеет место аналогия с вызовом полиморфных методов объектов в современных ОО-языках – отличие заключается в том, что при вызове полиморфного метода система неявно выбирает одну из реализаций, отношения же RxO-системы являются результатом неявного объединения
Содержание Назад Вперед