Разработка объектно-ориентированного языка взаимодействия с базами данных.
Содержание.
Цель работы.
*1. Операции определения структуры объектов.
*1.1 Выбор поколения.
*1.2 Выбор соседа.
*1.3 Определение внутренней структуры объекта.
*2. Объединение объектов.
*2.1 Объединение однородных (из одного класса) простых объектов.
*2.2 Объединение разнородных (из разных классов) простых объектов.
*2.3 Объединение составных объектов.
*3. Пересечение объектов.
*3.1 Пересечение однородных простых объектов.
*3.2 Пересечение разнородных простых объектов.
*3.3 Пересечение разнородных составных объектов.
*4. Свойства операций объединения и пересечения объектов.
*4.1 Алгебраические свойства.
*4.2 Реляционные свойства языка OSQL.
*4.3 Связь между языком SQL и OSQL.
*4.3.1 Пример связи 2-х таблиц.
*4.3.2 Пример связи 3-х таблиц.
*Заменить таблично-ориентированный язык обращения к базам данных SQL на объектно-ориентированный язык O(bject)SQL.
Требования к новому языку:
Данные в объектном программировании можно представить в виде дерева рис.В.1:
Рис.В.1 Граф молочных продуктов.
Свойства объекта:
Задача: сформулировать правила, операции над объектами, которые порождают другие объекты.
1. Операции определения структуры объектов.
Структура графа объектов и самих объектов может быть неизвестна. Для ее определения нужно ввести операции перемещения по разным уровням иерархии дерева (вверх-вниз) и перемещения по объектам в пределах одного уровня иерархии (по горизонтали). Для определения внутренней структуры объекта вводится дополнительный метод.
Эта операция предназначена для перемещения по разным уровням иерархии дерева объектов. Метод взятия уровня иерархии (поколения): поколение (относительный номер)
Для какого-то экземпляра объекта 3 творог определим операции:
ob(3).поколение(0) = È ob(творог) (все экземпляры объекта творог)
ob(3).поколение(- 1) = È ob(молочные продукты) (все экземпляры родительского объекта, если они существуют, иначе Æ )
ob(3).поколение(+1) = È ob(пачка йогурта) + È ob(пачка творога) (объединение всех экземпляров объектов дети)
ob(3).поколение(- 2) = Æ (выше корня дерева никого нет)
ob(3).поколение(+2) = Æ (ниже нижнего уровня никого нет)
Операция выбора ближайшего объекта внутри одного уровня иерархии.
Для какого-то экземпляра объекта 3 творог определим операции:
ob(3).сосед(0) = È ob(творог) (все экземпляры объекта творог)
ob(3). сосед (+1) = È ob(кефир) (все экземпляры объекта кефир, если они есть)
ob(3). сосед (+2) =Æ (других объектов на 2-ом уровне нет)
ob(3). сосед (- 1) =Æ (других объектов нет)
1.3 Определение внутренней структуры объекта.
У объекта есть свойства – переменные, которые имеют определенный тип и значение.
Для какого-то одного или группы È экземпляров объекта 3 творог определим операции:
È ob(3). структура =
Операция объединения объектов соответствует созданию таблицы добавлением в нее строк.
2.1 Объединение однородных (из одного класса) простых объектов.
При объединении 2-х простых объектов из одного класса получается составной (одномерный массив) объект, который включает в себя все переменные простых объектов. Операция объединения 2-х объектов обозначается знаком “+”.
Пример 2.1.
Объединить три экземпляра объектов пачка творога с одинаковой жирностью, содерж.сахара, но разным весом:
ob(творог).вес 100 + ob(творог).вес 200 + ob(творог).вес 100 = составной объект из двух экземпляров:
Табл.2.1 Составной объект пачка творога.
1 |
Жирность=х1, содерж.сахара=y1, вес творога=100 |
2 |
Жирность=х1, содерж.сахара=y1, вес творога=200 |
Порядок элементов массива не рассматриваем для обеспечения коммутативности операции объединения.
Объединение всех экземпляров объекта обозначается символом È . Подмножество элементов составного объекта объединение с определенным значением переменной обозначим так:
È ob.переменная=значение
2.2 Объединение разнородных (из разных классов) простых объектов.
При объединении 2-х простых объектов из разных классов получается простой объект с общим набором переменных.
Пример 2.2.
Объединить по одному экземпляру объектов пачка йогурта и пачка творога.
ob(йогурт) + ob(творог) = простой объект
объект с переменными:
Жирность_ йогурта, содерж.сахара_ йогурта, вес_йогурта, жирность_ творога, содерж.сахара_ творога, вес_творога
2.3 Объединение составных объектов.
При объединении составных объектов получается составной объект (одномерный массив), в котором каждому элементу одного объекта соответствуют все элементы другого (декартово произведение).
Пример 2.3.
Объединить все объекты (всего 2 штуки) пачка йогурта и все объекты (всего 2 штуки) пачка творога:
È ob(пачка_йогурта) + È ob(пачка_ творога) = составной объект
Если значения всех переменных составных объектов отличаются, то получится объект с 4 элементами Табл.2.2:
Табл.2.2 Результат объединения.
1 |
Жирность_ йогурта1, содерж.сахара_ йогурта1, вес_йогурта1, жирность_ творога1, содерж.сахара_ творога1, вес_творога1 |
2 |
Жирность_ йогурта1, содерж.сахара_ йогурта1, вес_йогурта1, жирность_ творога2, содерж.сахара_ творога2, вес_творога2 |
3 |
Жирность_ йогурта2, содерж.сахара_ йогурта2, вес_йогурта2, жирность_ творога1, содерж.сахара_ творога1, вес_творога1 |
4 |
Жирность_ йогурта2, содерж.сахара_ йогурта2, вес_йогурта2, жирность_ творога2, содерж.сахара_ творога2, вес_творога2 |
В случае, когда один объект является родительским по отношению к другому, например, объект творог по отношению к объекту пачка творога, то возможно уменьшение количества элементов составного объекта из-за совпадения значений переменных.
Операция пересечения объектов соответствует выбору из таблицы совпадающих строк.
3.1 Пересечение однородных простых объектов.
При пересечении 2-х объектов из одного класса получается тот же объект, если экземпляры класса имеют одинаковые значения всех переменных. Операция пересечения 2-х объектов обозначается знаком “´ ”.
Пример 3.1
Пересечение 2-х объектов пачка творога с одинаковыми переменными:
ob(пачка_творога) ´ ob(пачка_творога) = ob(пачка_творога)
Если экземпляры класса имеют различные переменные, то пересечение равно Æ (пустое множество).
ob(пачка_творога).вес 100г., жирность10% ´ ob(пачка_творога).вес 200 г., жирность10% = Æ
Пересечение всех экземпляров объекта обозначается символом Ç .
3.2 Пересечение разнородных простых объектов.
Пересечение разнородных простых объектов дает простой объект, который включает одинаковые переменные, имеющиеся в каждом объекте (родительский объект):
Пример 3.2.
ob(пачка_йогурта).жирность10% ´ ob(пачка_творога).жирность10% = ob(Творог) . жирность10%
Общий родитель для пачки йогурта и пачки творога – это объект творог. Если нет общих родителей или родительские объекты разные, то пересечение = Æ .
3.3 Пересечение разнородных составных объектов.
Пересечение разнородных составных объектов дает составной объект, который включает переменные, имеющиеся в каждом объекте (родительский объект):
Пример 3.3.
Вычислить пересечение 2-х составных объектов: 2 пачки йогурта и 2 пачки творога табл.3.1:
Табл.3.1 Два составных объекта.
Номер элемента |
Объект 1 |
Объект 2 |
1 |
жир10%,сах10%,вес_й100г |
жир20%,сах10%,вес_тв200г |
2 |
жир20%,сах10%,вес_й100г |
жир10%,сах10%,вес_тв100г |
[È ob(пачка_йогурта)] Ç [ È ob(пачка_ творога) ] = составной объект
Результат пересечения показан в табл.3.2:
Табл.3.2 Результат пересечения.
1 |
жир10%,сах10% |
2 |
жир20%,сах10% |
4. Свойства операций объединения и пересечения объектов.
Введенные операции объединения и пересечения объектов обладают свойствами (1.1-1.3).
4.2 Реляционные свойства языка OSQL.
Реляционность или целостность данных, поддерживается в SQL таблицах с помощью ключей и индексов. В OSQL целостность данных обеспечивается наследованием. Вы не можете создать экземпляр объекта производного класса, пока не создадите экземпляры родительских классов.
4.3 Связь между языком SQL и OSQL.
Простые таблицы в SQL базах данных соответствуют объединению экземпляров одного класса. Сложные объединения таблиц соответствуют комбинации объединений, пересечений, выбора поколений экземпляров объектов из одинаковых и разных классов.
4.3.1 Пример связи 2-х таблиц.
Свяжем 2 таблицы с помощью языка SQL. В табл.4.1 содержится информация об авторах книг.
Табл.4.1 Авторы.
ID_автор |
Фамилия |
Тел. |
1 |
Иванов |
111-11-11 |
2 |
Петров |
222-22-22 |
3 |
Босс |
333-33-33 |
В табл.4.2 содержится информация о книгах.
Табл.4.2 Книги.
ID_книга |
Название |
Автор |
Издательство |
1 |
Война и страсть |
Иванов |
Толстой и К° . |
2 |
Не люблю ораклоидов! |
Иванов |
ТНТ комедия. |
3 |
Как стать начальником. |
Босс |
Несбыточные мечты. |
Оператор SQL выбирающий из 2-х таблиц все книги Иванова:
SELECT
авторы. Фамилия, книги.Название FROM авторы, книгиWHERE
авторы. Фамилия = книги.Автор AND авторы. Фамилия =’Иванов’В результате получим табл.4.3:
Табл.4.3 Результат выборки.
Фамилия |
Название |
Иванов |
Война и страсть |
Иванов |
Не люблю ораклоидов! |
Сделаем тоже на OSQL. Выберем все книги Иванова с помощью языка OSQL. Табл.4.1 соответствует 3-ем экземплярам класса Авторы. Табл.4.2 соответствует 3 экземплярам класса Книги. Класс Авторы является родительским по отношению к классу Книги, т.к. один автор может написать несколько книг, см.рис.4.1:
Рис.4.1 Граф объектов Авторы, Книги.
1-ый способ. Оператор OSQL выбирающий все книги Иванова с помощью поиска экземпляра объекта Иванов и операции выбора поколения (п.1):
Авторы(Иванов, поколение=+1)
2-ой способ. Оператор OSQL выбирающий все книги Иванова с помощью операции пересечения È и объединения Ç объектов (п.2,3):
(Авторы(Иванов) Ç (È Книги)
Запись в терминах теории множеств (объединение и пересечение) интуитивно понятна: взять все È книги и поискать Ç нужного автора.
4.3.2 Пример связи 3-х таблиц.
Свяжем 3 таблицы с помощью языка SQL. В табл.4.1 содержится информация об авторах книг.
Табл.4.4 Авторы.
ID_автор |
Фамилия |
Тел. |
1 |
Иванов |
111-11-11 |
2 |
Петров |
222-22-22 |
3 |
Босс |
333-33-33 |
В табл.4.2 содержится информация о книгах, связанная с таблицей Авторы по ключу ID_автор и таблицей Издательства по ключу ID_издательство.
Табл.4.5 Книги.
ID_книга |
Название |
ID_автор |
ID_издательство |
1 |
Война и страсть |
1 |
1 |
2 |
Не люблю ораклоидов! |
1 |
2 |
3 |
Как стать начальником. |
3 |
3 |
Табл.4.6 Издательства.
ID_издательство |
Название |
Адрес |
1 |
Толстой и К° . |
Петровка, 38 |
2 |
ТНТ комедия. |
Земляной ров, 11 |
3 |
Несбыточные мечты. |
Небесный бульвар, 22 |
Рис.4.2 Таблицы в виде 3-х объектов.
А) Оператор SQL выбирающий из таблиц все книги Иванова:
SELECT
авторы. Фамилия, книги.Название FROM авторы, книгиWHERE
авторы. ID_автор = книги. ID_автор AND авторы. Фамилия =’Иванов’В результате получим табл.4.7:
Табл.4.7 Результат выборки.
Фамилия |
Название |
Иванов |
Война и страсть |
Иванов |
Не люблю ораклоидов! |
Оператор OSQL выбирающий все книги Иванова с помощью операции пересечения È и объединения Ç объектов по переменной, указанной в скобках :
[(È Авторы) Ç (È Книги)]. Авторы.Фамилия = “Иванов”
Объяснение:
Б) Оператор SQL выбирающий книги Иванова, напечатанные в издательстве Толстой и К° :
SELECT
авторы. Фамилия, книги.Название FROM авторы, книги, издательстваWHERE
(авторы. ID_автор = книги. ID_автор) AND (книги. ID_издательство= издательства. ID_издательство) AND авторы. Фамилия =’Иванов’ AND издательства. Название=’ Толстой и К° ’В результате получим табл.4.8:
Табл.4.8 Результат выборки.
Фамилия |
Название |
Иванов |
Война и страсть |
Оператор OSQL выбирающий книги Иванова, напечатанные в издательстве Толстой и К° :
[(È Издательства) Ç ([(È Авторы) Ç (È Книги)]. Авторы.Фамилия = “Иванов”]). издательства. Название=”Толстой и К”
Объяснение: