Полный экран В начало сайта

Разработка объектно-ориентированного языка взаимодействия с базами данных.

Содержание.

Цель работы. *

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. Поддержка объектной ориентированности.
  2. Полнота функций. Возможности нового языка должны включать возможности старого.
  3. Конструкции языка должны удовлетворять свойствам:

  1. Обеспечение большей простоты и наглядности формирования структур данных по сравнению с SQL.

Данные в объектном программировании можно представить в виде дерева рис.В.1:

Молочные продукты

Рис.В.1 Граф молочных продуктов.

Свойства объекта:

    1. Поколение. Желтый = 0, зеленый = 1 и т.д.
    2. Переменные. Каждый объект наследует переменные предка и добавляет свои собственные.

Задача: сформулировать правила, операции над объектами, которые порождают другие объекты.

1. Операции определения структуры объектов.

Структура графа объектов и самих объектов может быть неизвестна. Для ее определения нужно ввести операции перемещения по разным уровням иерархии дерева (вверх-вниз) и перемещения по объектам в пределах одного уровня иерархии (по горизонтали). Для определения внутренней структуры объекта вводится дополнительный метод.

1.1 Выбор поколения.

Эта операция предназначена для перемещения по разным уровням иерархии дерева объектов. Метод взятия уровня иерархии (поколения): поколение (относительный номер)

Для какого-то экземпляра объекта 3 творог определим операции:

ob(3).поколение(0) = È ob(творог) (все экземпляры объекта творог)

ob(3).поколение(- 1) = È ob(молочные продукты) (все экземпляры родительского объекта, если они существуют, иначе Æ )

ob(3).поколение(+1) = È ob(пачка йогурта) + È ob(пачка творога) (объединение всех экземпляров объектов дети)

ob(3).поколение(- 2) = Æ (выше корня дерева никого нет)

ob(3).поколение(+2) = Æ (ниже нижнего уровня никого нет)

1.2 Выбор соседа.

Операция выбора ближайшего объекта внутри одного уровня иерархии.

Для какого-то экземпляра объекта 3 творог определим операции:

ob(3).сосед(0) = È ob(творог) (все экземпляры объекта творог)

ob(3). сосед (+1) = È ob(кефир) (все экземпляры объекта кефир, если они есть)

ob(3). сосед (+2) =Æ (других объектов на 2-ом уровне нет)

ob(3). сосед (- 1) =Æ (других объектов нет)

1.3 Определение внутренней структуры объекта.

У объекта есть свойства – переменные, которые имеют определенный тип и значение.

Для какого-то одного или группы È экземпляров объекта 3 творог определим операции:

È ob(3). структура =

  1. переменная жирность, тип double, значение = 10,2
  2. переменная содерж.сахара, тип integer, значение = 20

2. Объединение объектов.

Операция объединения объектов соответствует созданию таблицы добавлением в нее строк.

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. Пересечение объектов.

Операция пересечения объектов соответствует выбору из таблицы совпадающих строк.

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. Свойства операций объединения и пересечения объектов.

4.1 Алгебраические свойства.

Введенные операции объединения и пересечения объектов обладают свойствами (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 выбирающий все книги Иванова с помощью операции пересечения È и объединения Ç объектов по переменной, указанной в скобках :

[(È Авторы) Ç (È Книги)]. Авторы.Фамилия = “Иванов”

Объяснение:

  1. Взять все книги: È Книги
  2. Взять всех авторов: È Авторы
  3. Пересечься между ними: (È Авторы) Ç (È Книги)
  4. Выбрать из массива составного объекта элементы, соответствующие Фамилии Иванов: [сост.объект]. Авторы.Фамилия = “Иванов”

Б) Оператор SQL выбирающий книги Иванова, напечатанные в издательстве Толстой и К° :

SELECT авторы. Фамилия, книги.Название FROM авторы, книги, издательства

WHERE (авторы. ID_автор = книги. ID_автор) AND (книги. ID_издательство= издательства. ID_издательство) AND авторы. Фамилия =’Иванов’ AND издательства. Название=’ Толстой и К°

В результате получим табл.4.8:

Табл.4.8 Результат выборки.

Фамилия

Название

Иванов

Война и страсть

Оператор OSQL выбирающий книги Иванова, напечатанные в издательстве Толстой и К° :

[(È Издательства) Ç ([(È Авторы) Ç (È Книги)]. Авторы.Фамилия = “Иванов”]). издательства. Название=”Толстой и К”

Объяснение:

  1. Взять все книги: È Книги
  2. Взять всех авторов: È Авторы
  3. Пересечься между ними: (È Авторы) Ç (È Книги)
  4. Выбрать из массива составного объекта элементы, соответствующие Фамилии Иванов: сост.объект1= [сост.объект]. Авторы.Фамилия = “Иванов”
  5. Взять все издательства: È Издательства
  6. Пересечься с составным объектом1: сост.объект2=(È Издательства) Ç сост.объект1
  7. Выбрать из массива составного объекта2 элементы, соответствующие издательству Толстой и К° : [сост.объект2]. издательства. Название=”Толстой и К”

Предыдущая статья

Hosted by uCoz