Раскрываются основы технологии построения информационных систем с возможностью их простого модульного расширения без перекомпиляции исходного кода и элементами объектно-ориентированных систем управления базами данных. Технология построения основана на использовании реляционных СУБД.
А.А. Макунин
Усложнение предметных областей и методов обработки информации в настоящее время приводит к развитию технологий работы с базами данных. Реляционная модель, несмотря на свою эффективность, не позволяет справляться в полной мере со структуризацией данных и практически никак не регламентирует сложных операций над ними.
Вопросы сложной обработки и нетривиальных структур информации пытаются решать при помощи объектно-ориентированных систем управления базами данных (ООсУБД). Полноценные ООСУБД труднореализуемы. Вместо этого в настоящее время делаются попытки создать надстройки над реляционной моделью. В данной статье изложено мнение автора на ряд моментов разработки таких надстроек.
На наш взгляд, основополагающими принципами построения ООСУБД в виде подобной надстройки могут являться:
- открытая архитектура;
- модульность;
- библиотека базовых классов для разработки;
- средства отправки и получения сообщений;
- механизмы визуализации данных;
- средства оптимизации доступа к объектам;
- средства определения метаопераций.
Построение открытой архитектуры средствами объектно-ориентированной парадигмы
Одним из важных свойств современной информационной системы, обусловливающих ее приспособляемость к изменяющейся ситуации, является открытость архитектуры. Открытая архитектура позволяет без перекомпиляции исходного кода всей системы изменять и расширять функциональность программного комплекса в целом или его частей. Использование принципов открытой архитектуры приобретает еще большую актуальность при работе со сложными по структуре базами данных, особенно на этапе разработки, опытной эксплуатации и дальнейшего развития, в ходе которых схема базы, а равно и компоненты системы, отвечающие за отображение данных, претерпевают порой кардинальные изменения.
В целом открытая архитектура всегда накладывает ограничения и требует наличия соглашений на составляющие ее компоненты. Как средство задания таких ограничений весьма подходит иерархия классов, на верхних уровнях абстракции которой удобно задавать общие свойства и методы работы с данными.
Общеизвестно, что жизненный цикл любой полезной и эффективной системы может состоять из череды этапов разработки и эксплуатации. Если при этом используются классические подходы, то подразумевается, что по окончании этапа разработки пользователи получают новую версию системы в целом. Использование же открытой архитектуры и компонентного подхода позволяет легко добавлять новые компоненты и заменять старые на усовершенствованные и соответствующие новым, изменившимся требованиям к информационной системе.
Применение объектно-ориентированной парадигмы программирования, принципов компонентной модели и открытой архитектуры в применении к разработке приложений с использованием баз данных позволяет значительно упростить процесс проектирования и реализации готовых программных комплексов для достаточно сложных предметных областей.
Трудность построения открытой архитектуры для приложений баз данных заключается в разнородности объектов для работы с элементами данных. Основным моментом в разработке технологии является проектирование полнофункционального, но при этом не избыточного интерфейса (чтобы быть достаточно абстрактным, т.е. универсальным) взаимодействия между составными частями.
В качестве основообразующей для методологии построения открытой архитектуры автором были избраны объектно-ориентированная модель, реализованная в среде быстрой разработки приложений Borland Delphi, и механизм пакетов (package) для формирования наборов компонентов.
Интерфейсы взаимодействия удобно прописать в одном из модулей базовой, технологической библиотеки, большинство методов базовых классов - абстрактные. На основе этой библиотеки при помощи наследования создаются реальные классы.
Базовая библиотека ядра представляет собой набор модулей:
- Eclasses, в котором содержатся описания и реализации общих классов системы;
- Env, реализующий аналог переменных окружения, общих для информационной системы в целом;
- ObjectManager, обеспечивающий эффективное управление объектами;
- ModuleManager, отвечающий за загрузку и выгрузку из оперативной памяти пакетов (package) с компонентами;
- NavigatorManager, содержащий механизмы управления средством визуализации данных;
- Nutilities, представляющий собой набор общих утилит;
- MessageManager, обеспечивающий механизмы рассылки сообщений и подписки на их получение.
Открытость архитектуры с использованием компонентов заключается в механизме оповещения системы в целом о новой структурной или функциональной единице. Новые компоненты при помощи вызовов специальных функций библиотеки ядра регистрируются в системе, а так как они реализуют уже известные системе интерфейсы, то становится возможным их использование.
В системе реализованы парные функции регистрации и удаления из системы класса, сервиса, навигатора, странички свойств:
- function RegisterEntityClass;
- function UnregisterEntityClass;
- function RegisterEntityNavigator;
- function UnregisterEntityNavigator;
- function RegisterEntityService;
- function UnregisterEntityService;
- function RegisterPropertyPage;
- function UnregiseterPropertyPage.
Такой механизм имеет одно ограничение: в системе могут появиться только известные типы классов. Для принципиально новых классов можно предложить подход, когда регистрируются не только сами компоненты, но и новые библиотеки, включаемые в ядро, которые, в свою очередь, содержат новые базовые классы и механизмы регистрации. Этот подход в настоящее время находится в стадии проектирования, но его реализация и использование, как ожидается, принесет значительное расширение функциональности.
Компоненты для манипуляций с данными
В чистом виде ООСУБД построить технологически и семантически сложно: требуется задать языки определения данных и манипуляции с данными. Для объектно-ориентированного подхода характерна инкапсуляция, которая скрывает внутреннюю структуру объекта, делая его доступным только через вызовы методов. Однако методы должны быть написаны на каком-то языке.
Типичен вариант реализации, который отходит от парадигмы: производится кодирование некоторого класса, который отвечает за операции с некоторым классом объектов СУБД и затем используется в программе. То есть все-таки производится разделение данных и кода, который ими управляет.
Аналогичный вариант предложен автором в разработанной технологии построения автоматизированных рабочих мест (АРМ) [1]. Поэтапно разработка приложений выглядит в виде последовательности операций:
- выполнение проектных работ со схемой базы данных в реляционной СУБД;
- проектирование классов, соответствующих объектам предметной области;
- кодирование классов;
- сборка модулей-компонентов.
В результате получается набор модулей, содержащих классы, обычно по паре на каждый вид объекта предметной области. Один отвечает за отображение множества объектов и операции над ним, а второй за визуализацию и операции над единичным экземпляром.
Иногда не требуется создания класса экземпляров. Такой случай подходит для сложных атрибутов, которые не являются (по условиям или необходимости) самостоятельными объектами.
Пример: для информационной системы магазина требуется отражение покупок, для чего создаются три класса: класс множества покупок; класс экземпляров покупок; класс множества товарных позиций покупок. Классы основаны на базовых из библиотеки технологического ядра и поэтому легко поддаются управлению через обобщенные и описанные в базовых классах интерфейсы.
Рис. 1. Иерархия классов
Иерархия классов показана на рис.1. Базовые классы для объектов данных:
- TEntity - обеспечивает наиболее общие механизмы связи между непосредственно данными и формами их представления;
- TEntityClass - реализует обобщенный интерфейс операций для объектов, представляющих множество сущностей реального мира;
- TEntityInstance - содержит реализацию методов для работы с отдельным экземпляром сущности реального мира;
- TEntityContainer - обеспечивает средства для работы с объектами-контейнерами.
Реализация отдельных классов для разных видов объектов предметной области необходима еще и по причине возможной сложности структуры отдельного экземпляра - линейность структуры его атрибутов не гарантируется, более того, возможно наличие объектов-контейнеров, включающих в себя множество других экземпляров (таким образом обеспечивается механизм сложных атрибутов).
Как показала практика, помимо классов для работы с отдельными экземплярами или множествами экземпляров, требуются еще специфические объекты, проявляющие свойства и тех и других, т.е. множеств объектов, имеющих собственные атрибуты. Примерами таких объектов могут служить иерархические классификаторы. Принципы оптимизации работы с такими классификаторами отражены в [2].
Использование классификаторов также создает трудности, например, при редактировании свойств объекта необходим доступ к другим таблицам. Поэтому нет однозначного отображения «объект - таблица», верно скорее следующее - «объект - множество таблиц», что и приводит к необходимости использования множеств частных классов для разных видов объектов.
Технологически компоненты манипуляции с объектами выполнены в виде форм, которые встраиваются в средство отображения.
Визуализация данных
В предлагаемой технологии построения информационных систем используются два механизма отображения данных.
Первый обеспечивает показ данных в формах. В этом случае реализован принцип расширенного отображения (полного, эксплицитного) информации об экземпляре или их множестве. Доступны операции над соответствующим объектом.
Второй механизм предназначен для отображения взаимосвязей между объектами предметной области и реализует элементы навигации между объектами, показанными в упрощенной (имплицитной) форме.
В настоящее время в технологии реализованы варианты связей, раскрывающих:
- отношение классификации (есть некоторый);
- отношение экземпляризации;
- связь по внешнему ключу.
Визуализация при помощи второго механизма осуществляется специальным компонентом - навигатором (рис. 2), управляющими параметрами для которого являются: список классов, схема навигации, классы объектов, формы объектов.
Рис. 2. Внешний вид навигатора
Схема навигации задает конфигурацию автоматизированного рабочего места и содержит в себе правила раскрытия ветвей дерева навигации в виде набора кортежей <КЛАСС ПРЕДОК, КЛАСС ПОТОМОК, ТИП СВЯЗИ, ПАРАМЕТРЫ>.
Навигатор реализует механизмы произвольного доступа с использованием механизмов оптимизации работы с объектами.
Оптимизация доступа к объектам
В любой объектно-ориентированной системе при рассмотрении ее на некотором уровне абстракции в момент ее работы можно выделить некоторые адресуемые единицы - экземпляры классов, которые находятся в памяти. Для эффективного управления поиском и доступом необходимо иметь в наличии механизмы структуризации хранения объектов в памяти (фактически в объектном кэше).
В предлагаемой технологии используется на первом уровне дерево классов, а на втором кэш для доступа по коду объекта. Также реализованы механизмы поиска, как единичного объекта, так и множества объектов в кэше.
Доступ к оптимизированным средствам поиска объектов возможен через переменную Objects класса TEObjects и ряд его методов, объявленных в модуле ObjectManager:
- procedure AddObjectReference;
- function FindObjectReference;
- procedure FindObjectReferences;
- procedure ReleaseObjectReference;
- procedure ReleaseListObjectsReference;
- procedure AddClassObjectReference;
- function FindClassObjectReference;
- procedure FindClassObjectReferences;
- procedure ReleaseClassObjectReference.
Метаоперации
Кроме операций с отдельными объектами или их множествами, в информационной системе могут потребоваться специфические действия с набором разных классов, например глобальные операции: архивация или составление сводных отчетов, затрагивающих разнородные данные.
Для таких операций автором предлагается механизм сервисов, которые также базируются на библиотеке технологического ядра и вызываются через главное меню системы.
Преимущества применения технологии
Предложенные принципы позволяют:
- реализовать унифицированную работу с объектами сложных предметных областей;
- упростить разработку сложных приложений с применением объектно-ориентированных технологий;
- обеспечить гибкий механизм настройки автоматизированных рабочих мест;
- обеспечить наглядное отображение информации с взаимосвязями;
- обеспечить расширяемость и взаимозаменяемость компонентов.
Описанная выше технология используется в настоящее время при разработке информационной системы «Реестр муниципальных контрактов» для администрации г. Томска.
ЛИТЕРАТУРА
- Макунин А.А., Шилов В.В. Применение модульной технологии разработки автоматизированных рабочих мест в ГИС-приложениях // Геоинформатика-2000: Труды Международной научно-практической конференции. Томск: Изд-во Том. ун-та, 2000. С. 84-87.
- Макунин А.А. Особенности использования иерархических классификаторов в реляционных СУБД // Новые технологии и комплексные решения: наука, образование, производство: Материалы Всероссийской научно-практической конференции (19 октября 2001 г., Анжеро-Судженск). Ч. 6: Информатика. Кемерово: КемГУ, 2001. С. 48-50.
Статья представлена кафедрой прикладной информатики факультета информатики Томского государственного университета.