ГОСТ РИСО 21090—2016
7.3.3.4.2В таблице 7 суммируются отношения между значениями null, nullFlavor и равенством
equals.
Таблица 7 — Отношения между значениями null. nullFlavor и равенством equals
Другое значение пий
nullFlavor
Правильное значение
Это значение
nullnull
null
null
nullFlavornull
nullFlavor1*
nullFlavor1>
Правильное значениеnull
nullFlavor21
правильное значение21
1>Первая общая генерализация обоих причин пустоты nullFlavor.
Если особо не оговорено для специализации, используется общий алгоритм равенства.
Согласно общему алгоритму равенства equals два значения равны, если они имеют одинаковый
типа данных и если равны все атрибуты, не унаследованные от типов данных HXIT и ANY. Если ка
кой-либо из приравниваемых атрибутов имеет пустое значение null или причину пустоты nullFlavor. то
результат равен пустому значению null или первой общей генерализации причин пустоты (см. коммен
тарии к сравнению причин пустоты в 7.1.4.
Операция равенства equals является рефлексивной, симметричной, транзитивной и постоянной,
и все реализации должны удовлетворять этим требованиям. Правила равенства equals, определенные
в настоящем стандарте, этим требованиям удовлетворяют.
Операция equals удовлетворяет общим правилам, описанным для операций и для причин пу
стоты, приведенным в 7.1.4. но здесь для большей ясности эти правила описаны более глубоко. В
частности, правила транзитивны при применении операции равенства equals: если какой-либо из
атрибутов или элементов коллекции имеет причину пустоты nullFlavor (отличающуюся от при чины
NA). то результатом будет то же самое значение причины пустоты nullFlavor, если иное особо не
оговорено.
Операции равенства equals не переопределяют ни операцию «=», определенную в языке OCL.
ни обычный эквивалент последней, используемой в любой платформе реализации. Она определяет
семантическое равенство.
Примечание — При проверке равенства атрибуты updateMode и flavorld всегда игнорируются.
7.3.3.5 Инварианты
Экземпляр может иметь тип данных ANY (а не его специализацию), если у него есть причина пу
стоты nullFlavor, у которой не подразумевается значение INV.
Представление инвариантов на языке OCL:
def: let isNull : Boolean - nullFlavor.oclIsDefined
def: let isNotNull : Boolean - not isNull
def: let noUpdate : Boolean - updateMode.ocllsL’ndefined
def: let noUpdateOrHistory{> : Boolean - noUpdate and
noHistory
def: let noUpdateQrHistory(member : ANY) : Boolean
member.oclisbefined implies member.noUpdate and member.noHistory
def: let invalid : Boolean - (nullFlavor - NullFlavor.INV or
nullFlavor - NullFlavor.OTH or nullFlavor - NullFlavor.P1NF or
nullFlavor - NullFlavor.N1NF or nullFlavor - NullFlavor.*JNC or
nullFlavor - NullFlavor.DER)
inv "тип данных ANY разреиен только при наличии причины пустоты nullFlavor":
(isNotNull or invalid) implies
not ocllsTypeOf(ANY)
26