5.12.1 Общие положения
Данный подраздел содержит функции, на которые производится ссылка из разделов по месту для подтверждения непротиворечивости данных и которые предоставляют ресурсы для разработки приложений.
5.12.2 Функция ациклического соотношения суперклассов (Acyclic_superclass_relationship)
Функция acyclic_superclass_relationship проверяет отсутствие цикла в соотношении суперклассов. Кардинальное число атрибута its_superclass в классе сущностей гарантирует, что существует дерево наследственности, а ациклических графов нет. Данная функция не проверяет тот факт, что реализации класса не ссылаются (в атрибуте its_superclass) на другую реализацию, которая, в сущности, является подклассом.
Пример представления на языке EXPRESS:
*)
FUNCTION acyclic_superclass_relationship (
current: class_BSU; visited: SET OF class): LOGICAL;
IF SIZEOF (current.definition)=1 THEN
IF current.definition[1] IN visited THEN
RETURN (FALSE);
(* wrong: current declares a subclass as its superclass *)
ELSE
IF EXISTS (current.definition[1]\class.its_superclass)
THEN
RETURN (acyclic_superclass_relationship (
current.definition[1]\class.its_superclass,
visited + current.definition[1]));
ELSE
RETURN (TRUE);
END_IF;
END_IF;
ELSE
RETURN (UNKNOWN);
END_IF;
END_FUNCTION; -- acyclic_superclass_relationship
(*
5.12.3 Функция проверки длины (Check_syn_length)