100 likes | 241 Vues
Лекция. RAISE Specification Language: отображения и операции с отображениями. План лекции. Отображения ( Maps) Описание типов Литералы и агрегаты Операции с отображениями Диаграмма Гогена Пример. Отображения ( Maps ). Свойства отображений:
E N D
Лекция RAISE Specification Language: отображения и операции с отображениями
План лекции • Отображения (Maps) • Описание типов • Литералы и агрегаты • Операции сотображениями • Диаграмма Гогена • Пример А.К.Петренко. Методы формальной спецификации программ - I. Лекция 4
Отображения (Maps) • Свойства отображений: • - каждый ключ может встретиться только один раз • - порядок ключей не определен А.К.Петренко. Методы формальной спецификации программ - I. Лекция 4
Описание типов type MT12 = T1 -m-> T2 детерминированное отображение MT12 = T1 -~m-> T2 недетерминированное отображение А.К.Петренко. Методы формальной спецификации программ - I. Лекция 4
Литералы и агрегаты [1 +> true, 3+>false, 2+>true] [] [“Petrov”+>”912-5317”, “Ivanov”+>”125-7652” генерация отображения [ n+>2*n | n : Nat :- n < 100 ] А.К.Петренко. Методы формальной спецификации программ - I. Лекция 4
Операции с отображениями dom rng m(k) - “применение” - найти значение по ключу k в отображении m !! () - (dagger) добавить или переопределить значение ключа (override) union - добавить (но не переопределить) # () - композиция \ - убрать ключи из s / - оставить только ключи из s А.К.Петренко. Методы формальной спецификации программ - I. Лекция 4
Операции с отображениями dom M -> K-set rngM -> V-set m(k) M >< K -~-> V !! M >< K-set -> M union M >< K-set -> M # () M1 >< M2 -> M3 \ M >< K-set -> M / M >< K-set -> M А.К.Петренко. Методы формальной спецификации программ - I. Лекция 4
K Диаграмма Гогена Задание: Нарисуйте связи, которые задают операции над отображениями между этими типами данных Bool K -m-> V K-set V V-set А.К.Петренко. Методы формальной спецификации программ - I. Лекция 4
Пример: Библиотека (1) LIBRARY_MAP = class type Books = Book-set, File = Book -m-> Reader, Readers = Reader-set, Reader, Book value book_out : Reader >< Readers >< Book >< Books>< File-~-> File book_in : Book >< Books >< File -~-> File, register : Reader >< Readers -~-> Readers, register : Book >< Books -~-> Books, unregister : Book >< Books -~-> Books, unregister : Reader >< Readers -~-> Readers, look_up : Book >< Books -> Bool, look_up : Reader >< Readers -> Bool, look_up : Book >< File -> Bool А.К.Петренко. Методы формальной спецификации программ - I. Лекция 4
Пример: Библиотека (2) axiom all b : Book, bs : Books, r : Reader, rs : Readers, f : File :- look_up (b, empty) is false, ~look_up (b, bs) => look_up (b, register (b, bs)) или look_up (b, register (b, bs)) pre look_up (b, bs) = false или if ~look_up (b, bs) then look_up (b, register (b, bs)) else true end, ~look_up (r, rs) => look_up (b, register (r, rs)) , ~look_up (b, f) => look_up (b, register (r, rs)) pre ~look_up (b, bs) , look_up (r, rs) => look_up (r, unregister (r, rs))= false , look_up (b, bs) => look_up (b, unregister (b, bs))= false , book_in (b,bs, r, rs, book_out(r, rs, b, bs, file)) is file pre look_up (b, bs) /\ look_up (r, rs) /\ ~look_up (b, file) end А.К.Петренко. Методы формальной спецификации программ - I. Лекция 4