Системы управления базами данных
Введение
Системы управления базами данных (СУБД) играют исключительную роль в организации современных промышленных, инструментальных и исследовательских информационных систем. Тематика СУБД поистине безгранична.
Можно выделить следующие основные функции СУБД:
управление данными во внешней памяти;
управление буферами оперативной памяти;
управление транзакциями;
журнализация и восстановление БД после сбоев;
поддержание языков БД.
Если какая-либо прикладная информационная система опирается на некоторую систему управления данными, обладающую этими функциями, то эта система управления данными является системой управления базами данных (СУБД).
Логически в современной реляционной СУБД можно выделить наиболее внутреннюю часть – ядро СУБД (часто его называют Data Base Engine), компилятор языка БД (обычно SQL), подсистему поддержки времени выполнения, набор утилит. В некоторых системах эти части выделяются явно, в других – нет, но логически такое разделение можно провести во всех СУБД.
Ядро СУБД отвечает за управление данными во внешней памяти, управление буферами оперативной памяти, управление транзакциями и журнализацию. Соответственно, можно выделить такие компоненты ядра (по крайней мере, логически, хотя в некоторых системах эти компоненты выделяются явно), как менеджер данных, менеджер буферов, менеджер транзакций и менеджер журнала. Как можно было понять из первой части этой лекции, функции этих компонентов взаимосвязаны, и для обеспечения корректной работы СУБД все эти компоненты должны взаимодействовать по тщательно продуманным и проверенным протоколам. Ядро СУБД обладает собственным интерфейсом, не доступным пользователям напрямую и используемым в программах, производимых компилятором SQL (или в подсистеме поддержки выполнения таких программ) и утилитах БД. Ядро СУБД является основной резидентной частью СУБД. При использовании архитектуры "клиент-сервер" ядро является основной составляющей серверной части системы.
Основной функцией компилятора языка БД является компиляция операторов языка БД в некоторую выполняемую программу. Основной проблемой реляционных СУБД является то, что языки этих систем (а это, как правило, SQL) являются непроцедурными, т.е. в операторе такого языка специфицируется некоторое действие над БД, но эта спецификация не является процедурой, а лишь описывает в некоторой форме условия совершения желаемого действия (вспомните примеры из первой лекции). Поэтому компилятор должен решить, каким образом выполнять оператор языка прежде, чем произвести программу. Применяются достаточно сложные методы оптимизации операторов, которые мы подробно рассмотрим в следующих лекциях. Результатом компиляции является выполняемая программа, представляемая в некоторых системах в машинных кодах, но более часто в выполняемом внутреннем машинно-независимом коде. В последнем случае реальное выполнение оператора производится с привлечением подсистемы поддержки времени выполнения, представляющей собой, по сути дела, интерпретатор этого внутреннего языка.
Наконец, в отдельные утилиты БД обычно выделяют такие процедуры, которые слишком накладно выполнять с использованием языка БД, например, загрузка и выгрузка БД, сбор статистики, глобальная проверка целостности БД и т.д. Утилиты программируются с использованием интерфейса ядра СУБД, а иногда даже с проникновением внутрь ядра.
Постановка задачи
Организационно-экономическая сущность задачи
Эффективность использования электроэнергии определяется энергоемкостью потребителей. Одним из основных путей ее снижения является рационализация режимов электропотребления, включающая вопросы учета и контроля поступления и расхода электроэнергии, анализа ее использования, а также планирования и прогнозирования уровней электропотребления. Успешное решение указанных вопросов возможно только при автоматизации учета и контроля электропотребления, которую можно произвести на базе информационно-измерительных систем. Границы применения таких систем, область решаемых ими задач, эффективность практического использования во многом определяются возможностями их программного обеспечения. Эти возможности должны обеспечивать простоту и оперативность доступа к собранной информации, гибкость ее использования и наглядность представления, а также позволять решать основные задачи рационализации режимов электропотребления. Данным требованиям отвечает разрабатываемый программный комплекс “Расчет стоимости электроэнергии”, включающий следующие функции:
Расчет стоимости пользования электроэнергией частных энергопотребителей.
Предоставить возможность работы с информацией по заданному месяцу.
Обеспечить расчет стоимости электроэнергии с учетом предоставляемых льгот (налагаемых штрафов), количества жильцов по существующим тарифам.
Предоставить возможность работы с информацией о домах (добавление, удаление, модификация произвольного номера дома).
Предоставить возможность работы с информацией по выбранным квартирам для конкретного дома (добавление, удаление, сортировка, модификация).
Для каждого потребителя обеспечить задание произвольного набора электроприборов, а также времени их работы.
При изменении данных, влияющих на расход электроэнергии за месяц, происходит перерасчет вычислимых полей в окне данных с информацией по квартирам дома.
Обеспечить формирование отчетов по заданным параметрам.
Обеспечить автоматическое обновление и сохранение измененных данных.
Обеспечить просмотр информации о структуре БД (содержимого ее таблиц и связей между ними).
Программа должна иметь интуитивно понятный графический интерфейс.
Входная информация
Входной информацией программы является база данных в формате Sybase SQL Anywhere 5.5 (п. 0). Ее структура которой была создана в Power Designer 6.1, а триггеры и используемые хранимые процедуры – при помощи утилиты Sybase SQL Anywhere под названием Sybase Central.
Сами данные хранятся в шести таблицах (соотношения между ними приводятся в 0).
Постоянная информация задачи
Постоянной информацией являются:
стандартные диалоговые окна, пиктограммы и сообщения средства разработки приложений Power Builder 7.0, хранящиеся в распостраняемых вместе с программой библиотеках Power Builder;
стандартные диалоговые окна и сообщения подсистемы ODBC и драйвера СУБД Sybase SQL Anywhere.
Вышеуказанные окна и сообщения возникают в ответ на следующие события:
передача некорректной информации базе данных (нарушения ссылочной целостности, типов и допустимыз значений данных);
ввод некорректных данных в поля редактирования;
исключительные системные ситуации.
Выходная информация
Выходной информацией задачи являются:
диаловые окна и формы для редактирования содержимого базы данных;
сообщения о возникновении нестандартных ситуаций, а также запросы пользователю на подтверждение выполнения тех или иных действий.
Подробно выходная информация рассмотрена в пунктах 0 и 0.
Вычислительная система
Sybase SQL Anywhere – это новое название СУБД Watcom SQL фирмы Watcom. Такое название данная СУБД получила, начиная с версии 5.0. Переименование произошло после объединения компаний Sybase и Powersoft в 1995 году, в результате чего фирма Watcom, как составная часть компании Powersoft, вошла в состав корпорации Sybase Inc
Sybase SQL Anywhere представляет собой полнофункциональную СУБД на Intel-платформе для мобильных и небольших групп пользователей Данная СУБД позволяет разрабатывать приложения на основе технологии "клиент-сервер" на платформах Windows NT, Windows 95/98, Windows 3.x, OS/2, NetWare, Solaris/Sparc, HP-UX, AIX, DOS и QNX. Рассматриваемая СУБД предназначена для разработки приложений по технологии “клиент-сервер”.
СУБД SYBASE SQL Anywhere является составным элементом системы SYBASE System 11 и ее последующей версии SYBASE System 11.5 Adaptive. Основным элементом этих систем является мощная СУБД SYBASE SQL. Server. Она позволяет хранить огромные объемы информации и обрабатывать запросы к базам данных с применением технологии клиент-сервер. СУБД SYBASE SQL. Server и SYBASE SQL Anywhere взаимно дополняют друг друга. Разработчики SYBASE SQL Anywhere старались достичь максимальной совместимости баз данных, создаваемых этой СУБД, с базами данных SYBASE SQL Server. Именно этим объясняется включение в SQL Anywhere некоторых элементов SYBASE SQL Server.
SYBASE SQL Anywhere может поставляться как в сетевом варианте СУБД, так и автономном варианте. В последнем случае все компоненты СУБД функционируют на том же компьютере, что и приложение. Для приложений не имеет значения, какой вариант СУБД они используют. В рамках локальных сетей взаимодействие с приложениями-клиентами осуществляется посредством таких сетевых протоколов как NetBIOS, TCP/IP и IPX. Базы данных, созданные средствами SQL Anywhere, совместимы с последующими версиями и переносимы между платформами, на которых может функционировать данная СУБД.
SYBASE SQL Anywhere имеет встроенный интерфейс с рядом программных систем, например таких как Powersoft PowerBuilder, Optima С++ и Power Designer. Взаимодействие с другими системами и приложениями осуществляется при помощи следующих программных интерфейсов:
Спецификация ODBC. Данная спецификация предоставляет пользователям унифицированный интерфейс между приложениями и реляционными базами данных, в том числе и базами данных SQL. Этот интерфейс представляет собой совокупность функций. Эти функции организуют взаимодействие приложений с базами данных в операционных системах Windows 3.x, Windows 95/98, OS/2 и Windows NT. Спецификация ODBC представляет собой интерфейс нижнего уровня.
Встроенный SQL (Embedded SQL interface) позволяет "встраивать" SQL-операторы прямо в тексты программ-приложений на языках C или C++. Впоследствии такие приложения подвергаются обработке специальным препроцессором, который заменяет SQL-операторы на вызовы соответствующих функций и процедур. После этого преобразованные тексты приложений представляют собой тексты программ на языке программирования C или C++.
DDE-интерфейс. Это технология динамического связывания объектов используемая в операционной системе Windows 3.x.. С ее помощью осуществляется взаимодействие приложений-клиентов, которым требуются данные, с приложениями-серверами эти данные предоставляющие. Для применения этой технологии требуется использование соответствующих программных средств, поддерживающих функционирование DDE-клиента. С другой стороны в качестве серверов необходимо использовать приложения, обеспечивающие режим DDE-сервера. К числу последних относятся такие программные приложения, как Microsoft Access, Microsoft Excel и ряд других. В СУБД SYBASE SQL Anywhere роль DDE-сервера выполняет WSQL (Watcom SQL) DDE Server.
Высокоуровневый собственный интерфейс WSQL HLI (Watcom SQL High-level interface) обеспечивает на "высоком" уровне взаимодействие между SQL Anywhere и приложениями в средах операционных систем Windows 3.x, Windows 95/98, OS/2 и Windows NT. Данный интерфейс реализован для систем программирования аналогичных Visual Basic (для Windows 95/98 и Windows NT) и REXX (для OS/2).
СУБД SYBASE SQL Anywhere имеет в своем составе сетевой и автономный варианты СУБД.. Эти варианты реализованы в виде компонентам SQL Anywhere server/client и SQL Anywhere engine. SQL Anywhere server/client представляет сетевой вариант СУБД. Он организует взаимодействием приложений с базами данных в рамках локальной вычислительной сети по технологии "клиент-сервер".
ПРИМЕЧАНИЕ
Кроме локальной сети, СУБД SYBASE SQL Anywhere предоставляет вам возможность использовать технологию "клиент-сервер" и в рамках сети Internet. Для этого необходимо, чтобы на компьютере с сервером базы данных был организован Web-сервер и в состав его программного обеспечения входило приложение SYBASE Netlmpact Dynamo.
Сетевой вариант включает в себя удаленный сервер и клиентскую компоненту; SQL Anywhere server и SQL Anywhere client, соответственно. Функционирование СУБД в рамках сети заключается в следующем. На одной ЭВМ, играющей роль сервера базы данных, запускается удаленный сервер – SQL Anywhere server. Его задача состоит в ожидании запросов от клиентских ЭВМ, их обработке и отправлении результатов клиентов. Во время работы сервера на клиентских ЭВМ функционирует компонента SQL Anywhere client. Она принимает от клиентских приложений запросы.. Эти запросы представляют собой операторы языка SQL, например, SELECT (выбрать данные), UPDATE (модифицировать данные), CALL (вызвать хранимую процедуру) и другие. Полученные запросы компонента SQL Anywhere client отправляет по сети серверу базы данных и ожидает возвращение от него результатов этих запросов.
Компонента SQL Anywhere engine является автономным вариантом рассматриваемой СУБД и представляет собой локальный сервер баз данных. Он реализует технологию "клиент-сервер" в условиях, когда сервер и клиенты функционирует на одной ЭВМ. База данных хранится на этой же ЭВМ. Сервер принимает запросы непосредственно от приложений, обрабатывает их и отправляет приложениям результаты запросов. Наличие такого варианта позволяет проводить автономную отладку приложений. Это имеет большое значение, так как на этапе автономной отладке приложения находятся еще в "сыром" состоянии. Данное обстоятельство может сыграть плохую службы при их отладке в сетевом варианте СУБД, когда используемая база данных является общим ресурсом большого количества пользователей.
Клиентские приложения не различают с каким вариантом СУБД они работают. Одни и те же запросы выполняются для пользователя совершенно одинаково по одним и тем же правилам.
ПРИМЕЧАНИЕ
С точки зрения пользователя функции удаленного (SQL Anywhere engine) и локального (SQL Anywhere server) серверов идентичны. В связи с этим в дальнейшем в рамках данного разделом под термином "сервер" будем понимать компоненту SQL Anywhere server или SQL Anywhere engine, если не требуется подчеркнуть их различие.
Схема взаимодействия приложений с базой данных в СУБД SYBASE SQL Anywhere приведена на рис. 1.
Рис. 1. Взаимодействие приложений-клиентов с базой данных в различных вариантах СУБД SYBASE SQL Anywhere:
а) Автономный вариант;
б) Сетевой вариант.
Компоненты SQL Anywhere server/client и SQL Anywhere engine составляют основу СУБД. Однако наряду с ними в состав СУБД входит и ряд других компонентов. Все вместе эти компоненты составляют комплект поставки SQL Anywhere, в который входят:
SQL Anywhere server/client – сетевой вариант СУБД..
SQL Anywhere engine – автономный вариант СУБД;
SQL Remote – компонента поддержания режима репликаций;
Sybase SQL Central – утилита администрирования баз данных;
ISQL (Interactive SQL) – утилита интерактивного взаимодействия с базами данных;
набор дополнительных утилит для создания баз данных, их сжатия, уничтожения и т.д.
Приведенные компоненты являются элементами стандартной поставки. Кроме стандартной, рассматриваемая СУБД может предлагаться в виде профессиональной поставки. Она имеет еще большее число составляющих. Компоненты стандартной поставки будут рассмотрены далее.
Базы данных, создаваемые СУБД SYBASE SQL Anywhere, представляют собой реляционные базы данных. Эти базы данных состоят из совокупности объектов. Такими объектами являются:
Таблицы данных – хранят данные, составляющие основное содержание базы данных.
Ключи – совокупности атрибутов, образующих ключи (первичные и внешние), предназначенные для осуществления ускоренного поиска данных и обеспечения ограничений ссылочной целостности.
Индексы – специальные таблицы, предназначенные для быстрого поиска требуемой информации в таблицах данных.
Представления (Views) – связанные совокупности подмножеств таблиц данных, предоставляемых пользователям для ограничения их доступа к таблицам данных. При этом, к одним таблицам доступ запрещается совсем, а в других таблицах доступ разрешается только к некоторым записям этих таблиц.
Хранимые процедуры и функции- хранимые в базе данных подпрограммы на языке SQL, воспользоваться которые может любой пользователь, имеющий на это право.
ПРИМЕЧАНИЕ
В СУБД SYBASE SQL Anywhere используется диалект языка SQL – Watcom SQL. Он соответствует стандартам ANSI SQL/89 Level 2 и IBM SAA. Кроме того, используемый диалект SQL поддерживает новые возможности и расширения стандартов ANSI SQL/92 и IBMs DB2
Триггеры – подпрограммы, активизирующиеся при наступлении определенных событий, например, удаление записи из таблицы, модификация записей и т.д. Триггеры являются мощным средством обеспечения целостности данных.
Пользовательские типы данных – типы данных, создаваемые пользователем на основании базовых типов данных СУБД.
Системные таблицы – хранят всю информацию о схеме базы данных и содержащихся в ней объектах.
Вся информация базы данных может размещается в нескольких областях. Область представляет собой файл с расширением db, в которой хранится вся база данных или один из ее фрагментов. Каждая область характеризуется своим именем и файлом, соответствующим этой области. Первоначально база данных занимает только одну область с именем SYSTEM, которой соответствует базовый файл (root file). Затем по мере необходимости пространство внешней памяти базы данный может расширяться за счет добавления новых областей. Эти файлы областей могут быть размещены в любом каталоге на любом диске и любом узле локальной сети.
Физически каждый файл (область) состоит из страниц фиксированного объема. Размер страниц устанавливается при создании базы данных. В страницах размещаются объекты базы данных. В зависимости от размера объектов каждая страница может содержать несколько экземпляров объектов или фрагмент одного из объектов.
Наряду с файлами областями в состав базы данных входит файл для хранения журнала изменений БД – файл с расширением log. Наличие журнала изменений является основой манипулирование данными в рассматриваемой СУБД с использованием механизма транзакций. Такой подход обеспечивает высокую защиту баз данных от возникающих программных и аппаратных сбоев и отказов.
Характеристики аппаратных средств
Программа разрабатывалась на ПК со следующей конфигурацией:
МП Pentium II 233
RAM 32 Mb
Video ASUS V300 4Mb
HDD Seagate 3.2 Mb
Тестирование осуществлялось на вычислительных системах с МП Pentium 133 – Pentium 200 MMX с объемом памяти 16-32 Mb. При этом не наблюдалось значительного замедления работы приложения по сравнению с конфигурацией компьютера разработчиков.
Минимальные аппаратные требования для работы программы:
МП Pentuim 90
RAM 16 mb
Video 1 Mb.
Объем необходимого дискового пространства следует из таблицы:
Компонент программы |
Размер (в Кb) |
Исполняемый модуль |
283 |
База даннных |
466 (начальный размер) |
Библиотеки Power Builder |
6,284 |
ODBC-драйвер Sybase SQL Anywhere |
2,154 |
Всего: |
9,187 |
Характеристики программных средств
Среда разработки приложений “клиент-сервер” Power Builder предлагает программисту средства объектно-ориентированного программирования для реализации поставленной перед ним задачи. Этот подход является в настоящее время наиболее актуальным вследствие своей гибкости и естественности концепции, его определяющей, т.к. он дает возможность представить задачу в виде совокупности объектов и связей между ними, т.е. фактически в виде модели реального мира.
Основными понятиями Power Builder являются следующие:
объект – некоторая сущность, характеризующаяся набором характеристик и методов их обработки;
сценарий – программный код обработки объектов.
Язык Power Builder имеет черты сходства со следующими языками программирования – C++, Pascal и FoxPro. Он является типизированным, что означает принадлежность данных к определенной группе – типу.
Замечательной особенностью языка обработки сценариев Power Builder является наличие встроенного SQL. Реализация этого языка в Power Builder основана на спецификации SQL, используемой в СУБД Sybase SQL Anywhere. Это означает наличие таких возможностей, как вызов хранимых процедур, обмен данными с БД через параметры, динамические SQL-запросы и др.
Существенным недостатком Power Builder можно считать отсутствие средств формирования листинга программы, как объединения всех используемых сценариев.
Ключевым понятием, которое необходимо усвоить для работы с Power Builder, является понятие объекта. Power Builder позволяет не только использовать уже существующие объекты среды, но и создавать свои собственные, либо делая их потомками уже существующих, делая их “интеллектуальнее”, либо путем конструирования полностью нового объекта, не имеющего предка:
Пользовательский – объект, не имеющий визуального представления;
Стандартный – объект-потомок от любого стандартного невидимого класса Power Builder (“Транзакция”, “Сообщение”, “Ошибка”, “Объект” и др.);
Пользовательский визуальный – видимый объект, состоящий из любых визуальных стандартных или пользовательских объектов;
Внешний визуальный – объект, содержащий элементы управления, созданные вне Power Builder;
Стандартный визуальный – объект, являющийся потомком от стандартного визуального объекта (“Текст”, “Кнопка”, “Список” и др.) и расширяющий его функциональность. Эти объекты, в основном, используются для переопределения свойств стандартного визуального объекта с целью приспособления его для нужд решаемой задачи;
Окно – объект-потомок от класса “Окно”, который, как и пользовательский визуальный, может содержать любые элементы управления. Отличие между ними состоит в том, что в потомке окна уже реализованы некоторые функции работы с элементами управления, и, кроме того, доступен набор методов стандартного элемента управления “Окно”;
Меню – объект, являющийся потомком от стандартного класса “Меню”;
Структура – объект, состоящий только из данных любого типа;
Функция – объект, являющийся функцией, которая может принимать любое число аргументов, передаваемых по ссылке или по значению, и возвращать значение любого типа;
Окно данных – объект, являющийся главным достоинством Power Builder, благодаря которому, собственно, он и имеет свой круг пользователей и имеет право называться средством разработки приложений клиент-сервер.
Окно данных (DataWindow) – основное средство работы с данными. Работая с ним, пользователь может определять способ представления информации и ее тип. Создание DataWindow состоит из четырех этапов:
а) выбор типа окна данных;
б) выбор источника данных и определение критериев и способа их выборки;
в) моделирование окна данных – работа с макетом DataWindow. При этом оно представляется в виде обычного окна, разделенного на несколько частей в зависимости от его типа и способа группировки данных. В режиме моделирования программист размещает в окне данных элементы управления, в число которых входят столбцы таблиц БД и вычисляемые поля, определяя их свойства и параметры вывода;
г) работа с элементом управления DataWindow, размещаемом в окне или другом визуальном объекте как обычный элемент управления. На этом этапе можно определять обработчики событий окна данных, добавлять к нему пользовательские свойства и методы и т.п.
Приложение – объект, с которого начинается выполнение программ. Все остальные объекты создаются из методов приложения.
Операционная система
Программа предназначена для функционирования под управлением ОС семейства Windows 4.x – Windows NT 4.0, Windows 95, Windows 98. Эти ОС являются общепризнанными стандартами как для настольных систем, так и для небольших локальных сетей как однорангового типа, так и с выделенным сервером (хотя, справедливости ради, следует заметить, что в последнем случае оптимальным решением все же является Novell Netware 4.2 и выше).
Для доступа к БД используется встроенный в вышеперечисленные ОС механизм ODBC (Open Database Connectivity). И хотя в последнее время с ним небезуспешно конкурируют такие средства доступа к БД, как BDE и OLE DB, ODBC по-прежнему применятся при разработках, т.к. он зарекомендовал себя с самой лучшей стороны как с точки зрения удобства работы, так и скорости доступа и обработки данных.
Для работы с БД через ODBC на компьютере должен быть установлена специальная программа – ODBC-драйвер. Его назначение – обработка запросов от ODBC-менеджера, к которому, в свою очередь, обращаются с запросами функции ODBC API.
Т.к. используемая в программе БД создана в СУБД Sybase SQL Anywhere 5.5, то для работы приложения необходим соответствующий драйвер – Sybase SQL Anywhere Database Engine и необходимые ему библиотеки. Разработчиками программы создан инсталляционный пакет, выполняющий установку драйвера и вносящий необходимые изменения в реестр.
Также для работы приложения необходимы некоторые библиотеки Power Builder 7.0 – Power Builder Virtual Machine (файл pbvm70.dll), Power Builder ODBC (pbodb.dll), Power Builder DataWindow Extension (pbdwe.dll). Эти файлы также поставляются вместе с программой в архиве redist.rar.
Объектно-ориентированный анализ задачи
Объектно-ориентированное программирование – это подход к разработке программного обеспечения, основанный на объектах, а не на процедурах. Этот подход позволяет максимизировать принципы модульности и "сокрытия информации". Объектно-ориентированное программирование базируется на связывании или инкапсуляции структур данных и процедуры, которая работает с данными в структуре, с модулем.
Объектно-ориентированные (ОО) системы управления данными привлекают все большее внимание как исследователей и разработчиков, так и потенциальных пользователей из прикладных областей. С одной стороны это объясняется развитием и внедрением в практику объектно-ориентированного подхода (ООП) в целом (ОО программирование и проектирование программных систем, ОО технологии организации пользовательских интерфейсов, распределенные объектные системы и т.д.). Но с другой стороны интуитивно ясно, что максимальный эффект можно получить именно от использования ОО баз данных, преодолев наконец, известный конфликт между структурной и поведенческой частями информационных систем.
Вместе с тем, несмотря на существование ряда коммерческих реализаций ООСУБД, доступных в настоящее время на рынке, уровень технологии таких систем существенно уступает уровню развитых реляционных систем. Это касается и модельных характеристик систем (например, языков запросов) и реализационных аспектов (например, оптимизации запросов).
Часто возникает впечатление, что хотя ограничения существующих систем пытаются объяснять некими принципиальными соображениями (например, что развитые возможности конструирования классов, подкрепленные средствами наследования классов позволяют ограничиться запросами только на одном классе объектов), на самом деле эти ограничения являются следствием недостаточно развитой технологии. Кажется, что в условиях отсутствия признанного лидера в области ООСУБД (каким была, например, компания IBM со своим проектом System R в области РСУБД), единственным путем к выработке такой технологии является продолжающаяся (иногда дублирующая) работа исследователей.
Несложно показать принципиальную возможность построения ненавигационного языка запросов к ООБД на основе усиления теоретико-множественного смысла понятия класс и предложить общую концепцию языка программирования ООБД, который естественно (без потери импеданса) включает в себя язык запросов.
Описание задачи
Практически все современные средства разработки используют языки, которые если и не являются чисто объектно-ориентированными, то, по крайней мере, имеют средства для работы с объектами (C++, Pascal, Lisp, Fortran, Basic). Это говорит о том, что сегодня объектно-ориентированное программирование практически вытеснило собой процедурный подход к разработке программ, хотя для решения некоторых специфических задач, как правило, системных, последний все еще применяется.
Основные понятия, использующиеся при описании объектов и связей между ними:
Объект – сущность, являющаяся частью модели реального мира, состоящая из структуры данных и связанных с ней методов ее обработки. Объекты, как правило, образуют иерархию по принципу наследования.
Базовый объект – объект, являющийся “родителем” данного. Это означает, что последний наследует от него его данные и способы их обработки, при необходимости добавляя новые или изменяя существующие.
Дочерний объект – объект, наследующий от базового его свойства и методы.
Свойство – характеристика объекта, определяющая его индивидуальность. Отличия между объектами состоят либо в наличии/отсутствии каких-либо свойств.
Метод – совокупность действий, воздействующих на объект в целом и его свойства в частности.
Сообщение – принятый между объектами способ уведомления о возникновении в них каких-либо событий – ситуаций, следствием которых является измение состояния объекта
Свойства объектно-ориентированного подхода:
расширяемость – если какой-нибудь объект не устраивает программиста, то он может расширить его, дополнив новыми свойствами или методами, а также изменитьсуществующие методы. При этом не надо модифицировать исходный текст библиотек, в которых хранятся объекты, а потребуется лишь обьявить потомка от существующего объекта, модифицировав его в соответствии с требованиями задачи;
модульность – объекты представляют собой не изолированные сущности, а иерархическую структуру, отражающую степень их подобия. Кроме того объекты различных типов (например, объекты “окно” и “приложение” имеют средства для взаимодействия между собой. Свойство модульности также позволяет добиться того, что при объединении корректно работающих подпрограмм в единое целое можно быть уверенным в том, что и оно будет работать без ошибок;
унификация – способы взаимодействия любых объектов стандартизированы и основаны на принципах невмешательства во внутреннюю структуру объекта. Т.е. взаимодействие возможно через уведомление посредством сообщения или вызова объектных методов;
защищенность – сокрытие информации от объектов, не находящихся в “родственных” отношениях с данным. Однако это не означает невозможность влияния объектов друг на друга, т.к. для этого существуют внутренние методы объекта, в которых разрешен доступ к его внутренней структуре;
инкапсуляция – связывание в единое целое данных объекта (его свойств) и методов их изменения, воздействующих на состояние объекта. Это свойство позволяет устранить в коде программы внутренние зависимости, которые приведут к тому, что его будет трудно понять постороннему человеку и, тем более, модифицировать;
полиморфизм – свойство, проявляющееся в том, что объекты на разных уровнях иерархии по-разному реагируют на посылаемые им сообщения и вызовы функций. Т.е. концепция объектно-ориентированного программирования включает в себя автоматическое определение объекта-приемника сообщения или вызова функции. Это означает то, что посылая сообщение или вызывая функцию с одним и тем же именем, программист может быть уверен, что адресат будет точно определен.
В рамках поставленной задачи основными объектами являются:
прибор – он характеризуется своим именем и мощностью, которая вносит свой вклад в расход электроэнергии квартиры;
квартира – характеризуется своим собственным номером, а также номером дома, в котором она находится. Другие свойства квартиры – число жильцов и скидка (в процентах), определяющая на сколько уменьшается плата за электроэнергию для данной квартиры, а также список приборов, формирующих расход энергии;
дом – характеризуется своим номером, типом плиты (электрическая или газовая), которая применяется во всех квартирах дома, нормой расхода энергии на одного человека, а также тарифом за 1 кВ/ч.
Описание интерфейса классов
Ввиду невозможности представления в данной работе листинга программы (что является особенностью Power Builder), описание интерфейса классов изложено в подробной форме. При этом немалое внимание уделено и реализации тех или иных методов.
Класс приложения maxx:
содержит обработчик события Open. При этом создается объект типа “Транзакция” sqlca, с помощью которого будет производится доступ к БД средствами ODBC. В обработчике инициализируются глобальные переменные и создается главное окно – w_main.
Классы окон данных.
1) flats_of_month_h_num:
содержит информацию о всех квартирах дома за указанный месяц. При получении информации серверу БД передаются 2 параметра – номер дома и месяц, которые присутствуют в выражении SELECT. В описываемом окне данных поля, зависящие от месяца, являются вычислимыми, т.к. они не присутствуют физически в БД, т.к. в противном случае последняя не удовлетворяла бы второй нормальной форме.
2) house_of_month_h_num:
содержит информацию о доме, не зависящую от месяца.
3) pribors_1:
содержит список приборов, являющийся источником данных для выпадающего списка выбора приборов, появляющегося в окне изменения информации о потреблении энергии квартирой в заданном месяце.
4) report_house:
окно отчета о расходе энергии для заданных домов в указанном диапазоне месяцев. Информация в окне группируется по полям house_c_num и house_v_month. Аргументами для получения данных являются диапазоны домов и месяцев.
5) pribors_1:
содержит даные для редактирования списка приборов, которые формируют расход электроэнергии для квартиры. Неизменяемым полем является поле идентификатора прибора, идентифицирующего его.
6) temp_edit:
содержит данные для модификации списка приборов в указанной квартире, использующихся в ней в заданном месяце. Эта информация берется из временной таблицы temp, данные в которую записываются из текстовой строки PRIBORS, хранящейся в таблице FLAT_V и содержащей список приборов, потребляющих энергию в данной квартире за определенный месяц, с указанием их количества и среднего времени работы за сутки.
Классы функций.
1) formhouselist:
функция, формирующая выпадающий список, передаваемый как аргумент, номерами домов, имеющихся в БД. Для этого создается динамический курсор, с помощью которого осуществляется выборка данных из БД.
2) getdaycount:
возвращает количество дней в указанном месяце.
Класс меню menu_1:
содержит определение главного меню программы, которое встраивается в окно w_main. Кроме того, класс содержит описание реакций пользователя на событие выбора пунктов меню. При этом, как правило, осуществляется открытие тех или иных окон с передачей им требуемых параметров.
Класс проекта maxx:
содержит описание способа построения исполняемого файла, являющегося реализацией класса приложения maxx. Библиотека, содержащая описания классов программы, может включаться в формируемый EXE-файл, либо генерироваться, как библиотека динамической компоновки. При этом возможны следующие варианты, в зависимости от ее содержимого:
в ней содержится машинный код (расширение DLL);
в ней содержатся макроопределения используемых объектов (расширение PBD).
В объекте “проект” также перечисляются файлы с описанием используемых ресурсов.
Классы пользовательских объектов.
1) u_closebutton:
кнопка для закрытия родительского окна.
2) u_editmask_g0:
маскируемое окно ввода, которое воспринимает только большие нуля целые значения. При нарушении этого правила, что проверяется в при обработке события LoseFocus, выдается сообщение об ошибке и фокус ввода отстается у окна ввода.
3) u_waitwindow:
представляет собой пользовательский визуальный объект, состоящий из индикатора прогресса, рамки, текстовой строки подсказки и строки состояния процесса. Объект служит для отображения информации о протекании какого-либо потенциально продолжительного процесса.
Классы окон.
1) w_db_struct:
окно с информацией о структуре используемой БД, представляемой в виде графа отношений между логическими сущностями. При этом отображаются все поля таблиц с указанием связей между ключевыми полями.
2) w_flatpribors:
окно для модификации данных по квартире для заданного месяца. Эти данные представляют собой список приборов с указанием их числа по состоянию на указанный месяц, а также среднего времени работы в сутки. Выбор прибора осуществляется по его идентификатору.
Окно позволяет редактировать данные для указанной квартиры в одном доме. Список в верхней части окна позволяет выбрать месяц, применительно к которому будут рассматриваться приборы.
Окно использует объект DataWindow temp_1. При модификации информации в нем производится пересчет количества энергии в кВ/ч, потребляемого квартирой за сутки.
3) w_flats:
окно модификации данных о домах. В верхней его части располагается список домов, присутствующих в БД, а также месяцы года. В окне производятся операции добавления/удаления/редактирования как самих домов, так и квартир, содержащихся в них.
Модификация информация о доме производится в DataWindow house_of_month_h_num (постоянная информация о доме) и пользовательском элементе управления u_editmask_g0 (информация, зависящая от месяца – тариф).
Редактирование данных о квартирах в выбранном доме осуществляется в DataWindow flats_of_month_h_num. При изменении любой модифицируемой информации в этом окне, а также изменении текущего месяца или месячного тарифа, происходит автоматическое обновление вычисляемых полей, относящихся к квартирам.
Из этого окна также осуществляется вызов окна w_flatpribors для редактирования списка приборов квартиры.
4) w_main:
главное окно программы, содержащее меню и рабочую область (в программе не используется).
5) w_params:
окно модификации параметров, принимаемых по умолчанию (в данной версии программы это – тариф оплаты одного кВ/ч).
6) w_pribors_edit:
окно редактирования списка приборов, которые могут быть заданы в качестве потребителей электроэнергии. При удалении прибора либо изменении мощности уже существующего происходит модификация информация в БД: при выходе из окна выполняется сравнение текущих данных о мощности с хранимыми в БД. Если для какой-либо записи обнаружено несоответствие, то происходит изменение данных о количестве потребляемой энергии квартирой и перерасчет суммы для дома путем вызова хранимой процедуры GetHouseSum.
7) w_report_house:
окно просмотра отчета о суммарных материальных затратах, которые несут жильцы всех квартир дома за месяц. Отчет можно просматривать в нескольких формах:
информация об одном доме и одном месяце;
информация о всех домах и одном месяце;
информация о всех домах и всех месяцах;
информация об одном доме и всех месяцах.
Описание программы
Доступ ко всем функциям программы осуществляется либо через меню, либо через панель инструментов, кнопки которой дублируют к основные пункты меню.
Модификация данных осуществляется, как правило, через элементы управления DataWindow. Их реализация предусматривает изменение текущих данных только при выходе из поля редактирования. Поэтому, в некоторых ситуациях, реакция программа на модификацию данных может отличаться от ожидаемой.
Описание главного меню:
1) “Программа”
а) “Структура БД” – просмотр информации о структуре БД (содержимого ее таблиц и связей между ними);
б) “Выход” – завершение работы с программой;
2) “Данные”
а) “Дома” – работа с информацией о домах. При этом появляется диалоговое окно, содержащее элементы управления для задания критериев отбора данных, и, непосредственно, сами данные.
Критерии отбора – это номер дома и месяц. Эти параметры задаются путем выбора значений из списков в верхней части экрана. При изменении текущих дома или месяца происходит автоматическое сохранение предыдущих данных в БД, после чего обновляется содержимое некоторых элементов управления.
При изменении номеров домов и квартир в случае, если такой номер уже имеется в БД, пользователь извещается об этом, и ему предлагается изменить значение поля.
При изменении данных, влияющих на расход электроэнергии за месяц, происходит перерасчет вычислимых полей в окне данных с информацией по квартирам дома.
Операции над домами:
модификация. При изменении номера дома происходит немедленное автоматическое сохранение данных и обновление списка домов;
удаление. При этом у пользователя запрашивается подтверждение на выполнение этой операции;
добавление. При этом месяный тариф устанавливается равным значению по умолчанию (меню “Вид”->“Параметры”). Активным становится окно данных для ввода постоянной информации о доме. При выходе из него, т.е. когда оно теряет фокус ввода, производится запрос на сохранение введенных данных, т.е. добавление записей в соответствующие таблицы.
Операции над квартирами:
модификация;
удаление;
добавление. При этом квартире присваивается номер, равный максимальному номеру среди всех остальных квартир плюс единица;
сортировка. Выполняются при щелчке мышью на одном из заголовков столбцов в таблице квартир. Первый щелчок на заголовке приводит к выполнению сортировки по возрастанию данных (Ascending), а повторный – по убыванию (Descending).
Рядом с каждой записью с информацией по квартире находится кнопка “Приборы”, нажатие которой вызывает диалог редактирования приборов данной квартиры:
в верхней его части отображаются номера квартиры и дома, а также месяц, для которого приводятся данные. В данном окне изменять можно только текущий месяц;
при изменении месяца или выходе из диалога выводится запрос для подтверждения сохранения данных (если они были изменены);
при модификации данных по приборам автоматически обновляется поле “кВ/ч в день”, отображающее суточное потребление энергии квартирой;
кнопка “Копировать” осуществляет копирование информации о приборах в квартире для текущего месяца во все остальные месяцы года;
кнопка “Undo” отменяет все изменения, сделанные в списке приборов текущего месяца. “Приборы” – работа со списком приборов, которые могут иметься в квартирах. Каждый прибор идентифицируется своим именем и потребляемой мощностью.
При удалении прибора из списка происходит перерасчет информации в БД, зависящей от расхода электроэнергии. Это необходимо делать потому, что удаляемый прибор может влиять на эти данные, если он имеется в списках приборов для квартир.
При выходе из этого диалогового окна программа проверяет, были ли сделаны изменения мощности имеющихся в БД приборов. В случае обнаружения такой ситуации также производится перерасчет данных для квартир (и, соответственно, домов), содержащих такие приборы.
3) “Отчет”
а) “Дома” – отчет по домам. Пользователь выбирает из списков в верхней части окна дом и месяц, по которым он желает получить отчет. Возможно также задание всех домов и (или)всех месяцев одновременно. В этом случае просмотр отчетных данных, которые в данный момент не отображаются, осуществляется с помощью полосы прокрутки.
Отображаемые данные:
информация о доме (его номер, число квартир и жильцов);
тариф и сумма, необходимая для погашения расходов на электроэнергию для дома в указанном месяце.
4) “Вид”
а) “Toolbar” – управление видимостью панели инструментов;
б) “Параметры” – изменение месячного тарифа, устанавливаемого по умолчанию при добавлении нового дома.
Программа и методика испытаний
Отладка программы
Простая истина состоит в том, что человек несовершенен, поэтому все мы допускаем ошибки, что является совершенно нормальным явлением как в повседневной жизни, так и в программировании. Редко кому удается с первого раза написать программу без ошибок. Их появление в программе заставляет программиста многократно проверять все с самого начала. Совокупность действий по обнаружению и устранению ошибок в программировании называется отладкой.
Процесс отладки в общем случае можно разделить на четыре этапа:
Обнаружение ошибки
Этот этап является наиболее очевидным. Компьютер либо "зависает" во время работы программы, либо происходит сбой, который проявляется в выдаче на экран бессмысленной информации. Однако, в некоторых случаях ошибка не проявляется так очевидно. Программа может работать хорошо до тех пор, пока не будет введено некоторое число ( например, 0 или отрицательное число ), или пока не будет тщательно проверена выдаваемая ею информация. Только после такой проверки можно обнаружить, что результат отличается от ожидаемого.
Поиск ее местонахождения
Этот этап иногда является самым трудным. Он заключается в том, чтобы найти место в программе, где находится ошибка. Просто невозможно держать в голове всю программу сразу ( если эта программа не очень маленькая ). Лучший подход – это "разделяй и властвуй", т.е.разбивать программу на части и отлаживать их отдельно друг от друга.
Определение причины ошибки
Этот этап, выяснение причины ошибки, возможно, является второй наиболее трудной стадией отладки. После того, как будет определено местонахождение ошибки, обычно становится несколько проще определить причину неправильной работы программы. Например, если программист определил, что ошибка находится в какой-то конкретной функции, то ему достаточно просмотреть текст только этой процедуры, а не всей программы. Но даже в этом случае ошибка может оказаться настолько "неуловимой", что придется немного поэкспериментировать, прежде удасться ее локализовать.
Исправление ошибки
Этот этап заключается в исправлении ошибки. Вооружившись знанием языка программирования и знанием местонахождения ошибки, разработчик устраняет ее. После этого он снова запускает программу, с трепетом ожидая появления следующей ошибки.
Отладка программы велась в течение в течение всего срока разработки. Возникавшие в ее ходе ошибки можно разделить на три группы:
ошибки в алгоритмах вычислений;
ошибки, заключающиеся в неправильном выборе критериев для получения информации из БД;
ошибки, связанные с некорректным взаимодействием элементов управления между собой.
Средством отладки являлся интегрированный отладчик среды разработки приложений Power Builder 7.0. Его возможности отладки не, безусловно, не могут сравниться с полноценными отладчиками, такими как Turbo Debugger, Soft-Ice, Codeview, но, при этом, он реализует набор отладочных функций, позволяющих достаточно быстро локализовать и устранить ошибку:
просмотр программных объектов в виде дерева с возможностью выбора текста сценария обработки события или пользовательской функции;
возможность просмотра значений переменных, как объектов, т.е. с иерхическим представлением их структуры;
автоматическое отображение переменных следующих типов:
глобальные;
локальные;
переменные экземпляра объекта;
переменные родительского класса;
разделяемые переменные – данные, которые доступны всем объектам, содержащимся внутри объекта-контейнера (например, окна);
объекты в памяти;
средства просмотра значений выражений, а также модификация значений переменных;
возможность просмотра стека вызовов и переключения контекста для просмотра значений переменных на любом уровне вложенности вызовов функций;
установка точек останова, а также задание условий для их срабатывания;
при возникновении ошибки отладчик выдает на экран сообщение о ее местонахождении в коде программы;
возможность удаленной отладки.
Тестирование программы
По окончании разработки, программное средство подверглось тщательному тестированию. Оно заключалось в следующем:
а) Выполнение стандартных действий по работе с данными.
С помощью программы выполнялись операции добавления – удаления – редактирования данных о расходе электроэнергии. При этом не было замечено никаких отклонений от нормального хода выполнения программы, т.е. все ее действия были предсказуемы. Также не наблюдалось никаких неточностей, касающихся вычислительных алгоритмов, т.е. суммы расходов электроэнергии в кВ/ч и денежное их выражение соответствовали предварительно вычисленным.
Тестирование выполнялось на довольно значительном массиве данных – количество домов достигало 20-ти, и количество квартир в них варьировалось от 10 до30-ти. При этом каких-то значительных временных задержек при загрузке или сохранении информации в БД замечено не было.
Однако при редактировании списка приборов (изменении мощности или их удалении) время обработки иногда доходило до 7-8 сек. Это можно объяснить особенностями формата представления данных о приборах в таблице FLAT_V.
б) Создание нестандартных ситуаций, требующих особой обработки.
Создавались исключительные ситуации типа ввода неправильных данных в поля числового типа, ввода отрицательных значений и т.п. При этом программа корректно обрабатывала эти ситуации, выдавая пользователю сообщения об ошибке и передавая фокус ввода тому элементу управления, который содержит неправильные данные.
Другой исключительной ситуацией является оставление незаполненными тех полей данных, которые должны содержать информацию. Это событие обрабатывается аналогичным образом.
При вводе номеров дома и квартиры пользователь, умышленно или случайно, может ввести значения, которые уже содержатся в БД. При этом он будет предупрежден о возникшей ситуация и программа оставит данные без изменения, даже если пользователь сразу после изменения значения поля захочет выйти из диалогового окна.
В ходе испытаний проверке подвергались рабочие характеристики программы, такие как скорость выполнения операций над данными, время их обработки и т.п. При этом их значения не выходили за разумные пределы. Здесь следует заметить, что временные параметры работы зависят, прежде всего, от характеристик сервера БД, обрабатывающих запросы, а также от способа обработки данных – с помощью хранимых процедур или программного кода. Разработчик, где это возможно, старался выполнять обработку данных с помощью хранимых процедур, что вполне себя оправдало, т.к., например, время вычисления суммы, расходуемой всеми квартирами дома за месяц, сократилось в 2.5-3 раза по сравнению с реализацией этой операции в тексте программы.
В ходе испытаний была доказана полная совместимость и правильность работы программного средства с Windows NT 4.0, Windows 95, Windows 95 OSR2, Windows 98.
Описание применения
Разработанная программа может работать и как средство для расчета стоимости электроэнергии и как система анализа и прогнозирования потребления электроэнергии потребителями.
Программа позволяет вести учет потребления электроэнергии по группам потребителей с учетом различных параметров (льготы, штрафы). В связи с этим она может применяться не только конечными пользователями, но и организациями, занимающимися начислением платы за пользование электроэнергией.
Заключение
В заключение приведем обзор программ, распространенных на рынке программных средств по учету электропотребителей.
ASODES+K – универсальная система учета абонентов электросети и квартиросъемщиков, начисления квартплаты, коммунальных платежей и учета поступлений платежей как за квартплату, так и за электроэнергию квартиросъемщиком. Задача может работать как при применении единой платежной книжки, так и при раздельном расчете различными организациями. ASODES учитывает любые льготы, субсидии за квартплату, категории домов. Изменения тарифов и перерасчеты производятся автоматически. Ввод платежей за электроэнергию может производиться по различным тарифам. Выдается широкая гамма документов как на экран, так и , при необходимости, на печать. Выписываются счета за начисленные платежи по квартплате и коммунальным услугам. Для освоения системы не требуется специальной компьютерной подготовки. Система устанавливается на любом IBM-совместимом компьютере ХТ, АТ-386 и далее.
BANKEL – удобный, гибкий комплекс программ для учета, накопления и расчета стоимости электроэнергии предприятием. BANKEL работает с электросчетчиками как активной, так и реактивной энергии. Расчет по э/счетчикам активной энергии производится по мощности, по процентам и по показаниям. Расчет реактивной энергии c учетом экономического значения и по процентам от счетчика активной энергии. Имеется возможность создания групп потребителей и расчет по ним. Осуществляется ввод текущих показаний объектов, замена счетчика, ввод лимитов абонентов, ввод заявленной мощности, ввод расхода по акту, ввод поступлений из банка и из кассы. Выходные документы выдаются в полном объеме: сводки и платежки, полная оборотная ведомость, реализация, текущие поступления из банка, ведомость расхода по группам, реестр, списки дебиторов, платежка на пени, списки названий и реквизитов абонентов, объектов, выдача статистики по годам проверки счетчика. Существует возможность архивного накопления поступлений по абоненту. Возможна самостоятельная настройка текста в платежке и НДС. Для освоения системы не требуется специальной компьютерной подготовки. Система устанавливается на любом IBM совместимом компьютере ХТ, АТ-386 и далее.
ПРОГРЭС – (программа расчета, оптимизации городских распределительных электрических сетей) – предназначена в помощь инженеру электросети, работающему на городском электросетевом предприятии, при решении задач анализа потерь в электросети 6-10 кв., разработке мероприятий по снижению этих потерь, поиска точек оптимального деления электросети по критерию минимума потерь мощности и энергии. Весьма полезна для моделирования нагрузок при подготовке технических условий на присоединение новых мощностей.
Программа производит:
расчет токораспределения на основе нагрузок, замеренных персоналом;
расчет напряжения в узлах сети;
расчет загрузки элементов сети (линий, трансформаторов);
расчет токов короткого замыкания;
расчет потерь мощности и энергии в линиях, трансформаторах и н/в сети 0,4 кв.
Программа доступна к освоению и работе персоналом, не имеющим специальной компьютерной подготовки, снабжена курсом обучения, обеспечивает моделирование сети при проработке технических условий по включению новых абонентов.
ЭКЗАМЕН – весьма полезная программа, позволяющая проводить проверку знаний по любым тематикам. Например: проверку знаний по безопасности при работе в электроустановках, проверку знаний при работе с грузоподъемными механизмами и др.
Пользователь может сам создать тему, набор вопросов и подобрать несколько возможных ответов. Программа чрезвычайно проста в обращении. Она выставляет оценку и ведет протокол. Программа снабжена курсом обучения и может работать на компьютер любой конфигурации.
Формы входных и выходных документов
Распечатка экранных форм
Рисунки, графики, схемы, диаграммы
Структура данных
Сообщения системы