Тема номера
Visual FoxPro 3.0: новая версия, новая технология
Алексей Клочков
В начале прошлого года компания Microsoft анонсировала новую версию популярной настольной СУБД Visual FoxPro 3.0. Летом она поступила в продажу в США, а в октябре появилась и на полках российских "продуктовых" магазинов, вызвав широкий резонанс среди разработчиков xBase-приложений.

В третьей версии Visual FoxPro появилось много нового. Так много, что, по мнению некоторых аналитиков, речь идет не столько о новой версии, сколько о новом программном продукте.
Visual FoxPro 3.0 – это объектно-ориентированное визуальное средство разработки, в значительной степени реализующее технологию RAD (подробнее о RAD см. "Компьютерра" #42(122) от 20 ноября 1995). Объектно-ориентированный подход, управление приложением по событиям, правила, триггеры, хранимые процедуры – все это лишь наиболее значительные из нововведений. В третьей версии реализована поддержка протокола OLE 2.0, внесен ряд усовершенствований в средства разработки приложений с архитектурой "клиент-сервер". Улучшена организация многопользовательского режима: реализованы механизмы обработки транзакций и буферизации доступа к БД.
В последнее время в компьютерной прессе часто ставится вопрос: а захотят ли программисты осваивать новую технологию, имея под ногами пусть уже не очень твердую, но зато привычную почву процедурного программирования? Впрочем, обо всем по порядку. Сначала рассмотрим подробнее (насколько это возможно в небольшой статье), что же представляет собой Visual FoxPro 3.0. И начать, видимо, стоит с того, с чего начинается любой проект в FoxPro – Project Manager.
Project Manager
Project Manager теперь имеет вид записной книжки с ярлычками, соответствующими основным разделам проекта: Data, Docs, Classes, Codes, Other. Эти разделы, в свою очередь, делятся на группы. Например, в раздел Data входят три группы: Databases, Free Tables и Queries. Каждая из этих групп содержит уже конечные компоненты проекта: базы данных, таблицы и запросы соответственно. На первой странице (с ярлычком "АИ") в виде такой же иерархической структуры представлены все разделы проекта. "Страницы" можно "вырывать" и размещать на экране по своему усмотрению, что очень удобно. Любой компонент проекта открывается двойным щелчком мыши. Например, если в разделе Data войти в группу Databases и дважды щелкнуть по названию одной из представленных там баз данных, на экране появится проектировщик БД (Database Designer) с загруженной в него базой данных.
База данных
В Visual FoxPro введен очень полезный объект – Database Container, что можно перевести как "контейнер базы данных", или просто "база данных" Работая с прежними версиями FoxPro, программист имел дело с набором таблиц (DBF-файлов), между которыми он процедурно устанавливал связи. Теперь же информация обо всех используемых в БД таблицах и связях между ними хранится в контейнере базы данных (в DBC-файле). В результате в Visual FoxPro стала возможной реализация целого ряда эффективных средств, позаимствованных у мощных распределенных СУБД типа Oracle, Informix и их "одноклассников". В частности, введены постоянные межтабличные связи, правила, триггеры, хранимые процедуры. Правила, которые раньше задавались в процедурном коде, теперь хранятся в самой БД, что гарантирует их четкое выполнение даже при обработке БД каким-либо внешним приложением через ODBC. Причем помимо правил, срабатывающих по окончании редактирования поля (типа VALID), в Visual FoxPro можно устанавливать правила, активизирующиеся после завершения редактирования всей записи. Это позволяет вовлекать в проверку условия значения сразу нескольких полей БД.
В Visual FoxPro введены триггеры UPDATE, INSERT и DELETE, которые срабатывают при попытке обновить, вставить или удалить запись. В результате вызывается заданная функция, возвращающая логическое значение; если это значение – .F., то соответствующее действие отменяется. Триггерами и правилами активизируются фрагменты программного кода, хранящиеся в самой БД (в DBC-файле) и называемые хранимыми процедурами. Наличие в Visual FoxPro постоянных межтабличных связей, триггеров и хранимых процедур позволяет довольно легко решить проблему поддержания ссылочной целостности в БД. Для этого предусмотрен специальный инструмент – Referential Integrity Builder, который позволяет определять для каждой межтабличной связи реакцию на обновление, добавление или удаление записей в связанных таблицах.
ООП и управление приложением по событиям
Очевидно, что главные трудности в освоении Visual FoxPro 3.0 – впрочем, как и других современных систем программирования – связаны с переходом от процедурного программирования к объектно-ориентированному (ООП). Разумеется, опыт работы с другими объектно-ориентированными языками здесь очень пригодится, ведь проблемы перехода к ООП прежде всего связаны с отказом от штампов "процедурного мышления". Освоение же нового синтаксиса, скорее всего, не вызовет особых трудностей. Как известно, ООП строится на классах, которые являются прообразами объектов, используемых в конкретных приложениях. В Visual FoxPro 3.0 существует 2 вида классов (и 2 вида объектов соответственно): простые (custom) и контейнеры (container). Класс-контейнер, в отличие от простого класса, может содержать в себе другие классы. Например, класс Form (форма ввода) включает в себя ряд простых классов (кнопки, текстовые поля, поля ввода и т.п.). В распоряжении программиста находится 27 базовых классов, на основе которых он может создавать свои собственные классы по принципу наследования. Если же необходимо создать новый класс "с нуля", используются так называемые порождающие классы Custom и Container.
Специальное средство Class Designer позволяет создавать и редактировать классы визуально. В профессиональную редакцию пакета также включен инструмент Class Browser, предназначенный для просмотра и редактирования библиотек классов. Class Browser позволяет легко прослеживать межклассовые отношения, переопределять, переименовывать и перемещать классы. Используя базовые и новообразованные классы как своего рода шаблоны, вы создаете экземпляры объектов с уникальными именами. Для обращения к свойствам и методам объектов используется традиционный для ООП синтаксис вида: <имя_объекта>.<имя_переменной>, <имя_объекта>.<имя_метода>.
Другое важное нововведение Visual FoxPro 3.0 – управление приложением по событиям. Допускается обработка таких событий, как перемещение курсора, нажатие клавиш, движение указателя мыши, нажатие и отпускание ее кнопок и др. Объекты реагируют на события вызовом некоторого метода, который и обрабатывает событие. Заданные по умолчанию методы можно переписывать и заменять по своему усмотрению.
Таким образом, Visual FoxPro позволяет создавать гибкий пользовательский интерфейс с реализацией всего набора стандартных для Windows событий. В частности, разработчику предоставляется возможность в полной мере применять столь удобный для пользователя механизм drag-and-drop.
Средства создания пользовательского интерфейса
Визуальные средства создания пользовательского интерфейса – одна из главных составляющих технологии RAD. BVisual FoxPro они представлены редактором меню (Menu Designer) и редактором форм (Form Designer), пришедшим на смену средству Screen Builder. Интерес представляет в первую очередь Form Designer, поэтому на нем мы остановимся подробнее.
Теперь и сама форма (ранее называвшаяся окном), и каждый из входящих в нее элементов являются объектами и связаны с набором свойств, событий и методов, с которыми и имеет дело разработчик. Помимо окна редактора форм, в котором находится проектируемая форма, при редактировании используются одна цветовая и три инструментальных палитры. Одна из них (Form Controls) – содержит элементы управления, которыми и "обставляется" форма: кнопки, текстовые поля, списки, поля ввода и т.д. Причем палитра эта может быть расширена за счет объектов собственного изготовления.
Свойства, методы и события, связанные с используемым в данный момент объектом, редактируются в окне Properties. В процессе проектирования формы можно сохранить группу объектов как класс, да и сама создаваемая форма – это новый класс. Не случайно визуальный редактор классов Class Designer и редактор форм похожи друг на друга, как братья-близнецы, – ведь их функции во многом схожи. Достаточно освоить один из них, чтобы суметь воспользоваться другим.
В новой версии появился ряд новых базовых элементов управления. Среди них особенно выделяются два мощных объекта-контейнера: Grid (табличная сетка) и PageFrame (записная книжка с ярлычками, упоминавшаяся при описании Project Manager). Grid содержит в себе столбцы, которые, в свою очередь, также являются контейнерами и состоят из заголовка и ячеек. Ячейкой таблицы может быть практически любой из элементов управления, в том числе
Grid, что открывает разработчику довольно широкие возможности. Таблица Grid особенно полезна при создании форм типа One-To-Many.
PageFrame содержит в себе объекты-страницы (Page), которые тоже являются контейнерами и могут содержать в себе различные элементы управления. PageFrame определяет местоположение и активность страниц.
Примечательно, что каждая страница на самом деле имеет неограниченные размеры. Мы видим только часть страницы, ограниченную размерами PageFrame. Остальная же часть, вместе с помещенными на нее объектами, остается невидимой.
С помощью PageFrame можно имитировать несколько окон водном, экономя тем самым ресурсы системы. Завершив проектирование формы, можно сразу же попробовать ее в деле. Кроме того, теперь не надо ждать, пока для формы сгенерируется код: в синтаксис Visual FoxPro включена команда DO FORM для запуска форм.
Совместимость
С учетом размаха преобразований в новой версии FoxPro и огромного количества приложений, созданных в старых версиях этого программного продукта, вопрос совместимости приобретает почти первостепенное значение. И разработчики из Microsoft приложили немало усилий для обеспечения возможности полномасштабной миграции ПО.
Старые программы на FoxPro можно использовать тремя путями. Первый позволяет применять их в прежнем виде, не внося никаких изменений.

Второй связан с частичной модификацией программ. Третий вариант предполагает полное и автоматическое конвертирование объектных файлов FoxPro 2.x в формат версии 3.0 при помощи включенного в Visual FoxPro конвертора. Усовершенствования в организации БД потребовали изменения формата файлов .DBF, однако таблицы старого формата можно легко конвертировать в новый.
Резюме
Вышеизложенное, конечно же, далеко не полностью описывает все возможности Visual FoxPro 3.0. В частности, мы не рассматривали такие немаловажные составляющие этой системы, как инструменты разработки приложений в архитектуре "клиент-сервер", средства организации многопользовательского режима, возможности интеграции приложений на основе OLE 2.0 и др. Все это – тема для отдельного разговора. Что же касается сложностей, связанных с переходом к новым программным технологиям, которыми изобилует Visual FoxPro, то здесь каждый разработчик решает за себя. С одной стороны, средства RAD значительно упрощают и ускоряют разработку, а типичные для продуктов Microsoft "колдуны" (wizards), предлагающие свои услуги на каждом этапе разработки, позволяют создавать базы данных и приложения даже далеким от программирования пользователям. С другой стороны, для реализации на Visual FoxPro больших проектов и информационных систем с достаточно сложной структурой требуется изучение всех возможностей нового инструментария, не говоря уже о четком понимании объектно-ориентированного подхода и принципов программирования под Windows. Определенные усилия обязательно придется приложить – и они непременно будут вознаграждены.