🗊Презентация Объектная модель данных

Категория: Информатика
Нажмите для полного просмотра!
Объектная модель данных, слайд №1Объектная модель данных, слайд №2Объектная модель данных, слайд №3Объектная модель данных, слайд №4Объектная модель данных, слайд №5Объектная модель данных, слайд №6Объектная модель данных, слайд №7Объектная модель данных, слайд №8Объектная модель данных, слайд №9Объектная модель данных, слайд №10Объектная модель данных, слайд №11Объектная модель данных, слайд №12Объектная модель данных, слайд №13Объектная модель данных, слайд №14Объектная модель данных, слайд №15Объектная модель данных, слайд №16Объектная модель данных, слайд №17Объектная модель данных, слайд №18Объектная модель данных, слайд №19Объектная модель данных, слайд №20Объектная модель данных, слайд №21Объектная модель данных, слайд №22Объектная модель данных, слайд №23Объектная модель данных, слайд №24Объектная модель данных, слайд №25Объектная модель данных, слайд №26Объектная модель данных, слайд №27Объектная модель данных, слайд №28Объектная модель данных, слайд №29Объектная модель данных, слайд №30Объектная модель данных, слайд №31Объектная модель данных, слайд №32Объектная модель данных, слайд №33Объектная модель данных, слайд №34Объектная модель данных, слайд №35Объектная модель данных, слайд №36Объектная модель данных, слайд №37Объектная модель данных, слайд №38Объектная модель данных, слайд №39Объектная модель данных, слайд №40Объектная модель данных, слайд №41Объектная модель данных, слайд №42Объектная модель данных, слайд №43Объектная модель данных, слайд №44Объектная модель данных, слайд №45

Содержание

Вы можете ознакомиться и скачать презентацию на тему Объектная модель данных. Доклад-сообщение содержит 45 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Объектная модель данных

Бессарабов Н.В.
bes@fpm.kubsu.ru
2016 г.
Описание слайда:
Объектная модель данных Бессарабов Н.В. bes@fpm.kubsu.ru 2016 г.

Слайд 2





Цели лекции
Описание слайда:
Цели лекции

Слайд 3





Зачем нужны объекты в базах данных?
     Реально существующие объекты характеризуются состояниями, которые могут изменяться после наступления некоторых событий.     
     Для реляционной и ER-моделей описание жизненных циклов  (т. е. последовательностей состояний) и самих состояний связаны с определёнными трудностями. Моделирование:
динамических связей между объектами (связь имеет состояния, может создаваться, изменяться, уничтожаться), 
сообщений, которыми могут обмениваться объекты в модели, 
выполнения объектами действий 
не предусмотрены базовой семантикой этих моделей и потому затруднительны или невозможны.
Пример: состояния сущности “Заказ”:
авансирован,
выполняется,
приостановлен,
оплачен,
завершён,
принят.
Описание слайда:
Зачем нужны объекты в базах данных? Реально существующие объекты характеризуются состояниями, которые могут изменяться после наступления некоторых событий. Для реляционной и ER-моделей описание жизненных циклов (т. е. последовательностей состояний) и самих состояний связаны с определёнными трудностями. Моделирование: динамических связей между объектами (связь имеет состояния, может создаваться, изменяться, уничтожаться), сообщений, которыми могут обмениваться объекты в модели, выполнения объектами действий не предусмотрены базовой семантикой этих моделей и потому затруднительны или невозможны. Пример: состояния сущности “Заказ”: авансирован, выполняется, приостановлен, оплачен, завершён, принят.

Слайд 4





Особенности архитектуры Caché
      Объектная система Caché построена на объектном расширении персистентного языка ObjectScript. Уникальная особенность системы в том, что она позволяет работать с данными одновременно в объектной, реляционной и иерархической моделях, не программируя никаких отображений (mappings). Легко получаемые в Caché дедуктивная, полуструктурированная и другие модели, включая так называемые NoSQL, позволяют считать Caché полимодельной СУБД.
Универсальная архитектура Caché 
      В универсальной архитектуре Caché (см. след. слайд) данные и 
объектов и таблиц отображаются в многомерные структуры, хранением которых заведует механизм многомерной памяти.    
      Унифицированные структуры данных доступны и серверу объектов и SQL-серверу. Программное обеспечение промежуточного уровня может обращаться к одному из этих серверов. Шлюз SQL позволяет обмениваться данными с другими базами реляционного типа.
Описание слайда:
Особенности архитектуры Caché Объектная система Caché построена на объектном расширении персистентного языка ObjectScript. Уникальная особенность системы в том, что она позволяет работать с данными одновременно в объектной, реляционной и иерархической моделях, не программируя никаких отображений (mappings). Легко получаемые в Caché дедуктивная, полуструктурированная и другие модели, включая так называемые NoSQL, позволяют считать Caché полимодельной СУБД. Универсальная архитектура Caché В универсальной архитектуре Caché (см. след. слайд) данные и объектов и таблиц отображаются в многомерные структуры, хранением которых заведует механизм многомерной памяти. Унифицированные структуры данных доступны и серверу объектов и SQL-серверу. Программное обеспечение промежуточного уровня может обращаться к одному из этих серверов. Шлюз SQL позволяет обмениваться данными с другими базами реляционного типа.

Слайд 5





Универсальная архитектура Caché
Описание слайда:
Универсальная архитектура Caché

Слайд 6





Система классов Caché (1/3)
      Как всегда, класс задаёт шаблон, по которому создаются объекты определённого им типа. Объект — это экземпляр класса. Метод представляет собой функции или процедуры класса или объекта, определяющие его поведение. Свойства класса не используются для идентификации объектов, как в реляционной модели. Эту роль играют два идентификатора OID и OREF.
Можно считать понятия класса и типа синонимами. Как и в естественных языках, объёмы понятий-синонимов перекрываются, но не совпадают. Предопределённые типы данных инкапсулированы, то есть их определения не доступны для изменения. Однако, пользовательские типы открыты. Обычно классы выстраиваются в иерархию наследования. У типов этого нет. Типы данных не могут содержать свойств. Для типов данных невозможно создавать экземпляры.
Описание слайда:
Система классов Caché (1/3) Как всегда, класс задаёт шаблон, по которому создаются объекты определённого им типа. Объект — это экземпляр класса. Метод представляет собой функции или процедуры класса или объекта, определяющие его поведение. Свойства класса не используются для идентификации объектов, как в реляционной модели. Эту роль играют два идентификатора OID и OREF. Можно считать понятия класса и типа синонимами. Как и в естественных языках, объёмы понятий-синонимов перекрываются, но не совпадают. Предопределённые типы данных инкапсулированы, то есть их определения не доступны для изменения. Однако, пользовательские типы открыты. Обычно классы выстраиваются в иерархию наследования. У типов этого нет. Типы данных не могут содержать свойств. Для типов данных невозможно создавать экземпляры.

Слайд 7





Система классов Caché (2/3)
      В Cache принята следующая нестандартная терминология. Классы вообще подразделяются на классы типов данных и классы объектов. Классы типов данных определяют допустимые значения констант (литералов) и позволяют их контролировать. Классы типов данных содержат предопределённые наборы методов проверки и приведения значений атрибутов к другим типам.
      Незарегистрированные классы (Non-registered Classes) предназначены для создания пользовательской объектной системы. Мы с ними работать не будем.
Описание слайда:
Система классов Caché (2/3) В Cache принята следующая нестандартная терминология. Классы вообще подразделяются на классы типов данных и классы объектов. Классы типов данных определяют допустимые значения констант (литералов) и позволяют их контролировать. Классы типов данных содержат предопределённые наборы методов проверки и приведения значений атрибутов к другим типам. Незарегистрированные классы (Non-registered Classes) предназначены для создания пользовательской объектной системы. Мы с ними работать не будем.

Слайд 8





Система классов Caché (3/3)
      Зарегистрированные классы обладают предопределенным 
поведением, задаваемым набором встроенных функций, наследуемых из системного класса %RegisteredObject (знак процента определяет системность класса или метода) и отвечающих за создание новых объектов и за управление размещением объектов в памяти.
     Зарегистрированные классы делятся на хранимые и встраиваемые. Хранимые классы это потомки класса %Persistent. Они хранятся независимо и потому имеют уникальную и неизменяемую объектную ссылку OID, по которой объект может быть найден на диске, и ссылку OREF для обращения к ним в памяти. Хранимые классы используют весь набор методов класса %Persistent. Здесь конструкторы, методы подкачки объектов, удаления объектов и т.д. 
      Встраиваемые классы наследуют своё поведение от класса %Library.SerialObject. Они могут попасть на диск только в составе хранимого класса и потому имеют OREF но не имеют OID.
Описание слайда:
Система классов Caché (3/3) Зарегистрированные классы обладают предопределенным поведением, задаваемым набором встроенных функций, наследуемых из системного класса %RegisteredObject (знак процента определяет системность класса или метода) и отвечающих за создание новых объектов и за управление размещением объектов в памяти. Зарегистрированные классы делятся на хранимые и встраиваемые. Хранимые классы это потомки класса %Persistent. Они хранятся независимо и потому имеют уникальную и неизменяемую объектную ссылку OID, по которой объект может быть найден на диске, и ссылку OREF для обращения к ним в памяти. Хранимые классы используют весь набор методов класса %Persistent. Здесь конструкторы, методы подкачки объектов, удаления объектов и т.д. Встраиваемые классы наследуют своё поведение от класса %Library.SerialObject. Они могут попасть на диск только в составе хранимого класса и потому имеют OREF но не имеют OID.

Слайд 9





Структура класса Caché
Имя класса понимается в обычном для ООП 
                           смысле.
Параметры. Изменяют возможности класса 
               во время его компиляции. Обычно для ООП
Свойства -- в обычном для ООП  смысле.
Методы понимается в обычном для ООП смысле.
Запросы – операции с объектами класса,
                        играющие роль фильтров
Индексы – необычные для ООП элементы, 
                        используются для ускорения доступа. 
Триггеры – используются только в табл. модели.
Заметим, что свойства это константы предопределённых типов, ссылки на объекты, встроенные объекты, потоки данных (BLOB и CLOB), коллекции (массивы и списки), отношения. 
      В языке UML в структуре класса предусмотрено его имя, атрибуты, операции, сигналы.
Описание слайда:
Структура класса Caché Имя класса понимается в обычном для ООП смысле. Параметры. Изменяют возможности класса во время его компиляции. Обычно для ООП Свойства -- в обычном для ООП смысле. Методы понимается в обычном для ООП смысле. Запросы – операции с объектами класса, играющие роль фильтров Индексы – необычные для ООП элементы, используются для ускорения доступа. Триггеры – используются только в табл. модели. Заметим, что свойства это константы предопределённых типов, ссылки на объекты, встроенные объекты, потоки данных (BLOB и CLOB), коллекции (массивы и списки), отношения. В языке UML в структуре класса предусмотрено его имя, атрибуты, операции, сигналы.

Слайд 10





Форматы данных и их преобразования
Описание слайда:
Форматы данных и их преобразования

Слайд 11





Методы преобразования типов
Описание слайда:
Методы преобразования типов

Слайд 12





Предопределенные типы данных
Описание слайда:
Предопределенные типы данных

Слайд 13





Свойства
Свойства представляют собой константы предопределенных типов, 
ссылки на объекты, встроенные объекты, потоки данных (BLOB, CLOB), 
коллекции, древесные значения и отношения:
Константы 
Пример: Property Name As %String(MAXLEN = 20);
Ссылки на объекты
Каждый класс это тип данных. 
Пример: Пусть имеется хранимый класс Address. Тогда свойство Address 
можно описать так 
Property Addr As Address;
Встроенные объекты
Пример: Пусть имеется встраиваемый класс Address. Свойство Addr 
записывается точно так же как в предыдущем варианте, 
Property Addr As Address;
но речь идет не о ссылке, а о встраивании объекта.
Описание слайда:
Свойства Свойства представляют собой константы предопределенных типов, ссылки на объекты, встроенные объекты, потоки данных (BLOB, CLOB), коллекции, древесные значения и отношения: Константы Пример: Property Name As %String(MAXLEN = 20); Ссылки на объекты Каждый класс это тип данных. Пример: Пусть имеется хранимый класс Address. Тогда свойство Address можно описать так Property Addr As Address; Встроенные объекты Пример: Пусть имеется встраиваемый класс Address. Свойство Addr записывается точно так же как в предыдущем варианте, Property Addr As Address; но речь идет не о ссылке, а о встраивании объекта.

Слайд 14





Пять способов создания класса в Cache
Создание таблицы (нельзя определить методы )
Использование мастера  Studio
Написание текста в Studio
Задание из терминала в COS
Импорт из UML
Описание слайда:
Пять способов создания класса в Cache Создание таблицы (нельзя определить методы ) Использование мастера Studio Написание текста в Studio Задание из терминала в COS Импорт из UML

Слайд 15





Способ 1: Задание таблицы
Предварительно проверяем в портале, не существует ли глобал ^QQD  и класс ^User.QQ.cls в области имён User. Если существуют, удаляем их. Смысл этих действий будет понятен далее.
Исполняем в SQL-менеджере портала в области User команду
                 create table QQ (c1 char(3), c2 number(4))
В разделе “Классы” портала обнаруживаем класс ^User.QQ.cls, щелкнув по позиции “Документация” получаем его описание. 
В Studio для той же области User вызываем (Файл – Открыть ..) описание класса User.QQ.cls : 
Class User.qq Extends %Persistent [ ClassType = persistent, DdlAllowed, Owner = "", SqlRowIdPrivate, SqlTableName =QQ, StorageStrategy = ]
{

Property c1 As %Library.String(MAXLEN = 3) [ 
                                                    SqlColumnNumber = 2 ];

Property c2 As %Library.Numeric(MAXVAL = 9999, MINVAL = 
                                                    -9999, SCALE = 0) [ SqlColumnNumber = 3 ];

}””
Проверяем, не появился ли глобал ^QQD  в области имён User.
Вывод: При создании таблицы появляется соответствующий класс.
Описание слайда:
Способ 1: Задание таблицы Предварительно проверяем в портале, не существует ли глобал ^QQD и класс ^User.QQ.cls в области имён User. Если существуют, удаляем их. Смысл этих действий будет понятен далее. Исполняем в SQL-менеджере портала в области User команду create table QQ (c1 char(3), c2 number(4)) В разделе “Классы” портала обнаруживаем класс ^User.QQ.cls, щелкнув по позиции “Документация” получаем его описание. В Studio для той же области User вызываем (Файл – Открыть ..) описание класса User.QQ.cls : Class User.qq Extends %Persistent [ ClassType = persistent, DdlAllowed, Owner = "", SqlRowIdPrivate, SqlTableName =QQ, StorageStrategy = ] { Property c1 As %Library.String(MAXLEN = 3) [ SqlColumnNumber = 2 ]; Property c2 As %Library.Numeric(MAXVAL = 9999, MINVAL = -9999, SCALE = 0) [ SqlColumnNumber = 3 ]; }”” Проверяем, не появился ли глобал ^QQD в области имён User. Вывод: При создании таблицы появляется соответствующий класс.

Слайд 16





Способ 2. Использование мастера (1/10)
Шаг 1. Проверяем в портале, не существует ли глобал ^HumanD, 
класс ^User.Human.cls и таблица Human в области имён User. 
В Studio вызываем мастера, задаём область имен User, имя класса 
и комментарий
Описание слайда:
Способ 2. Использование мастера (1/10) Шаг 1. Проверяем в портале, не существует ли глобал ^HumanD, класс ^User.Human.cls и таблица Human в области имён User. В Studio вызываем мастера, задаём область имен User, имя класса и комментарий

Слайд 17





Способ 2. Использование мастера (2/10)
Шаг 2. Выбор вида класса
Описание слайда:
Способ 2. Использование мастера (2/10) Шаг 2. Выбор вида класса

Слайд 18





Способ 2. Использование мастера (3/10)
Шаг 3. Выбор владельца, имени таблицы, отличного от имени  
            класса, поддержки XML и автозаполнения данными
Описание слайда:
Способ 2. Использование мастера (3/10) Шаг 3. Выбор владельца, имени таблицы, отличного от имени класса, поддержки XML и автозаполнения данными

Слайд 19





Способ 2. Использование мастера (4/10)
Шаг 4. Смотрим полученный результат в Studio
/// Это класс первого лекционного примера класса созданного мастером
Class User.Human Extends %Persistent [ ClassType = persistent, ProcedureBlock ]
{

}
Заметим, что описание класса передано вручную введённым 
комментарием. 
Поскольку создавался хранимый класс, то ^User.Human 
наследует (Extends) системному классу %Persistent .
Проверьте, появились ли таблица Human? В чём её особенности? А 
глобал ^HumanD?
Описание слайда:
Способ 2. Использование мастера (4/10) Шаг 4. Смотрим полученный результат в Studio /// Это класс первого лекционного примера класса созданного мастером Class User.Human Extends %Persistent [ ClassType = persistent, ProcedureBlock ] { } Заметим, что описание класса передано вручную введённым комментарием. Поскольку создавался хранимый класс, то ^User.Human наследует (Extends) системному классу %Persistent . Проверьте, появились ли таблица Human? В чём её особенности? А глобал ^HumanD?

Слайд 20





Способ 2. Использование мастера (5/10)
Шаг 5. В Studio выбираем «Новое свойство» (Правая кнопка мыши – 
Добавить)
Описание слайда:
Способ 2. Использование мастера (5/10) Шаг 5. В Studio выбираем «Новое свойство» (Правая кнопка мыши – Добавить)

Слайд 21





Способ 2. Использование мастера (6/10)
Шаг 6. Добавляем атрибуты используя появившийся мастер
Описание слайда:
Способ 2. Использование мастера (6/10) Шаг 6. Добавляем атрибуты используя появившийся мастер

Слайд 22





Способ 2. Использование мастера (7/10)
Шаг 7. Выбираем тип данных
Описание слайда:
Способ 2. Использование мастера (7/10) Шаг 7. Выбираем тип данных

Слайд 23





Способ 2. Использование мастера (8/109)
Шаг 8. Задаем свойства и переходим к параметрам типа
Описание слайда:
Способ 2. Использование мастера (8/109) Шаг 8. Задаем свойства и переходим к параметрам типа

Слайд 24





Способ 2. Использование мастера (9/10)
Шаг 9. Оставляем параметры типа по умолчанию
Описание слайда:
Способ 2. Использование мастера (9/10) Шаг 9. Оставляем параметры типа по умолчанию

Слайд 25





Способ 2. Использование мастера (10/10)
Шаг 10. В Studio обнаруживаем текст, определяющий новое свойство: 
{
/// Это имя
Property Name As %String;
}
Просмотрите ещё раз таблицу Human и глобал ^HumanD
      Этот же результат мог быть получен непосредственно вводом 
текста описывающего свойства в Studio. Но это уже способ 3 
создания класса.
      
      Способ 4 реализуется из UML-диаграммы при подключении 
инструмента Rational Rose
Описание слайда:
Способ 2. Использование мастера (10/10) Шаг 10. В Studio обнаруживаем текст, определяющий новое свойство: { /// Это имя Property Name As %String; } Просмотрите ещё раз таблицу Human и глобал ^HumanD Этот же результат мог быть получен непосредственно вводом текста описывающего свойства в Studio. Но это уже способ 3 создания класса. Способ 4 реализуется из UML-диаграммы при подключении инструмента Rational Rose

Слайд 26





Методы унаследованые от класса %Persistent 
      Прежде, чем мы рассмотрим 5-й способ создания класса – из COS – перечислим методы наследуемые от родительского класса 
%Persistent:
%New(). Конструктор объекта. Его задача – создать экземпляр класса. 
%Save(). Сохраняет объект на диске.
%Close(). Закрывает объект, то есть удаляет его из памяти
%Open(). Метод класса. Если он находит объект существующий в базе данных, то создает в памяти его копию, содержащую значения всех свойств, и возвращает объект. Если объект уже загружен в память, просто возвращается OREF. Вообще у метода три аргумента. Второй аргумент Concurrency определяет особенности параллельной работы и принимает значения 0, 1, 2, 3, 4. По умолчанию установлен в “1”, что означает создание разделяемой блокировки при загрузке объекта в память.   
%OpenID().
%Delete().
%IsModified().
Описание слайда:
Методы унаследованые от класса %Persistent Прежде, чем мы рассмотрим 5-й способ создания класса – из COS – перечислим методы наследуемые от родительского класса %Persistent: %New(). Конструктор объекта. Его задача – создать экземпляр класса. %Save(). Сохраняет объект на диске. %Close(). Закрывает объект, то есть удаляет его из памяти %Open(). Метод класса. Если он находит объект существующий в базе данных, то создает в памяти его копию, содержащую значения всех свойств, и возвращает объект. Если объект уже загружен в память, просто возвращается OREF. Вообще у метода три аргумента. Второй аргумент Concurrency определяет особенности параллельной работы и принимает значения 0, 1, 2, 3, 4. По умолчанию установлен в “1”, что означает создание разделяемой блокировки при загрузке объекта в память. %OpenID(). %Delete(). %IsModified().

Слайд 27





Работа с объектами в COS (1/3)
Создадим простейший класс с единственным атрибутом Name. 
Class User.A Extends %Persistent [ ClassType = persistent, ProcedureBlock ]
    {
    Property Name As %String(MAXLEN = 20);
    }
Создадим экземпляр класса с помощью метода %New(): 
    s ss=##class(User.A).%New()
Макроподстановка ##class создает объектную ссылку 
OREF. Что же представляет собой эта ссылка? 
    w ss
    Ответ:
   1@User.A
Итак, OREF состоит из двух частей имени класса “User.A” 
и идентификатора объекта ”1”.
     Вторая ссылка OID читается методом %Oid():
     w ss.%Oid()
     User.A
Описание слайда:
Работа с объектами в COS (1/3) Создадим простейший класс с единственным атрибутом Name. Class User.A Extends %Persistent [ ClassType = persistent, ProcedureBlock ] { Property Name As %String(MAXLEN = 20); } Создадим экземпляр класса с помощью метода %New(): s ss=##class(User.A).%New() Макроподстановка ##class создает объектную ссылку OREF. Что же представляет собой эта ссылка? w ss Ответ: 1@User.A Итак, OREF состоит из двух частей имени класса “User.A” и идентификатора объекта ”1”. Вторая ссылка OID читается методом %Oid(): w ss.%Oid() User.A

Слайд 28





Работа с объектами в COS (2/3) 
     OID представляет собой список, состоящий из OID объекта и имени класса. Читаем его компоненты циклом с командой $list:
f i=1:1:$ll(ss.%Oid()) {w !,$li(ss.%Oid(),i)}
1
User.A
Для того, чтобы завершить создание объекта необходимо назначить значения его атрибутов и сохранить его на диск. Если объект дальше не будет использоваться, необходимо удалить его из памяти. 
s ss.Name=”John”  // параметру Name объекта № 1   
                                   присвоено значение.
d ss.%Save()          // объект № 1 сохранен на диске.
d ss.%Close()         // объект № 1 закрыт, то есть удален 
                                   из памяти.
Вывод: Задание первого объекта класса образует глобал. Проверим проводником образовался ли глобал USER.AD.
Описание слайда:
Работа с объектами в COS (2/3) OID представляет собой список, состоящий из OID объекта и имени класса. Читаем его компоненты циклом с командой $list: f i=1:1:$ll(ss.%Oid()) {w !,$li(ss.%Oid(),i)} 1 User.A Для того, чтобы завершить создание объекта необходимо назначить значения его атрибутов и сохранить его на диск. Если объект дальше не будет использоваться, необходимо удалить его из памяти. s ss.Name=”John” // параметру Name объекта № 1 присвоено значение. d ss.%Save() // объект № 1 сохранен на диске. d ss.%Close() // объект № 1 закрыт, то есть удален из памяти. Вывод: Задание первого объекта класса образует глобал. Проверим проводником образовался ли глобал USER.AD.

Слайд 29





Работа с объектами в COS (3/3)
Описание слайда:
Работа с объектами в COS (3/3)

Слайд 30





Классы, таблицы, объекты, строки и деревья
      Теперь понятны связи между иерархической, табличной и объектными моделями в Caché.
      Оказывается, таблицы эквивалентны классам без методов, столбец таблицы соответствует атрибуту класса, строка таблицы отображается в объект соответствующего класса. 
      Как только создаётся строка таблицы или же объект, так сразу же создаётся глобал в виде дерева глубины 1. Работая с его узлами, можно манипулировать строками в табличном представлении или объектами в объектной модели.
      Понятно, что основой такого симбиоза трёх моделей может быть только объектная модель. В табличной и иерархических моделях нет места для методов и объектных типов данных.
Описание слайда:
Классы, таблицы, объекты, строки и деревья Теперь понятны связи между иерархической, табличной и объектными моделями в Caché. Оказывается, таблицы эквивалентны классам без методов, столбец таблицы соответствует атрибуту класса, строка таблицы отображается в объект соответствующего класса. Как только создаётся строка таблицы или же объект, так сразу же создаётся глобал в виде дерева глубины 1. Работая с его узлами, можно манипулировать строками в табличном представлении или объектами в объектной модели. Понятно, что основой такого симбиоза трёх моделей может быть только объектная модель. В табличной и иерархических моделях нет места для методов и объектных типов данных.

Слайд 31





Таблиц в Caché не бывает
      В Studio создаём класс T, не смущаясь незнанием языка 
CDL (Class Define Language) на котором он написан:  
Class User.T Extends %Persistent [ ClassType = persistent, DdlAllowed, SqlRowIdPrivate, SqlTableName = T ]
{
Property c1 As %Library.Numeric(MAXVAL = 99, MINVAL = -99, SCALE = 0) [ SqlColumnNumber = 2 ];
Property c2 As %Library.String(MAXLEN = 3) [ SqlColumnNumber = 3 ];
}
      Пока его не компилируем. В разделе SQL портала управления системой проверяем, не существует ли таблица SQLUser.T. Если существует, удалим её. 
      Теперь компилируем класс не обращая внимания на строки описания добавленные Студией. Появляется таблица SQLUser.T.
Описание слайда:
Таблиц в Caché не бывает В Studio создаём класс T, не смущаясь незнанием языка CDL (Class Define Language) на котором он написан:   Class User.T Extends %Persistent [ ClassType = persistent, DdlAllowed, SqlRowIdPrivate, SqlTableName = T ] { Property c1 As %Library.Numeric(MAXVAL = 99, MINVAL = -99, SCALE = 0) [ SqlColumnNumber = 2 ]; Property c2 As %Library.String(MAXLEN = 3) [ SqlColumnNumber = 3 ]; } Пока его не компилируем. В разделе SQL портала управления системой проверяем, не существует ли таблица SQLUser.T. Если существует, удалим её. Теперь компилируем класс не обращая внимания на строки описания добавленные Студией. Появляется таблица SQLUser.T.

Слайд 32





Виртуальная таблица SQLUser.T
Портал сообщает 
об этой таблице 
следующее:
Обратите внимание на два “непрошенных” столбца ID и  x_classname.
Описание слайда:
Виртуальная таблица SQLUser.T Портал сообщает об этой таблице следующее: Обратите внимание на два “непрошенных” столбца ID и x_classname.

Слайд 33





Сравниваем таблицу SQLUser.T и породивший её класс User.T
      Понятно, что в первой строке записано имя класса User.T, а свойства c1 и c2 соответствуют именам столбцов c1 и c2. Понятно, что ширина столбца c2 равна 3.  SqlColumnNumber = 2 и 3. Столбец ID играет роль суррогатного ключа, соответствует OID, а столбец  x_classname имеет объектный тип %Library.CacheString.
      Убедитесь, что созданная таблица пустая. 
      Проверим на всякий случай, не существует ли глобала с именем T, после которого приписана буква D. Если глобал ^User.TD существует, удалите его. Теперь в SQL-менеджере введём в таблицу T одну строку: 
insert into T values (22, “QQ”)
      С помощью команды select * from T убеждаемся, что строчка действительно записана. 
Переходим в проводник и в папке “Глобалы” обнаруживаем глобал ^User.TD. Если он не появился, нажмите на кнопку F5.
Описание слайда:
Сравниваем таблицу SQLUser.T и породивший её класс User.T Понятно, что в первой строке записано имя класса User.T, а свойства c1 и c2 соответствуют именам столбцов c1 и c2. Понятно, что ширина столбца c2 равна 3. SqlColumnNumber = 2 и 3. Столбец ID играет роль суррогатного ключа, соответствует OID, а столбец x_classname имеет объектный тип %Library.CacheString. Убедитесь, что созданная таблица пустая. Проверим на всякий случай, не существует ли глобала с именем T, после которого приписана буква D. Если глобал ^User.TD существует, удалите его. Теперь в SQL-менеджере введём в таблицу T одну строку: insert into T values (22, “QQ”) С помощью команды select * from T убеждаемся, что строчка действительно записана. Переходим в проводник и в папке “Глобалы” обнаруживаем глобал ^User.TD. Если он не появился, нажмите на кнопку F5.

Слайд 34





Созданный глобал ^User.TD
Интересно, как выглядит вновь созданный глобал. Щёлкаем 
левой кнопкой мыши 
по позиции “Просмотр” 
в строчке ^User.TD 
и обнаруживаем структуру: 
Если добавить ещё одну строку, например 1, “A”, выполнив команду
insert into T values (1, "A")
то дерево изменится так:
^User.TD=2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
^User.TD(1)=<<$LB("","22","QQ")>>
^User.TD(2)=<<$LB("","1","A")>>
Теперь можно работать непосредственно с глобалом.
Описание слайда:
Созданный глобал ^User.TD Интересно, как выглядит вновь созданный глобал. Щёлкаем левой кнопкой мыши по позиции “Просмотр” в строчке ^User.TD и обнаруживаем структуру: Если добавить ещё одну строку, например 1, “A”, выполнив команду insert into T values (1, "A") то дерево изменится так: ^User.TD=2 ^User.TD(1)=<<$LB("","22","QQ")>> ^User.TD(2)=<<$LB("","1","A")>> Теперь можно работать непосредственно с глобалом.

Слайд 35





Представление таблицы деревом
Описание слайда:
Представление таблицы деревом

Слайд 36





Наследование (1/2)
     Классы могут быть наследниками других классов. Для примера
создадим класс человек (human) следующей структуры
Class User.Human Extends %Persistent 
{
Property Pass As %String(MAXLEN = 11);
Property Name As %String(MAXLEN = 20);
}
В нём name – имя, pass – номер и серия паспорта.
     Класс-наследник student расширяет базовый класс свойством NNZach -  номер зачетной книжки:
Class TestLib.Student Extends TestLib.Human 
{
Property NZach As %String(MAXLEN = 10);
}
      При этом создаются две таблицы Human и Student причем поля Name и Pass в таблице Student будут виртуальными. То есть при создании новой записи в таблице Student значения этих полей сохраняются в таблице Human и информация о них извлекается по внутренней ссылке.
Описание слайда:
Наследование (1/2) Классы могут быть наследниками других классов. Для примера создадим класс человек (human) следующей структуры Class User.Human Extends %Persistent { Property Pass As %String(MAXLEN = 11); Property Name As %String(MAXLEN = 20); } В нём name – имя, pass – номер и серия паспорта. Класс-наследник student расширяет базовый класс свойством NNZach - номер зачетной книжки: Class TestLib.Student Extends TestLib.Human { Property NZach As %String(MAXLEN = 10); } При этом создаются две таблицы Human и Student причем поля Name и Pass в таблице Student будут виртуальными. То есть при создании новой записи в таблице Student значения этих полей сохраняются в таблице Human и информация о них извлекается по внутренней ссылке.

Слайд 37





Наследование (2/2)
      В классе Human создадим объект Пётр (”0305 855637”, “Петр”), а в классе Student – объект Иван( “0305 163788”, “Иван”, “8765”). USER>s stud=##Class(User.Student).%New()
USER>s stud.Name= "Иван“
USER>s stud.NZach=" 8765 “
USER>s stud.Pass=" 0305 855637 “ /не забудьте сохранить и закрыть Данные обоих классов помещаются в один глобал  ^User.HumanD:
    
     
Запросами SELECT * … проcмотрим  содержимое этих таблиц
Один вывод очевиден --“Студент это человек”, а как с наследованием в SQL-представлении данных?
Описание слайда:
Наследование (2/2) В классе Human создадим объект Пётр (”0305 855637”, “Петр”), а в классе Student – объект Иван( “0305 163788”, “Иван”, “8765”). USER>s stud=##Class(User.Student).%New() USER>s stud.Name= "Иван“ USER>s stud.NZach=" 8765 “ USER>s stud.Pass=" 0305 855637 “ /не забудьте сохранить и закрыть Данные обоих классов помещаются в один глобал ^User.HumanD: Запросами SELECT * … проcмотрим содержимое этих таблиц Один вывод очевиден --“Студент это человек”, а как с наследованием в SQL-представлении данных?

Слайд 38





Сериализуемые классы (1/2)
      Создадим встроенный класс Addres:
Class User.Address Extends %SerialObject
{  
Property City As %String;
Property State As %String;
}
      Используем его в классе Person:
Class User.Person Extends %Persistent
{
Property Name As %String;
Property YearOB As %Integer;
Property Home As Address;
}
      Создаём объект класса Person:
S p=##class(User.Person).%New()
S p.Name="Nick", p.YearOB=1984, p.Home.City="NewYork"
S p.Home.State="NY"
D p.%Save()
Описание слайда:
Сериализуемые классы (1/2) Создадим встроенный класс Addres: Class User.Address Extends %SerialObject { Property City As %String; Property State As %String; } Используем его в классе Person: Class User.Person Extends %Persistent { Property Name As %String; Property YearOB As %Integer; Property Home As Address; } Создаём объект класса Person: S p=##class(User.Person).%New() S p.Name="Nick", p.YearOB=1984, p.Home.City="NewYork" S p.Home.State="NY" D p.%Save()

Слайд 39





Сериализуемые классы (2/2)
      Образовался глобал:
^User.PersonD=1
^User.PersonD(1)=$LB("","Nick","1984",$LB("NewYork","NY"))
      Объект сериализуемого класса в нём представляется списком:
$LB("NewYork","NY").      
        В SQL-проекции эти столбцы действительно существуют. К ним можно обратиться по имени, например:
SELECT Name, Home_City FROM Person
Описание слайда:
Сериализуемые классы (2/2) Образовался глобал: ^User.PersonD=1 ^User.PersonD(1)=$LB("","Nick","1984",$LB("NewYork","NY")) Объект сериализуемого класса в нём представляется списком: $LB("NewYork","NY"). В SQL-проекции эти столбцы действительно существуют. К ним можно обратиться по имени, например: SELECT Name, Home_City FROM Person

Слайд 40





Отношения
      Пусть имеются два класса – Юрист и Клиент:
Class User.Lawyer Extends %Persistent
{
Property LawyerName As %String [Required];
} 
Class User.Client Extends %Persistent
{
Property ClientName As %String [ Required ];
}
В каждый из них  добавим атрибут-отношение, определяющий связь один-ко-многим.
Получаем:
Описание слайда:
Отношения Пусть имеются два класса – Юрист и Клиент: Class User.Lawyer Extends %Persistent { Property LawyerName As %String [Required]; } Class User.Client Extends %Persistent { Property ClientName As %String [ Required ]; } В каждый из них добавим атрибут-отношение, определяющий связь один-ко-многим. Получаем:

Слайд 41





Отношения
Class User.Lawyer Extends %Persistent
{
Property LawyerName As %String [ Required ];
Relationship MyClients As User.Client [ Cardinality=many, Inverse=MyLawyer ];
}
и
Class User.Client Extends %Persistent
{
Property ClientName As %String [ Required ];
Relationship MyLawyer As User.Lawyer [ Cardinality = one, Inverse = MyClients ];
}
Компилируем  их совместно. 
Теперь остаётся создать:
экземпляры (объекты) обоих классов, задавая только свойства (Property)
экземпляры связей между объектами юристов и клиентов.
     Для решения второй задачи необходимо сначала создать ссылку на какой-нибудь объект Lawyer (например,LawyerOref) затем ссылку на объект Client, (например, ClientOref1) который будет с ним связан и, наконец, присвоить атрибуту-ссылке клиента значение атрибута-ссылки юриста, например,
Set ClientOref1.MyLawyer=LawyerOref  ;ссылки ClientOref1 и LawyerOref созданы методом %New().
Описание слайда:
Отношения Class User.Lawyer Extends %Persistent { Property LawyerName As %String [ Required ]; Relationship MyClients As User.Client [ Cardinality=many, Inverse=MyLawyer ]; } и Class User.Client Extends %Persistent { Property ClientName As %String [ Required ]; Relationship MyLawyer As User.Lawyer [ Cardinality = one, Inverse = MyClients ]; } Компилируем их совместно. Теперь остаётся создать: экземпляры (объекты) обоих классов, задавая только свойства (Property) экземпляры связей между объектами юристов и клиентов. Для решения второй задачи необходимо сначала создать ссылку на какой-нибудь объект Lawyer (например,LawyerOref) затем ссылку на объект Client, (например, ClientOref1) который будет с ним связан и, наконец, присвоить атрибуту-ссылке клиента значение атрибута-ссылки юриста, например, Set ClientOref1.MyLawyer=LawyerOref ;ссылки ClientOref1 и LawyerOref созданы методом %New().

Слайд 42





Метаданные в Caché (1/3)
    Метаданные в Caché хранятся в метаклассах двух видов: 
Defined --представляют определения классов; включают только информацию, о членах класса описанных в нём, но не содержат  унаследованных членов классов.
Compiled -- представляют скомпилированные классы; содержат  информацию об унаследованных членов классов.
Описание слайда:
Метаданные в Caché (1/3) Метаданные в Caché хранятся в метаклассах двух видов: Defined --представляют определения классов; включают только информацию, о членах класса описанных в нём, но не содержат унаследованных членов классов. Compiled -- представляют скомпилированные классы; содержат информацию об унаследованных членов классов.

Слайд 43





Метаданные в Caché (2/3)
     Рассмотрим структуру двух классов из перечисленных в таблице на предыдущем слайде.
 
     Полное имя класса ClassDefinition это %Dictionary.ClassDefinition. Его поля:
Name – имя класса.
Properties – атрибут (объект метакласса PropertyDefinition).
ClassType – тип класса (persistent или serial).
Super – содержит имена базовых классов.
Description – поле описания класса.
Abstract – определяет абстрактность класса.
Final – возможность наследования от класса.
Indices – связи, предназначенные для описания индексов класса.
Methods – связи, предназначенная для описания методов класса.
Parameters – связь, предназначенная для описания параметров
класса.
Описание слайда:
Метаданные в Caché (2/3) Рассмотрим структуру двух классов из перечисленных в таблице на предыдущем слайде. Полное имя класса ClassDefinition это %Dictionary.ClassDefinition. Его поля: Name – имя класса. Properties – атрибут (объект метакласса PropertyDefinition). ClassType – тип класса (persistent или serial). Super – содержит имена базовых классов. Description – поле описания класса. Abstract – определяет абстрактность класса. Final – возможность наследования от класса. Indices – связи, предназначенные для описания индексов класса. Methods – связи, предназначенная для описания методов класса. Parameters – связь, предназначенная для описания параметров класса.

Слайд 44





Метаданные в Caché (3/3)
Класс PropertyDefinition, хранящий сведения об атрибутах. Минимальный набор из двух полей, обеспечивающий добавление атрибута в класс:
Name – поле имени атрибута.
Type – поле типа атрибута.
Другие поля:
MultiDimensional – указывает, что атрибут это многомерный массив.
CollectionAs – указывает, что атрибут это «коллекция».
Description – поле комментария к атрибуту.
Calculated – объявление атрибута вычислимым.
InitialExpression – задание начального значения атрибута.
NotInheritable – указывает, что атрибут не наследован.
ParametersAs – поле массива параметров атрибута.
Private – указания на закрытость атрибута.
Relationship – указания на то, что атрибут является связью.
Required – поле указания на обязательность атрибута.
Transient – указание на то, что атрибут не хранится в базе.
Parent – поле родительской связи.
Описание слайда:
Метаданные в Caché (3/3) Класс PropertyDefinition, хранящий сведения об атрибутах. Минимальный набор из двух полей, обеспечивающий добавление атрибута в класс: Name – поле имени атрибута. Type – поле типа атрибута. Другие поля: MultiDimensional – указывает, что атрибут это многомерный массив. CollectionAs – указывает, что атрибут это «коллекция». Description – поле комментария к атрибуту. Calculated – объявление атрибута вычислимым. InitialExpression – задание начального значения атрибута. NotInheritable – указывает, что атрибут не наследован. ParametersAs – поле массива параметров атрибута. Private – указания на закрытость атрибута. Relationship – указания на то, что атрибут является связью. Required – поле указания на обязательность атрибута. Transient – указание на то, что атрибут не хранится в базе. Parent – поле родительской связи.

Слайд 45





Заключение
      Итак, изучены основы объектной модели ODMG. Конечно, следовало бы посмотреть на предоставляемые возможности изменения структур хранения данных, изучить возможности индексации, включая bit-slice индексы, вникнуть в интереснейший класс %ResultSet. К сожалению время, выделенное нам на изучение баз данных слишком ограничено.
      Несколько расширить свои знания Caché можно проработав первую часть главы 10 книги. Многое может дать участие в конкурсах IT-планета по Caché и DeepSee (это такая интересная реализация многомерной модели данных, используемая в бизнес-аналитике).
Описание слайда:
Заключение Итак, изучены основы объектной модели ODMG. Конечно, следовало бы посмотреть на предоставляемые возможности изменения структур хранения данных, изучить возможности индексации, включая bit-slice индексы, вникнуть в интереснейший класс %ResultSet. К сожалению время, выделенное нам на изучение баз данных слишком ограничено. Несколько расширить свои знания Caché можно проработав первую часть главы 10 книги. Многое может дать участие в конкурсах IT-планета по Caché и DeepSee (это такая интересная реализация многомерной модели данных, используемая в бизнес-аналитике).



Похожие презентации
Mypresentation.ru
Загрузить презентацию