Google Группы больше не поддерживают новые публикации и подписки в сети Usenet. Опубликованный ранее контент останется доступен.

Teach OOP

4 просмотра
Перейти к первому непрочитанному сообщению

Alex Usov

не прочитано,
28 сент. 1997 г., 03:00:0028.09.1997

Hello All.

Сообщения в системе хранения информации

Возможно Вам доводилось писать запросы к базам данных на SQL (structured query
language) или QBE (query by example), и тогда Вы представляете, насколько
сложными они (запросы) бывают. Поэтому, возможно, особенно трудно поверить, что
можно построить более простой и более мощный язык запросов, который легко
преобразуется в банальные обращения к объектам-атрибутам. Hо, пожалуй, даже не
это самое интересное, а то, что данному языку не требуется какой-либо
оптимизатор. (Загляните в любую эху обсуждающую БД и Вы убедитесь, как много
обсуждений посвящается оптимизации запросов).

В предыдущих письмах, где обсуждались вопросы проектирования системы хранения
информации на основе ОО технологии, было показано, что каждый объект-атрибут
должен уметь выполнять базовый набор действий над элементами своего пула. Теперь
нам требуется представить этот набор действий в виде иерархического дерева.
Эта задача достаточно проста, по своей сути. Действительно существует два
базовых вида запроса: запросы модифицирующие данные (запросы на запись) и
запросы не модифицирующие данные (запросы на чтение). Каждый из этих запросов
можно разложить на более детальные операции так, как, например, показано ниже:

Query

├────── Write
│ │
│ ├────── Update
│ │ │
│ │ ├────── Change
│ │ └────── Replace
│ │
│ └────── Modify
│ │
│ ├────── Insert
│ └────── Delete

└────── Read

├────── Agregative
│ │
│ ├────── Statistic
│ │ │
│ │ ├────── Average
│ │ └────── Sum (Dif)
│ │
│ └────── Min/Max
│ │
│ ├────── Min
│ └────── Max

└────── Ordinary

├────── Select
└────── Compare

Замечание 1
Как и всякая объектная иерархия, данная иерархия тоже существует в некотором
незавершённом виде и всегда может быть расширена, либо модифицирована. Базовая
иерархия запросов определяет собственно идеологию развития дерева запросов.

Замечание 2
Каждый узел иерархии запросов атомарен и может вложен в более сложный запрос,
которым оперирует пользователь.

Замечание 3
Поскольку любая система хранения информации должна включать ограничения на
доступ к информации, то всегда желательно как можно раньше узнать, что
собирается делать данный запрос по отношению к информации в базе данных. Данная
иерархия позволяет элементарно кодировать запросы (именно поэтому она и
приведена в виде бинарного дерева), дабы можно было легко установить тип запроса
и сравнить его с правами конкретного пользователя по отношению к тем объектам,
которые указаны в запросе. (Простое наложение масок: маска запроса, на маску
прав пользователя по отношению к объекту)

Замечание 4
Любому атомарному запросу можно присвоить одну или более синтаксических
конструкций, которые позволят достаточно просто образовать сколь угодно сложный
декларативный пользовательский язык.

Замечание 6
Каждый запрос может обращаться к нескольким различным объектам-атрибутам,
которые находятся на одном уровне вложений, но в различных иерархиях вложений.
Это тяжёлое определение, поэтому объясню его суть на примере. Пусть мы имеем две
базы данных, в одной из них собрана информация о сотрудниках, а во второй от
оборудовании, например, компьютерах. Мы вправе создать запрос типа ВЫБРАТЬ
СОТРУДHИКОВ, ДАТА HАЧАЛА РАБОТ КОТОРЫХ БОЛЬШЕ, ЧЕМ ДАТА ПОКУПКИ ПАРТИИ
КОМПЬЮТЕРОВ С HОМЕРОМ ПАРТИИ РАВHЫМ 456". Hо мы не в праве в одном запросе
манипулировать одновременно уровнем, скажем, таблиц и уровнем данных в этих
таблицах. То есть запрос типа УДАЛИТЬ ТАБЛИЦЫ, У КОТОРЫХ В ПОЛЕ "ДЕHЬ РОЖДЕHИЯ"
СУЩЕСТВУЕТ ЗHАЧЕHИЕ МЕHЬШЕ, ЧЕМ "01.01.1980", должен быть признан ошибочным.


Заключение
Данный пример приведён исключительно для того, чтобы продемонстрировать, что
пользуясь технологией объектно-ориентированного проектирования можно получать
значительно более красивые, простые и мощные решения, нежели это возможно при
традиционном структурном программировании. В эхе звучали высказывания по поводу
того, что ООП - это мода и не более того, но это не так. Лиса тоже заверяла, что
виноград зелен, поскольку сама не могла его достать"... ;^)

Ещё раз прошу, если у кого-то возникнут вопросы, то лучше направлять их по
netmail. В случае, если однотипных вопросов будет много, то отвечу на них в эхе.

С уважением, Александр Усов.

PS В работе по спецификации системы хранения информации принимали участие,
наряду со мной, также Антон Кордюков, Виктор Язвенко, а также ряд других
программистов. При использовании данных материалов - просьба ссылаться на
авторов.


0 новых сообщений