Значение вычисляемого атрибута oa определяется
=
DCi . oa, где DCi
. oa =
o.oa.
Переопределение атрибутов.
Значение вычисляемого атрибута oa определяется оператором Ea, ассоциированным с этой переменной. Поскольку этот оператор определен только в реализации схемы объектов класса C, можно предположить, что он может переопределяться в процессе наследования. Отметим, что переопределение, подразумевающее изменение реализации схемы объектов при неизменной спецификации, является одним из способов создания полиморфных[4] систем.
Рассмотрим класс С0 со схемой SC0 = {oa1: R1: C0Ea , oa2:R2,…, oan:Rn}. Атрибут oa1 вычисляется исходя из значений других атрибутов выражением C0Ea, oa1 = C0Ea
(oa2, … , oan). Предположим, что для этого класса определен реляционный оператор E
С0.E(oa1, … , oan)
Рассмотрим иерархию IC0
и входящие в нее классы Сi (i > 0), которые являются наследником класса C0
и имеют схему SCi = { oa1:R1:CiEa, oa2:R2,…, oan:Rn, oa2:R2,…, oan:Rn, oan+1:Rn+1,…, oap:Rp
}. В процессе наследования, выражение, вычисляющее значение атрибута oa1, может быть переопределено, причем, возможно, оно будет учитывать значения атрибутов oan+1,…, oap, отсутствующих в родительском класса C0
oa1 = CiEa
(oa2, … , oap).
Рассмотрим значение С0.oa1
представляющее собой объединение значений атрибутов oa1 объектов класса С0, o О C0
С0.oa1 =
DCi . oa1 , где DCi.oa =
o.oa. <28>
Как мы ранее показывали, значение переопределяемого атрибута oa объекта ok любого из классов Ci на уровне хранения будет вычисляться следующим выражением
ok.oa1 = ok.
CiE(oa2, … , oa n, …) OєR'
s(raOID= OIDk) (CiE'a
(A2, … , An, … )) ґ
{a1} <29>
Выражение, объединяющее значения атрибутов oa всех объектов, созданных как объекты класса Сi, будет выглядеть как
DCi oa1 =
DCi .
CiE(oa2, … , oa n, …) OєR'
s(raOID OFA Ci )( CiE'a
Содержание Назад Вперед