1 ВИЗУАЛЬНЫЕ ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ. ПРИНЦИПЫ ПРОГРАММИРОВАНИЯ И АНАЛИЗ ПРИЛОЖЕНИЙ А.И. Еникеев, И. А. Еникеев Казанский госуниверситет Цель статьи - довести до широкого круга программистов и пользователей возможности эффективного программирования в визуальной среде объектноориентированных систем управления базами данных (СУБД) и специфику применения этих систем для автоматизации решения так называемых информационновычислительных задач, к числу которых относятся бухгалтерский учет, анализ финансово-хозяйственной деятельности предприятий, информационно-поисковые задачи и т.п. Кроме этого для программистов, уже вкусивших “прелести” объектноориентированных визуальных средств, авторами статьи приводятся некоторые тонкие аспекты стиля разработки приложений на основе практического опыта, накопленного при программировании информационно-вычислительных задач в среде СУБД Visual FoxPro. Авторы не претендуют на полноту изложения материала и будут весьма признательны к замечаниям и критическим откликам опытных специалистов, работающих в упомянутой выше области. ВВЕДЕНИЕ В отличие от традиционного процедурно ориентированного программирования при объектно-ориентированном подходе основная роль отводится объектам обработки программ (входным, выходным и промежуточным структурным элементам данных), в описании каждого из которых на соответствующем языке программирования хранятся свойства объекта (размеры, цвет, связи с другими объектами и т.п.) вместе с программами (методами ) их обработки. Объектно-ориентированное программирование основывается на следующих основных принципах: - каждый объект может иметь иерархическую структуру, предусматривающую включение в него других дочерних объектов с наследованием свойств главного объекта ; - обеспечивается автоматический контроль целостности объектов, позволяющий избегать нарушений структурных связей объектов при внесении каких-либо изменений в обрабатываемые объекты; - имеется возможность определения классов объектов при работе с различными однотипными объектами ; класс объектов представляет из себя некий абстрактный объект, обобщающий свойства соответствующих однотипных объектов и позволяющий эффективно вводить новый объект (экземпляр класса), наследующий свойства класса, путем конкретизации абстрактного объекта. Идея объектно-ориентированного программирования появилась еще в 60-х годах и нашла свою реализацию в разработке системы компьютерного моделирования SIMULA 67 [1], в которой на уровне языка программирования было введено понятие классов. Дальнейшее развитие объектно-ориентированного подхода можно охарактеризовать как симбиоз таких разделов разработки программного обеспечения, как параметрическое программирование, абстрактные типы данных, структурное программирование, языки спецификаций и программный синтез, CASE технологии, функциональный и декларативный стили программирования. Важно отметить, что несмотря на появление этого подхода в программировании достаточно давно, более или менее совершенная реализация объектно-ориентированных средств с точки зрения 2 “индустриального программирования” оказалась возможной только в последнее десятилетие за счет интенсивного развития уровня компьютерной техники и программного обеспечения. Классическим примером современной системы объектноориентированного программирования является система Borland C++ [ 2 ]. Однако, несмотря на большие возможности языка C++, для большинства разработчиков этот язык представляется достаточно трудным и громоздким в освоении. В первую очередь это объясняется излишней универсализацией системы C++. Стремление к менее болезненному способу создания качественных программ привело к разработке целой серии визуальных объектно-ориентированных систем управления базами данных (СУБД) - DELPHI [ 3 ], ORACLE [ 4 ] и Visual FoxPro [ 5 ], в которых средства объектно-ориентированного программирования удачно сочетаются с мощными средствами визуального представления объектов с адекватными средствами сетевой поддержки. Наибольшей популярностью в западных странах и США пользуется система ORACLE, обладающая более совершенными средствами по сравнению с другими аналогичными СУБД, особенно с точки зрения сетевой поддержки. В нашей стране большее распространение получили системы DELPHI и Visual FoxPro, благодаря их сравнительно дешевой стоимости. Здесь мы собираемся ограничиться анализом средств и возможностей современных визуальных объектноориентированных СУБД на примере системы Visual FoxPro, предполагая, что в принципиальном аспекте все эти системы ненамного отличаются друг от друга. 1. ОСНОВНЫЕ ТРЕБОВАНИЯ К ПРОГРАММНОМУ И АППАРАТНОМУ ОБЕСПЕЧЕНИЯМ Visual FoxPro представляет собой принципиально новую версию широко известной СУБД Microsoft FoxPro, которая функционирует в операционной среде Windows 3.1, Windows 95 и Windows NT . Visual FoxPro обеспечивает совместимость с предыдущими версиями FoxPro, позволяя сравнительно просто переносить ранее созданные приложения в среду Windows 95. Эта СУБД разработана в полном соответствии со стандартами фирмы Microsoft, что позволяет сравнительно легко обмениваться данными с другими приложениями Windows. Кроме этого поддерживается доступ к наиболее популярным SQL-серверам баз данных - Microsoft SQL Server, ORACLE, INFORMIX и к другим, используя стандарт ODBC. В настоящее время широко используются две версии Visual FoxPro 3.0 и 5.0, последняя из которых безусловно является более совершенной. Наличие объемной интегрированной объектно-ориентированной визуальной среды программирования требует достаточно большой оперативной и внешней памяти, а также может существенно замедлять функционирование разрабатываемых приложений. Опыт эксплуатации системы Visual FoxPro показывает, что для нормального функционирования большинства приложений требуется как минимум 16 Мбайт оперативной памяти и 200 Мбайт на жестком диске. 2. ПРИНЦИПЫ ПРОГРАММИРОВАНИЯ В отличие от предыдущих версий система Visual FoxPro предлагает новый подход к программированию, известный как событийно-управляемое программирование (Event-Driven Programming), суть которого сводится к определению некоторого множества событий (Click-нажатие левой кнопки мышки, Load- момент загрузки объекта и т.п.), каждое из которых может быть связано с соответствующим программным модулем (методом), запускаемым при активизации соответствующего события. Основные принципы событийно-управляемого программирования наиболее 3 полно реализуются при использовании объектно-ориентированной среды, когда элемент на экране, которым манипулирует пользователь, имеет связь с объектом, созданным программистом. Событийно-управляемая программа достаточно хорошо приспособлена к изменению внешней ситуации и позволяет программисту сравнительно просто добавлять новые средства обработки событий. Другой важной особенностью объектно-ориентированной визуальной среды является возможность одновременного проектирования, разработки и реализации приложений, обеспечиваемая за счет соединения информационных, логических и алгоритмических связей в единое целое в рамках определяемого объекта обработки, успешно избегая многих ошибок, возникающих при нарушении принципов адекватности между проектом и его реализацией. Более того, этот принцип позволяет успешно описывать постановку (спецификацию) задачи на программирование средствами СУБД. Создание разветвленной и достаточно объемной интегрированной среды, обеспечивающей объектно-ориентированное, визуальное и событийно-управляемые возможности программирования, безусловно является дорогим “удовольствием”, за которое приходится расплачиваться большим расходом памяти, замедлением времени работы приложений и, наконец, громоздкостью системы в смысле ее освоения. Последнее является наиболее уязвимым объектом критики сторонников традиционного процедурно-ориентированного программирования. Однако, необходимо иметь в виду, что грамотное использование всех перечисленных выше возможностей, позволяет существенным образом повысить производительность разработки программ и создавать в итоге высококачественный программный продукт, удовлетворяющий соответствующим стандартам. Об этом свидетельствует богатый опыт разработки многих приложений, в частности авторам статьи удалось буквально в течении 2-х дней полностью переписать практически заново достаточно емкую систему компьютерного учета автомобильного транспорта для одного из Министерств Республики Татарстан, тогда как на разработку предыдущей версии этой системы традиционными процедурно-ориентированными средствами (СУБД FoxPro 2.5 ) было затрачено около 2-месяцев. С другой стороны переход от процедурно-ориентированной модели мышления к объектно-ориентированной - процесс достаточно длинный и болезненный. Поэтому часто многие программисты долгое время при переходе от процедурного способа программирования к объектно-ориентированному продолжают по инерции программировать по старому, не используя преимуществ объектноориентированного стиля в новой среде, теряя в результате много времени на программирование и не получая взамен ничего хорошего в этом случае. В частности эту болезненную стадию перехода пришлось пройти и авторам данной статьи, причем этот процесс занял достаточно длительное время (около года изнурительной работы ). 3. ТЕХНОЛОГИЯ И ОСНОВНЫЕ ОБЪЕКТЫ ПРОГРАММИРОВАНИЯ Технология проектирования и разработки приложений в среде СУБД Visual FoxPro начинается с создания проекта (Project), являющегося главным объектом. Механизм развертывания последующих этапов разработки (детализация) проекта определяется следующей структурой : PROJECT DATA DOCUMENTS FORMS REPORTS ( ( ( ( ( проект ) базы данных ) документы ) экранные формы ) формы вывода на печать ) 4 CLASSES CODE PROGRAMS APPLICATIONS OTHER MENU TEXT FILES OTHER FILES ( классы ) ( программы и приложения ( программы ) ( приложения ) ( другие объекты) ( меню ) ( текстовые файлы ) ( другие файлы ) ) 3.1. Базы данных Создание баз данных определяется структурой : DATA DCB-файлы ( контейнеры данных ) DBF - файлы (таблицы), входящие в состав соответствующих контейнеров FREE TABLES ( свободные таблицы : DBF-файлы, не входящие в состав ни одного из контейнеров ) В отличие от предыдущих версий в СУБД Visual FoxPro введено понятие контейнера данных (или базы данных), представляемого в виде структурированного DCB -файла, который включает в себя множество так -называемых таблиц (DBF файлов ). Кроме этого важным новшеством является введение механизма защиты целостности баз данных, позволяющего автоматически контролировать и предотвращать нарушения структурных связей в базах данных при выполнении операций над базами данных. Этот механизм основывается на средствах, позволяющих устанавливать структурно-логические отношения между таблицами базы данных и определять специальные функции проверки (триггеры) для разрешения или запрета операций удаления, вставки и модификации записей таблиц в зависимости от определяемых условий. 3.2. Документы В понятие документов включаются экранные формы ( FORMS ) и формы для вывода на печать (REPORTS). Создание каждого нового документа предусматривает как правило установление связи документа с соответствующими базами данных (DATA ENVIRONMENT) и заполнение документа различными объектами (командные окна, окна для ввода и редактирования данных, объекты типа меню и т.п. ), которые строятся на основе стандартной или определяемой библиотеки классов. Для каждого из объектов устанавливаются свойства (Properties), определяющие различные характеристики объекта (связи с полями таблиц, способ размещения на экране, и т.п.). Кроме этого с каждым объектом можно связать некоторое множество событий и запланировать вызов соответствующих подпрограмм (методов), запускаемых автоматически при возникновении тех или иных запланированных событий. Такая возможность позволяет реализовать принцип событийно-управляемого программирования (Event-Driven Programming), обеспечивающего существенное повышение эффективности технологии производства программ. 3.3. Классы Класс объектов представляет из себя некий абстрактный объект, обобщающий свойства соответствующих однотипных объектов и позволяющий эффективно вводить 5 новый объект (экземпляр класса), наследующий свойства класса, путем конкретизации абстрактного объекта. Предоставляя в распоряжение программиста библиотеку встроенных классов, Visual FoxPro позволяет вводить новые классы и создавать новые библиотеки классов. 3.4. Программы и приложения В Visual FoxPro предоставлена возможность гибкого сочетания объектноориентированного стиля программирования с процедурно-ориентированным, предусматривающая создание программных и процедурных файлов (PRG - файлов) на языке FoxPro. Причем один из этих файлов выбирается в качестве главного “запускного” модуля, активизирующего соответствующие объекты, каждый из которых активизирует другие и т.д. В результате компиляции проекта имеется возможность получения как EXE файла, так и специального APP - файла (Application), представляющего из себя промежуточный результат компиляции и выполняемого интерпретатором Visual FoxPro. Такие APP - файлы, называемые приложениями, являются более компактными по сравнению с соответствующими EXE - файлами, однако могут выполняться только при наличии среды Visual FoxPro. 3.5. Другие объекты Сюда включаются меню, текстовые и другие файлы, необходимые для разработки программ. В Visual FoxPro представлены средства генерации меню-диалога, аналогичные предыдущим версиям. 4. ОБЛАСТЬ ПРИМЕНЕНИЯ Универсальность СУБД Visual FoxPro обеспечивает автоматизацию решения достаточно широкого класса задач, однако наиболее очевидный эффект достигается для информационно-вычислительных задач, характерной особенностью которых является сочетание обработки больших информационных массивов с вычислительными задачами. Это - бухгалтерский учет, анализ финансовохозяйственной деятельности предприятий, информационно-поисковые задачи и т.п. Для эффективной разработки и создания качественного программного продукта, ориентированного на решение перечисленных задач, очень важное значение имеет концептуальный подход к разработкам. Это - достаточно емкое понятие, предусматривающее в первую очередь строгую математическую формализацию модели разработки, с помощью которой можно было бы наиболее просто и компактно описать и в дальнейшем эффективно реализовать сложные структурные связи между объектами и алгоритмами их обработки, четко отделяя второстепенные моменты от главных. Например, разработка компьютерной бухгалтерии предусматривает создание комплекса подсистем: расчет заработной платы, касса, банк, материально складской учет, учет основных средств, работа с подотчетными лицами, поставщики-подрядчики и т.п. Каждая из подсистем должна включать в себя средства для получения огромного числа различных отчетных документов с учетом различных бухгалтерских операций и специфики бухгалтерской отчетности для разных типов организаций. Кроме этого необходимо обеспечить возможности обмена данными между этими подсистемами и экспорта результатов работы подсистем в автоматизированное рабочее место главного бухгалтера с целью получения конечных бухгалтерских документов (баланс, главная книга и т.д.). Все это представляет из себя достаточно сложную и трудоемкую задачу, “лобовое” решение которой как правило не приносит ожидаемых результатов. С 6 другой стороны концептуальный анализ этой проблемы показывает, что основная часть перечисленных подсистем имеет одну и ту же общую основу, сводящуюся к расчету остатков на текущий период из оборотов и остатков предыдущего периода. Следовательно, разработку необходимо начинать с создания средств расчета остатков, которые в последующем могут существенно облегчить задачу разработки и реализации упомянутых подсистем. Другим важным аспектом разработки бухгалтерской системы является создание единых справочников, представляющих из себя источники первичной информации для всех соответствующих подсистем (план счетов, справочник финансовых операций с бухгалтерскими проводками, справочник источников финансирования, справочник подразделений предприятия и т.п.), правильная организация которых обеспечивает универсальность и хорошую адаптируемость системы к изменениям. Объектно-ориентированные средства, позволяя абстрагирование (обобщения) объектов разработки приложений с последующей их конкретизацией, представляют наиболее адекватный инструмент для создания различных информационно-расчетных систем и удачно “провоцируют” разработчиков этих систем на выбор концептуальных решений. ЗАКЛЮЧЕНИЕ Переход от традиционного процедурного стиля программирования к объектноориентированному, который успешно преодолели многие программисты ведущих индустриальных государств и преодолевают в России, представляет принципиально новый шаг в направлении концептуального программирования, сопоставимый по своей важности с переходом от машинноориентированного программирования к языкам высокого уровня. За время своего развития этот современный стиль программирования обогатился средствами обработки баз данных и визуального представления обрабатываемой информации. Существенное продвижение по пути к стандартизации, повышение производительности труда программистов, возможность одновременного проектирования, разработки и реализации приложений - все это далеко не полный перечень преимуществ, предоставляемых объектно-ориентированными системами. БЛАГОДАРНОСТИ Мы выражаем благодарность всем нашим коллегам, с которыми вместе делили тяготы упорного и далеко не всегда благодарного программисткого труда при разработке целого ряда компьютерных систем на Visual FoxPro. Особенно признательны Александру Михайловичу Гусенкову за создание великолепной библиотеки классов, а также Галине Аркадьевне Киселевой и Юлии Ленаровне Музафаровой за их неоценимый вклад в дело разработки компьютерных бухгалтерских систем. ЛИТЕРАТУРА 1. А. Дал, Мюрхауг, Ньюгорд, программирования. -М.: Мир, 1969. СИМУЛА 67. Универсальный язык 2. Тед Фейсон, Объектно-ориентированное программирование в Borland C++ 4.5, 4-ое издание, SAMS, 1995 г. 7 3. Том Сван, Основы программирования DELPHI для WINDOWS 95, Киев: Изд-во “ДИАЛЕКТИКА”,1996 г. 4. Д. Холмс-Кинселла, А. Брюзгин, Разработка приложений для СУБД ORACLE с помощью SQLWINDOWS фирмы Gupta, “Системы управления базами данных”, N 2, 1996 г. 5. Пинтер Лес, Пинтер Джон, Visual FoxPro : Уроки программирования, Mc Graw-Hill (пер. с англ.), 1996 г.